我用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中的问题。
我需要帮助才能了解正在发生的事情。我如何解决我的问题。
答案 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正确处理预检。捆绑
请参阅issue #587以供参考。