Php Backbone.js/Silex CORS请求

Php Backbone.js/Silex CORS请求,php,rest,backbone.js,nginx,silex,Php,Rest,Backbone.js,Nginx,Silex,我目前正在尝试使用Backbone.js,在CORS请求方面遇到了一些问题 我已经使用Silex设置了一个基本的基于PHP的API,并将主干模型/集合设置为指向它。通过Chrome网络选项卡,我可以看到飞行前选项请求正在运行: 请求 OPTIONS /todo/ HTTP/1.1 Host: api.backbone.dev Connection: keep-alive Access-Control-Request-Method: POST Origin: http://backbone.dev

我目前正在尝试使用Backbone.js,在CORS请求方面遇到了一些问题

我已经使用Silex设置了一个基本的基于PHP的API,并将主干模型/集合设置为指向它。通过Chrome网络选项卡,我可以看到飞行前选项请求正在运行:

请求

OPTIONS /todo/ HTTP/1.1
Host: api.backbone.dev
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://backbone.dev
User-Agent: ...
Access-Control-Request-Headers: accept, origin, x-http-method-override, content-type
Accept: */*
Referer: http://backbone.dev/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en;q=0.8,en-US;q=0.6,de;q=0.4
响应

HTTP/1.1 200 OK
Server: nginx/1.4.2
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.5.1-2+debphp.org~precise+2
Access-Control-Allow-Origin: http://backbone.dev
Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Headers: X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, X-HTTP-Method-Override, Origin
Cache-Control: no-cache
Content-Encoding: gzip
但在POST上,控制台返回:

XMLHttpRequest cannot load http://api.backbone.dev/todo/. Origin http://backbone.dev is not allowed by Access-Control-Allow-Origin.
My Nginx服务器块包括以下访问控制头:

add_header 'Access-Control-Allow-Origin' 'http://backbone.dev';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'Content-Type,Accept,X-HTTP-Method-Override,Origin';
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
直到我在PHP响应中添加了以下标题,选项请求才起作用:

array(
    'Access-Control-Allow-Origin' => 'http://backbone.dev',
    'Access-Control-Allow-Methods' => 'GET,PUT,POST,DELETE,OPTIONS',
    'Access-Control-Allow-Headers' => 'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, X-HTTP-Method-Override, Origin'
);
现在POST请求没有返回任何内容


我真的看不出这个请求出了什么问题。非常感谢您的帮助。

对于CORS,您需要处理选项请求。使用silex,您可以使用
match
->方法('OPTIONS')
来实现这一点


你可能想看看(更多文档)之类的东西,它可以为你处理CORS飞行前请求和
访问控制允许-*
标题。

我意识到这个问题已经很老了,但由于还没有一个可接受的答案,我将提供我的答案

我为CORS建立了一个silex服务提供商。它负责所有的工作,包括创建@igorw谈论的选项routes和设置必要的头。它易于使用,而且相当灵活

$app->match('/path', $controller)->method('OPTIONS');