在 Ext JS Ajax 请求中发送“授权”标头,Chrome 与 Firefox
Posted
技术标签:
【中文标题】在 Ext JS Ajax 请求中发送“授权”标头,Chrome 与 Firefox【英文标题】:Sending 'Authorization' header in Ext JS Ajax Request, Chrome vs. Firefox 【发布时间】:2015-10-09 08:01:54 【问题描述】:在代码中,请求被发送为:
var ajaxOptions =
url: 'someUrl',
method: 'POST',
success: function(response)
...
,
failure: function(response)
console.log(response);
;
var form = this.getView().getForm();
var submitAction = Ext.create('Ext.form.action.Submit', form: form );
var formInfo = submitAction.buildForm();
ajaxOptions.form = formInfo.formEl;
if (form.hasUpload())
ajaxOptions.isUpload = true;
Ext.Ajax.request(ajaxOptions);
当通过 Chrome 发送请求时,会显示“授权”标头:
Authorization:Basic YWRtaW46YWRtaW4=
通过 Firefox 发送时,不包含标头。 明确地我没有设置用户/密码。因此,尚不清楚 chrome 为何以及如何发送此类标头。是否有任何已知问题? 第二,如何强制firefox发送这样的header?可能吗?
更新 javascript 现在没有关于登录名/密码的任何内容。主要问题,Chrome 如何使用它们,但其他浏览器无法发送这样的对。所以问题是如何强制其他浏览器像 Chrome 一样发送这个 cookie,而不通过 JavaScript 手动应用标头。
在服务器端,使用了 Servlet API。在 web.xml 中:
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>someName</realm-name>
</login-config>
如果有关系
【问题讨论】:
【参考方案1】:根据docs,只需将headers
属性添加到您的ajaxOptions
:
ajaxOptions =
//...
headers :
'Authorization': 'Basic YWRtaW46YWRtaW4='
【讨论】:
@arthurokay:JavaScript 现在没有关于登录名/密码的任何内容。主要问题,Chrome 如何使用它们,但其他浏览器无法发送这样的对。所以问题是如何强制其他浏览器像 Chrome 一样发送这个 cookie 而无需手动应用标题。 如果这是问题所在,那么 Chrome 可能为该域缓存了一些用户/密码。尝试在“隐身”窗口中运行应用程序以验证 - 或者尝试clear any user/pass settings。除非有要发送的用户/密码,否则任何浏览器都不应发送“授权”标头! 换句话说,我认为 Ext JS 不会添加该标头——我认为 Chrome 会注入它。以上是关于在 Ext JS Ajax 请求中发送“授权”标头,Chrome 与 Firefox的主要内容,如果未能解决你的问题,请参考以下文章
无法在 POST Ajax 请求中发送授权令牌 - 出现错误 - Access-Control-Allow-Headers 不允许请求标头字段 authToken
在向外部服务器发送 ajax 调用时,Access-Control-Allow-Headers 在预检响应中不允许请求标头字段授权 [重复]