Разрешить CORS на Symfony 4

Недавно мне нужно было разрешить CORS, и в поисках решения я нашел nelmio/NelmioCorsBundle.

Для начала я могу разрешить запрос из любого источника, так что это мой app/config/config.yml:

nelmio_cors:
    defaults:
        allow_credentials: false
        allow_origin: ['*']
        allow_headers: ['*']
        allow_methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']
        max_age: 3600
        origin_regex: false 

Это работало только для запросов GET, любой запрос POST возвращает:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

Мне не обязательно работать с этим пакетом, я сначала попытался раскомментировать TRUSTED_HOSTS и установить его с моим доменом в файле dotenv, но это было бесполезно. Также я не нашел никакой справки об этом TRUSTED_HOSTS в документах.

Поэтому я буду рад любой помощи с этим пакетом или любым другим решением для CORS на symfony.


Как и просили, я обновляю свою текущую конфигурацию nelmiocors:

# app/config/config.yml

# Nelmio CORS Configuration
nelmio_cors:
    defaults:
        origin_regex: true
        allow_origin: ['%env(CORS_ALLOW_ORIGIN)%']
        allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
        allow_headers: ['Content-Type', 'Authorization']
        expose_headers: ['Link']
        max_age: 3600
    paths:
        '^/':
          origin_regex: true
          allow_origin: ['%env(CORS_ALLOW_ORIGIN)%']
          # allow_origin: ['^http://localhost:[0-9]+']
          allow_headers: ['*']
          allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
          # allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
          max_age: 3600
          # hosts: ['^api\.']

Вы можете взглянуть на рецепт при установке пакета с Symfony Flex. Это конфигурация по умолчанию: github.com/symfony/recipes/blob/master/nelmio/cors-bundle/1.‌​5/… Как видите, файл .env также дополнен параметром CORS_ALLOW_ORIGIN.

Florian Hermann 06.02.2019 10:09

Да, я следовал рецепту, но это не сработало, после этого я попробовал определенный маршрут и получил другую ошибку, поэтому я отступил назад и попросил помощи.

Felipe Chagas 06.02.2019 10:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
2
19 958
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Не знаю, что именно было не так, но как один из комментариев помог (человек, который помог, возможно, удалил свой комментарий).

Я получаю эту конфигурацию для Nelmio CORS:

nelmio_cors:
    defaults:
        origin_regex: true
        allow_origin: ['*']
        allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
        allow_headers: ['Content-Type', 'Authorization']
        expose_headers: ['Link']
        max_age: 3600
    paths:
        '^/': ~

И после этого почистил кеш от кли и вручную и все заработало.

Мое предположение о том, что я делал неправильно: когда я впервые настроил Nelmio CORS, я не очистил кеш, и, следовательно, он не работал. После этого я пробовал некоторые другие комбинации конфигурации, и это тоже не сработало, даже когда я очистил кеш. Это заставляет меня думать, что код должен работать с самого начала, если я не забыл очистить кеш, после этого я использовал неверную конфигурацию и, очевидно, очистив кеш, это не сработает. В общем, это была ошибка новичков.

Если кто-то хочет увидеть заголовки CORS через Postman или прямую ссылку браузера - у вас ничего не получится. Вы должны поставить заголовок Origin на запрос, потому что иначе CorsListener не будет работать. Подробности в Nelmio\CorsBundle\EventListener\CorsListener::onKernelReques‌​t()

Rostyslav Pylypenko 17.11.2020 16:20

Не могли бы вы добавить команды для очистки кеша CLI, которые вы использовали?

Quatsch 13.01.2022 15:07

Пример:

nelmio_cors:
defaults:
    origin_regex: true
    allow_origin: ['*']
    allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
    allow_headers: ['Accept','Authorization','Cache-Control','Content-Type','DNT','If-Modified-Since','Keep-Alive','Origin','User-Agent','X-Requested-With']
    expose_headers: ['Authorization']
    max_age: 3600
paths:
    '^/': ~

Другие вопросы по теме