Authorization
我正在使用 Ember.js、Ember Simple Auth 插件和 jQuery使用 ajax 跨域发送标头。Authorization
设置标题时:
jqXHR.setRequestHeader('Authorization', 'Bearer ' + session.get('authToken'));
然后我收到OPTIONS
对 REST URL 的飞行前请求,然后我返回以下标头:
$headers->set('Access-Control-Allow-Origin', 'http://subdomain2.domain.com');
$headers->set('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
$headers->set('Access-Control-Allow-Headers', 'Content-Type, Authorization, Accept');
$headers->set('Access-Control-Max-Age', 10);
$headers->set('Content-Length', 0);
在 Chrome 网络监视器中,此OPTIONS
请求返回成功。然后,当 GET 请求在飞行前请求之后出现时OPTIONS
,GET
请求只是挂起或至少(pending)
在网络监视器中显示:
如果我在几秒钟后刷新页面,页面将显示,但它不会在OPTIONS
调用后立即显示。
当我使用Access-Control-Max-Age
标头并增加缓存时间时,我可以在它再次发送调用之前刷新多次,OPTIONS
这意味着页面将显示得很好。只有当OPTIONS
呼叫GET
紧随其后时,它才会挂起。
当我直接在浏览器中加载 url 时,它会很好地显示 JSON 数据。即使我使用 Chrome 扩展 Postman 并手动将Authorization
标头设置为与 jQuery 请求相同,它仍然可以很好地加载数据(尽管我不认为 Postman 模拟跨域请求)。
知道为什么GET
请求仍然挂起并且不返回任何错误或标头吗?