【问题标题】:FOSRest OPTIONS request return 405 Method Not AllowedFOSRest OPTIONS 请求返回 405 Method Not Allowed
【发布时间】:2016-12-04 04:44:30
【问题描述】:

我用 Symfony FOSRestBundle 编写了一个 REST 服务。它适用于 GET 请求。

现在,我正在尝试使用 Ember « 模型进行访问,但收到一条错误消息。确实,Ember 尝试使用 OPTIONS 请求(预检)访问,但由于«请求标头字段 Access-Control-Allow-Origin 是预检响应中的 Access-Control-Allow-Headers 不允许 »。 我尝试使用 Postman 访问 REST 服务,但出现此错误: with OPTIONS http://myUrl.local/groups : "405 Method Not Allowed »

但如果我调用 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 的问题。

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

【问题讨论】:

    标签: ember.js fosrestbundle preflight


    【解决方案1】:

    我假设您的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-03
      • 2014-11-26
      • 2016-10-16
      • 2017-07-05
      • 1970-01-01
      • 2012-01-04
      • 2011-05-14
      • 2011-09-25
      相关资源
      最近更新 更多