gpt4 book ai didi

Firefox 中带有自定义 header 的 Javascript Dojo AJAX (XHR) 请求

转载 作者:行者123 更新时间:2023-11-29 22:41:59 25 4
gpt4 key购买 nike

我正在尝试使用 dojo.xhrGet 发出请求从服务器获取一些 XML 数据。我正在使用 dojo 1.4.0。

服务器要求我通过名为 Myauthtoken 的自定义 HTTP header 传递凭据。

在 Safari 中一切正常。该代码弹出一个对话框,显示[object Document]。但在 Firefox 中,对话框显示 null。在此过程中的某处,自定义 header 被丢弃或损坏,服务器不接受它。

相关代码如下所示:

dojo.xhrGet({
url: 'https://host.com/path/to/thing?param1=one&param2=two',
headers: {
'Myauthtoken': 'username:password'
},
handleAs: 'xml',
load: function(response) {
alert(response);
},
error: function(e) {
alert("error: " + e);
}
});

在 Firefox 中,Firebug 显示以下请求 header :

Host: host.com
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Origin: null
Access-Control-Request-Method: GET
Access-Control-Request-Headers: myauthtoken,x-requested-with

服务器响应 403(禁止)和这些响应 header :

Date: Thu, 28 Jan 2010 20:02:47 GMT
Server: Noelios-Restlet-Engine/1.0.6
Content-Type: text/html; charset=ISO-8859-1
Content-Length: 337
Connection: close


更新!我一直在研究,看起来问题是 Firefox 正在尝试 preflight the request because of the custom headers ,而 Safari 则不是,而只是发送自定义 header ,而不先检查它们是否有效。

我也想通了how to look at the Request in Safari :

Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Myauthtoken: username:password
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10

以及响应 header :

Cache-Control: no-store
Connection: close
Content-Length: 236391
Content-Type: application/xml; charset=ISO-8859-1
Date: Fri, 29 Jan 2010 23:02:22 GMT
Server: Noelios-Restlet-Engine/1.0.6

主要区别在于 Content-Length: 235391

不幸的是,我离真正找到解决方案还差得很远 - 仍在寻找一些好的想法,或者根本没有任何想法。

关于发生了什么以及如何解决这个问题有什么想法吗?

谢谢!

最佳答案

经过更多研究,问题似乎出在服务器期望 header 区分大小写,而 Firefox 将 header 转换为小写。

Firefox 正在发送 myauthtoken,而服务器正在等待 Myauthtoken

最后,这一切都归结为我们使用 getFirstValue(String name) 的一些代码。 ,默认区分大小写,而不是 getFirstValue(String name, boolean ignoreCase) .

注意区分大小写的 header !

关于Firefox 中带有自定义 header 的 Javascript Dojo AJAX (XHR) 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2157702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com