在 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 在预检响应中不允许请求标头字段授权 [重复]

来自 .aspx 页面的带有授权标头的 Ajax 发布请求给出错误“选项 405(不允许的方法)”

AJAX 调用后添加授权标头

带有 jquery.ajax() 的跨域“授权”标头

跨域 ajax 请求中的预检标头未解决授权标头