Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何清除AJAX GET调用的HTTP头?_Javascript_Ajax_Internet Explorer_Http Headers_Xmlhttprequest - Fatal编程技术网

Javascript 如何清除AJAX GET调用的HTTP头?

Javascript 如何清除AJAX GET调用的HTTP头?,javascript,ajax,internet-explorer,http-headers,xmlhttprequest,Javascript,Ajax,Internet Explorer,Http Headers,Xmlhttprequest,我开发了一个解决方案,它依赖于AJAX调用来检索信息并每10秒更新一次客户端页面。这很好,但考虑到从客户机到服务器再到服务器传递的头的数量和长度,我担心代码的可伸缩性。我已经删除了服务器端的一些冗余头,大部分与ASP.NET相关,现在我正试图减少来自客户端的头 我公司使用的浏览器是IE(版本6,即将升级到7)。这是我当前代码的近似值: var xmlHTTP = new ActiveXObject('Microsoft.XMLHTTP'); xmlHTTP.onreadystatechange

我开发了一个解决方案,它依赖于AJAX调用来检索信息并每10秒更新一次客户端页面。这很好,但考虑到从客户机到服务器再到服务器传递的头的数量和长度,我担心代码的可伸缩性。我已经删除了服务器端的一些冗余头,大部分与ASP.NET相关,现在我正试图减少来自客户端的头

我公司使用的浏览器是IE(版本6,即将升级到7)。这是我当前代码的近似值:

var xmlHTTP = new ActiveXObject('Microsoft.XMLHTTP');

xmlHTTP.onreadystatechange = function() {
    if ((xmlHTTP.readyState == 4) && (xmlHTTP.status == 200)) {
        myCallbackFunction(xmlHTTP);
    }
};

xmlHTTP.open('GET', 'myUrl.aspx');

try {
    xmlHTTP.setRequestHeader("User-Agent", ".");
    xmlHTTP.setRequestHeader("Accept", ".");
    xmlHTTP.setRequestHeader("Accept-Language", ".");
    xmlHTTP.setRequestHeader("Content-Type", ".");
} catch(e) {}

xmlHTTP.send();
虽然可以清除其中的一些头文件,但我还没有找到一种在IE6中工作的方法。将它们设置为null会导致类型不匹配异常,因此我暂时将它们替换为“.”。是否有另一种清除它们的方法或减少提交的HTTP头的替代方法

此外,似乎根本没有办法替换或缩短“referer”标题。

根据

如果作为参数提供的HTTP头已经是请求头列表的一部分,则setRequestHeader()方法会追加一个值

也就是说,您只能添加标题,不能替换它们

这并不完全符合当前的浏览器行为,但它可能是浏览器的发展方向,在这种情况下,从长远来看,在这方面的任何努力都是浪费时间。在任何情况下,当前设置标题的浏览器行为都是多种多样的,通常无法依赖

似乎根本没有办法替换或缩短“referer”标题

这不会让我感到惊讶,因为有些人被误导地使用“Referer”[sic]作为访问控制机制

您可以尝试确保当前页面URL不会过长,但老实说,所有这些对我来说都有过早优化的味道。无论您做什么,您的请求都将包含在一个IP数据包中,因此不会有明显的性能差异


Mibbit(正如你链接的博客上提到的)尝试这种东西可能是值得的,因为Mibbit吸引了相当惊人的流量,但是对于一个简单的公司范围的应用程序,我不认为跨浏览器和代理测试的负担是值得的:弄乱标题的最终用户利益比。

IE6和更早的版本使用从
MSXML.XMLHTTP
创建的ActiveXObject(实际上源自),而IE7和其他现代浏览器(如Mozilla)则使用名为
XmlHttpRequest
的内在对象。这可能就是为什么不能为MSXML实现将请求头设置为
null
,但可以为内置对象设置请求头的原因

因此,我不认为有任何方法可以集体清除所有标题。您提供的指向Mibbit的链接仅提供一个函数,用于逐个将所有头设置为null。对于正常情况,减少报头对于减少流量负载来说可能是非常微不足道的


也就是说,我很想知道为什么您要将请求头设置为
”,而不是空字符串

我会放弃这种微优化,转而研究推送模型。作为起点:

  • Flash可以创建持久套接字,并将事件代理到javascript中
  • 您可以通过同步HTTP(BOSH)实现双向流。看

这两者通常都与后端的XMPP服务器配对。

感谢您的全面回答,bobince。这是关于IP数据包大小的一个重要观点。我将检查这是什么设置,并确保我们不会跨越两个错误。这可能是一个无忧无虑的情况,但这将带来大量的流量-同时有数百名用户。谢谢Cerbus。我只是使用了“.”,这样我就可以在调试过程中看到它的价值-没有其他动机:)我已经采纳了您和bobince的建议,我将继续进行,而不进行此标题操作。谢谢你们的帮助,谢谢你们的回答。不幸的是,该项目已接近完成,因此在此阶段更改整个堆栈是不合适的。我以前也没有在ActionScript中编写代码,所以这不是一个真正的选项。不过,我以后一定会调查你的建议。再次感谢。