我使用Ember.js,灰烬简单的验证插件和jQuery发送Authorization
使用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扩展邮差和手动设置Authorization
头一样的jQuery的请求时,它仍然加载数据就好了(虽然我不认为邮差模拟跨域请求)。
任何想法,为什么GET
请求保持挂起并且不返回任何错误或标题?