【发布时间】:2015-03-10 14:42:59
【问题描述】:
问题是 IE11 上的 POST 查询失败,在所有其他浏览器中它似乎都在工作。
让我们一步一步描述问题:
- 从应用程序到 REST API 的 XHR 请求。
- 预检 OPTIONS 请求(请求参数如下)
Accept: */* Origin: https://app.example.com Access-Control-Request-Method: POST Access-Control-Request-Headers content-type, accept : Accept-Encoding: gzip, deflate User-Agent: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko Host: api.example.com Content-Length: 0 Connection: Keep-Alive Cache-Control: no-cache
- 预检请求响应参数为:
X-Powered-By: Sugar Access-Control-Allow-Origin: https://app.example.com Vary: Origin Access-Control-Allow-Credentia true ls: Access-Control-Allow-Methods: GET,POST,DELETE,OPTIONS Access-Control-Allow-Headers: X-Requested-With,X-HTTP-Method-Override,Content-Type,Accept set-cookie: sugar.sid=s%Pb9OoTTPUkVw%2F2vUPoFMNG LMXACSkQevo; Path=/; Expires=Thu, 15 Jan 2015 18:27:07 GMT; HttpOnly; Secure Date: Mon, 12 Jan 2015 18:27:07 GMT Connection: close
- 预检请求参数后的真实HTTP请求:
Accept: application/json Content-Type: application/json Referer: https://app.example.com/ Accept-Language: en-US Origin: https://app.example.com Accept-Encoding: gzip, deflate User-Agent: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko Host: api.example.com Content-Length: 9 Connection: Keep-Alive Cache-Control: no-cache Cookie: sugar.sid=s%3A-%2FGF1YoFmRfmBsxK4vLBoGjY5NT0QoYvf5s;
- 最后响应参数:
Content-Type: application/json; charset=utf-8 Content-Length: 72 Vary: Accept-Encoding Date: Mon, 12 Jan 2015 18:27:07 GMT Connection: close
- 基本上响应以 IE 错误结束: Origin: https://app.example.com not found in Access-Control-Allow-Origin 标头。第一个请求是否还需要 Access-**-Origin 标头,这似乎缺少。
也按照 CORS 流程图调试问题,但我无法发现它http://www.html5rocks.com/static/images/cors_server_flowchart.png。
我正在使用带有 node-cors 模块 + 修改选项的 Node.js Express 服务器。
【问题讨论】:
-
实际的数据响应需要一个 ACAO 头
-
刚刚测试过这似乎是问题所在,在 Chrome 上响应具有 AC 标头,但在 IE 上这些没有设置在真实数据上。
标签: javascript node.js http xmlhttprequest cors