Недавно мне нужно было разрешить 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\.']
Да, я следовал рецепту, но это не сработало, после этого я попробовал определенный маршрут и получил другую ошибку, поэтому я отступил назад и попросил помощи.






Не знаю, что именно было не так, но как один из комментариев помог (человек, который помог, возможно, удалил свой комментарий).
Я получаю эту конфигурацию для 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::onKernelRequest()
Не могли бы вы добавить команды для очистки кеша CLI, которые вы использовали?
Пример:
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:
'^/': ~
Вы можете взглянуть на рецепт при установке пакета с Symfony Flex. Это конфигурация по умолчанию: github.com/symfony/recipes/blob/master/nelmio/cors-bundle/1.5/… Как видите, файл .env также дополнен параметром CORS_ALLOW_ORIGIN.