HTTP头设置授权报头加载停止数据(HTTP Headers setting Authorizati

2019-10-18 22:13发布

我使用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请求保持挂起并且不返回任何错误或标题?

Answer 1:

真的不知道这个问题是在这里。 看起来你正在运行到某事。 与此类似: 跨来源“Authorization'头与jquery.ajax()

另外,你更改Ember.SimpleAuth代码什么? 因为缺省情况下它不应该包括在出于安全原因,跨域请求令牌...

你可能也想看看这个jQuery的已知的问题: 发送凭据跨域帖子? 其还涉及发送授权头跨域。

我会考虑如何Ember.SimpleAuth也许可以在这种情况下帮助。



Answer 2:

我做了一些调查:一般Ember.SimpleAuth应与CORS工作。 我认为你缺少的是

Access-Control-Allow-Origin: http://subdomain2.domain.com

在响应于GET请求头。 还看到Mozilla的文档的例子: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS 。 每个响应必须包含访问控制允许来源头。

HTH



文章来源: HTTP Headers setting Authorization header stops data from loading