骨干同步发送 CORS 预检,但之后啥也不做

Posted

技术标签:

【中文标题】骨干同步发送 CORS 预检,但之后啥也不做【英文标题】:Backbone sync send CORS preflight, but does nothing after that骨干同步发送 CORS 预检,但之后什么也不做 【发布时间】:2013-05-12 02:11:08 【问题描述】:

我尝试使用 model.save() 保存主干模型,我提供了 urlRoot,我正在等待 POST 调用。我在另一个等待请求的子域上有一个 REST 服务。

我通过 model.save() 获得了这些请求标头。

OPTIONS /user HTTP/1.1
Host: rest.secret.loc
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: http://members.secret.loc
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

Sy 提到这是一个预检请求,所以我应该使用以下标头进行响应:

HTTP/1.1 200 OK
Cache-Control: max-age=0, no-cache, no-store, must-revalidate
Pragma: no-cache
Content-Type: text/html
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: php/5.3.8, ASP.NET
access-control-allow-origin: http://members.secret.loc
Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS
Date: Fri, 17 May 2013 01:18:21 GMT
Content-Length: 0

我试过了,但这不起作用,浏览器不会向服务器发送另一个请求 :S :S :S :S :S

如何解决? 这是一个主干错误吗?

【问题讨论】:

【参考方案1】:

我尝试使用 Chrome,在 chrome 控制台中出现了 firebug 中没有的内容: 不允许使用内容类型标头。于是我修改了web.config文件:

       <add name="Access-Control-Allow-Headers" value="Content-Type" />

这解决了问题。

顺便说一句,它仍然发送预检,所以我把这段代码放在服务器端:

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS')
    exit;

所以它不会搞砸一切......

【讨论】:

以上是关于骨干同步发送 CORS 预检,但之后啥也不做的主要内容,如果未能解决你的问题,请参考以下文章

从服务工作者发送的 CORS 预检请求,但不是来自常规请求

由于 CORS 选项预检,ReactJS 无法发送 POST 请求

CORS:为啥我的浏览器不发送 OPTIONS 预检请求?

ListBox 已设置数据源,但 Refresh 啥也不做

如何在 CORS 预检 OPTIONS 请求中发送自定义标头?

为啥程序会汇编,但啥也不做?