FOSRest OPTIONS请求返回405方法不允许

时间:2016-07-29 12:46:16

标签: ember.js fosrestbundle preflight

我用Symfony FOSRestBundle编写了一个REST服务。它可以正常使用GET请求。

现在,我正在尝试使用Ember«models'访问,我收到一条错误消息。的确,Ember尝试使用OPTIONS请求(预检)访问它并且它失败了«请求头字段Access-Control-Allow-Origin是预检响应中的Access-Control-Allow-Headers不允许»。 我试图用Postman访问REST服务,我收到了这个错误: 选项http://myUrl.local/groups:“405方法不允许”

但如果我调用OPTIONS http://myUrl.local/

,它可以正常工作

我在El Capitan(IMac)下使用apache。 我试图将这些行附加到/private/etc/apache2/extra/httpd-default.conf:     标题添加Access-Control-Allow-Origin“*”     标题添加Access-Control-Allow-Headers“origin,content-type”     标题添加Access-Control-Allow-Methods“PUT,GET,POST,DELETE,OPTIONS”

我试图在VirtualHost的指令中附加这些行。 两种情况都有相同的结果。

是Symfony或FOSrestBundle中的问题。

我需要帮助才能了解正在发生的事情。我如何解决我的问题。

1 个答案:

答案 0 :(得分:0)

我认为您的Ember应用程序不与您的Symfony应用程序托管在同一个域中 - 它可能是您手机上的应用程序?这使您的请求符合CORS协议(跨源资源共享)。

您已正确识别需要设置的标头。它不起作用的原因是/groups可能路由到类似于此的动作:

<?php

namespace AppBundle\Controller;

class GroupsController
{
    public function getGroupsAction()
    {} // "get_users"            [GET] /users
}

由于此操作需要方法GET,因此FOSRestBundle会阻止任何其他方法的请求,并返回您获得的状态代码405。这也是为什么对/的OPTIONS请求工作正常的原因 - 这不是你的服务器阻止它,它是FOSRestBundle。

使用NelmioCorsBundle正确处理预检。捆绑

  • 处理CORS预检OPTIONS请求
  • 将CORS标头添加到您的回复中

请参阅issue #587以供参考。