Symfony3 и NelmioCors - на POST это не работает
Я использую NelmioCorsBundle под Symfony3 со следующей настройкой:
nelmio_cors:
defaults:
allow_credentials: false
allow_origin: []
allow_headers: []
allow_methods: []
expose_headers: []
max_age: 0
#hosts: []
origin_regex: false
paths:
'^/api/':
origin_regex: true
allow_origin: ['*']
allow_headers: ['X-Custom-Auth','Content-Type','X-Requested-With','Accept','Origin','Access-Control-Request-Method','Access-Control-Request-Headers','Authorization']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
expose_headers: []
max_age: 3600
'^/':
origin_regex: true
allow_origin: ['*']
allow_headers: ['X-Custom-Auth']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
max_age: 3600
hosts: ['^api\.']
который работает нормально на GET
но когда я пытаюсь использовать с POST
я получил
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.
Что не так с этой настройкой?
1 ответ
Я не уверен, но на вашем пути есть ^/api/
, и в вашем сообщении об ошибке есть только http://localhost:8080
, Попробуй смени роутинг твой POST
контроллер для /api/something
, Дайте мне знать, если это работает.
Обновить:
Я не знаю Nelmio Cors достаточно, но если вы не планируете использовать управление сложными заголовками, я предлагаю подход, который работает в моем случае (без внешнего пакета):
Добавить слушателя: src/AppBundle/Listentes/CorsListener.php
<?php
namespace AppBundle\Listener;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
class CorsListener
{
public function onKernelResponse(FilterResponseEvent $event)
{
$responseHeaders = $event->getResponse()->headers;
$responseHeaders->set('Access-Control-Allow-Headers', 'origin, content-type, accept');
$responseHeaders->set('Access-Control-Allow-Origin', '*');
$responseHeaders->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, PATCH, OPTIONS');
}
}
И зарегистрируй это в сервисах: app/config/services.yml
services:
app.cors_listener:
class: AppBundle\Listener\CorsListener
tags:
- { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }
Я знаю, что это не точный ответ на ваш вопрос, но надеюсь, что это поможет.