Ste*_*ker 5 javascript http cors
命脉:
Chrome版本23.0.1271.64 Mac OS X 10.8.2
情况:
我在https://api.myapi.com/上公开了一个Web服务...我想允许JavaScript应用程序与此API交互. CORS感觉就像是最明显的合适(jsonp和朋友是可怕的,可怕的黑客).
我可以在我的开发人员工具中看到正在发出预检请求:
Request URL: https://api.myapi.com/someapi
Request Method: OPTIONS
Status Code: 200 OK
Request Headers
Accept: */*
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Access-Control-Request-Headers: origin, authorization, accept
Access-Control-Request-Method: GET
Connection: keep-alive
Host: api.myapi.com
Origin: http://prototypes.mycompany.com
Referer: http://prototypes.mycompany.com/somepage.html
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Response Headers
Access-Control-Allow-Headers: Accept,Authorization,Content-Length,Content-Type,Cookie
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,HEAD,OPTIONS
Access-Control-Allow-Origin: http://prototypes.mycompany.com
Access-Control-Allow-Credentials: true
Connection: close
Run Code Online (Sandbox Code Playgroud)
这看起来很棒,特别是响应Access-Control-Allow-Origin
头似乎与请求Origin
头精确匹配.
紧接着,尝试了实际的请求:
Request URL: https://api.myapi.com/someapi
Request Headers
Accept: application/json, text/javascript, */*; q=0.01
Authorization: <custom authentication scheme, removed>
Origin: http://prototypes.mycompany.com
Referer: http://prototypes.mycompany.com/somepage.html
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Run Code Online (Sandbox Code Playgroud)
然后它显示为"已取消"并发出以下错误:
XMLHttpRequest无法加载https://api.myapi.com/someapi.Access-Control-Allow-Origin不允许使用来源http://prototypes.mycompany.com.
我最初是*
作为我允许的起源开始的,但是在完全相同的问题上失败了.
我已经在iOS 5的Mobile Safari和Firefox上复制了这个问题.在Firefox中,行为更加令人困惑:服务器响应200 OK然后响应6-7KB数据(这是我所期望的).客户端日志说它有200 OK和~300字节的数据(没有响应头,根本没有响应......)然后触发"错误"处理程序.
我错过了什么?
问题解决了!但我必须突破gdb
才能弄清楚......
代理服务器将其自己的 CORS 标头插入到请求中。因此 HTTP 会话多次指定了标头。安全检查正在检查第一个标头(“*”),并且使请求失败。请求失败打印出最后一个标头值,看起来是正确的。
不是很有帮助,WebKit!
归档时间: |
|
查看次数: |
2802 次 |
最近记录: |