google-chrome - CORS 错误仅发生在 Chrome 中的某些 XHR 上

我们有一个 SPA,它在 Require.js 的协助下从一个单独的后端服务器提取更多的 javascript 模块。根据 XHR 加载过程的性质,飞行前的 OPTIONS 请求是向后端服务器发出的,并且 Access-Control-Allow-Origin 响应是完全有效的。正如预期的那样,登录和初始模块加载过程工作正常。

XHR finished loading: "http://backend.cloudapp.net/api/modules/resourceA".

XHR finished loading: "http://backend.cloudapp.net/api/modules/resourceB".

有趣的是,某些需要更多模块的后续操作会意外地在 Chrome 中引发 CORS 错误。

XMLHttpRequest cannot load http://backend.cloudapp.net/api/modules/resourceC. Origin https://frontend.cloudapp.net is not allowed by Access-Control-Allow-Origin.

这没有意义,因为之前的模块加载得很好。甚至实际的 OPTIONS 预检也适用于 resourceC。 UI 中的其他一些地方也可以正常加载它们的模块。而 Firefox 似乎没有遇到这个问题。有人遇到过类似的 CORS 错误吗?

成功(预期)模块的请求/响应 header

Request URL:http://backend.cloudapp.net/api/modules/resourceA
Request Method:OPTIONS
Status Code:200 OK

Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Access-Control-Request-Headers:accept, origin, content-type
Access-Control-Request-Method:GET
Host:backend.cloudapp.net
Origin:https://frontend.cloudapp.net
Proxy-Connection:keep-alive
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36

Response Headers
Access-Control-Allow-Headers:accept, origin, content-type
Access-Control-Allow-Methods:GET
Access-Control-Allow-Origin:https://frontend.cloudapp.net
Cache-Control:no-cache
Connection:Keep-Alive
Content-Length:0
Date:Wed, 19 Jun 2013 07:12:42 GMT
Expires:-1
Pragma:no-cache
Proxy-Connection:Keep-Alive
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET



Request URL:http://backend.cloudapp.net/api/modules/resourceA
Request Method:GET
Status Code:200 OK

Request Headers
Accept:application/json
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Content-Type:application/json
Host:backend.cloudapp.net
Origin:https://frontend.cloudapp.net
Proxy-Connection:keep-alive
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36

Response Headers
Access-Control-Allow-Origin:https://frontend.cloudapp.net
Cache-Control:no-cache
Connection:Keep-Alive
Content-Length:5048
Content-Type:application/json; charset=utf-8
Date:Wed, 19 Jun 2013 07:12:42 GMT
Expires:-1
Pragma:no-cache
Proxy-Connection:Keep-Alive
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET

不成功模块的请求/响应 header

Request URL:http://backend.cloudapp.net/api/modules/resourceC
Request Method:OPTIONS
Status Code:200 OK

Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Access-Control-Request-Headers:accept, origin, content-type
Access-Control-Request-Method:GET
Host:backend.cloudapp.net
Origin:https://frontend.cloudapp.net
Proxy-Connection:keep-alive
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36

Response Headers
Access-Control-Allow-Headers:accept, origin, content-type
Access-Control-Allow-Methods:GET
Access-Control-Allow-Origin:https://frontend.cloudapp.net
Cache-Control:no-cache
Connection:Keep-Alive
Content-Length:0
Date:Wed, 19 Jun 2013 07:12:59 GMT
Expires:-1
Pragma:no-cache
Proxy-Connection:Keep-Alive
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET



Request URL:http://backend.cloudapp.net/api/modules/resourceC
Request Headers
Accept:application/json
Content-Type:application/json
Origin:https://frontend.cloudapp.net
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36

(And browser blocks further action)

最佳答案

鉴于Chrome经历了如此多的版本更新,加上我们现在在不同的AWS基础设施中以不同的包方式部署了一些模块资源,我们现在不再遇到这个问题。

https://stackoverflow.com/questions/17185459/

相关文章:

database - 是否有任何工具可以从数据库模式的 json 表示自动生成 ERD 图?

javascript - Shopify 'View all' 按钮实现

machine-learning - 最先进的增量决策树学习者

python - 在 python 解释器和脚本文件中运行时的不同结果

python - 从 Python 中的角度集生成多边形?

linux - 为什么我得到数据大小大于 mss 的数据包?

java - 创建 keystore 时出错 => 线程 "main"java.io.DataInp

json - 将 JSON 数据加载到大查询中时出错 : flat value specified

qt - qml listview提高改变项目的速度

css - 使用渐变生成饱和度/亮度蒙版