Symfony Ajax同源策略
我正在尝试从域127.0.0.1:8000向localhost:8000发送一个AJAX请求。这通电话以一个短消息结束 状态代码:405方法不允许 我添加了一个侦听器,该侦听器正在为源问题发送正确的标题:Symfony Ajax同源策略,ajax,symfony,cross-domain,same-origin-policy,Ajax,Symfony,Cross Domain,Same Origin Policy,我正在尝试从域127.0.0.1:8000向localhost:8000发送一个AJAX请求。这通电话以一个短消息结束 状态代码:405方法不允许 我添加了一个侦听器,该侦听器正在为源问题发送正确的标题: <?php namespace AppBundle\Listener; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; /** * Class CorsListener is handling on Kern
<?php
namespace AppBundle\Listener;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
/**
* Class CorsListener is handling on Kernel response header actions
* @package AppBundle\Listener
*/
class CorsListener {
public function onKernelResponse(FilterResponseEvent $event) {
$request = $event->getRequest();
// allow this only for the tracking URL
/*if(strpos($request->getHost(), 'api.') === false) {
return;
}*/
$event->getResponse()->headers->set('Access-Control-Allow-Headers', 'origin, content-type, accept');
$event->getResponse()->headers->set('Access-Control-Allow-Origin', '*');
$event->getResponse()->headers->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE OPTIONS');
}
}
您似乎缺少一个逗号
$event->getResponse()->headers->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE OPTIONS');
应该是
$event->getResponse()->headers->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
DELETE
和OPTIONS
是两种不同的方法。我必须在我的Symfony控制器中允许OPTIONS方法:
* @Method({"GET", "POST", "OPTIONS"})
PHP代码需要显式处理选项请求。仅在访问控制允许方法响应头值中包含“选项”是不够的。头值的唯一作用是在浏览器中的客户端。问题出在服务器端,与CORS头配置无关。您需要有明确的代码来处理选项请求;该代码只需要发送一个200 OK响应,其中包括您已经配置的标题(添加了缺少的逗号,如下所述)。请尝试此操作。我认为这仍然是Symfony的最佳解决方案。我同意NelmioCorsBundle使安装变得非常简单。顺便说一句:我现在有2个对服务器的请求。一个用于选项,一个用于发布。这是对的吗?在你自己的帖子上发表评论,不通知其他人^^^我将回答可能读到以下内容的人:是的,这是正常的,选项调用只是在执行实际调用方法之前先查找选项。