【问题标题】:Symfony Ajax same origin policySymfony Ajax 同源策略
【发布时间】:2017-10-25 14:37:32
【问题描述】:

我正在尝试从域:127.0.0.1:8000 向 localhost:8000 发送 AJAX 请求。此调用以

结尾

状态码:405 方法不允许

我添加了一个侦听器,它正在为原始问题发送正确的标头:

<?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');
    }
}

但是即使是headers,你可以在下图中看到,也不可能成为请求。

一些帮助?

【问题讨论】:

  • 您的 PHP 代码需要显式处理 OPTIONS 请求。在 Access-Control-Allow-Methods 响应标头值中仅包含“OPTIONS”是不够的。标头值的唯一影响是在客户端,在浏览器中。您遇到的问题出在服务器端,与您的 CORS-headers 配置无关。您需要有明确的代码来处理 OPTIONS 请求;该代码只需要发送一个 200 OK 响应,其中包含您已经配置的标头(添加了缺少的逗号,如下所述)。
  • 试试这个github.com/nelmio/NelmioCorsBundle。我认为这仍然是 Symfony 的最佳解决方案。
  • 我同意 NelmioCorsBundle 的设置非常容易。

标签: ajax symfony cross-domain same-origin-policy


【解决方案1】:

你好像少了一个逗号

$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');

DELETEOPTIONS 是两个独立的方法。

【讨论】:

    【解决方案2】:

    我必须在我的 Symfony 控制器中允许 OPTIONS 方法:

    * @Method({"GET", "POST", "OPTIONS"})
    

    【讨论】:

    • 顺便说一句:我现在对我的服务器有 2 个请求。一个用于 OPTIONS,一个用于 POST。对吗?
    • 评论自己的帖子,不通知其他人^^我会为可能读到这个的人回答:是的,这很正常,OPTIONS调用只是在执行实际操作之前先查找OPTIONS调用方法。
    猜你喜欢
    • 2012-08-22
    • 2011-07-20
    • 2014-07-23
    • 2011-07-28
    • 2011-04-01
    • 2011-05-28
    • 2011-01-17
    • 2012-10-30
    • 2011-12-26
    相关资源
    最近更新 更多