使用编码gzip的ajax发送请求不起作用

时间:2012-04-27 06:44:37

标签: javascript asp.net get request gzip

使用编码gzip(iis7)的Ajax发送请求以下是发送请求的代码 有人可以帮我解决我的代码中的错误。

提前致谢

function sendRequest(url, callback, postData)
{
   var req = createXMLHTTPObject();
   if (!req) {
      return;
   }

   var method = (postData) ? "POST" : "GET";
   req.open(method, "xml/" + url, true);
   req.setRequestHeader('User-Agent', 'XMLHTTP/1.0');

   if (postData) {
      req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
      req.setRequestHeader("Content-Encoding", "gzip");

   }

   req.onreadystatechange = function() {

   }

   req.send(postData);
}

3 个答案:

答案 0 :(得分:4)

考虑到安全性,浏览器不允许您覆盖某些标题,包括“Content-Encoding”。

答案 1 :(得分:2)

透明地高度压缩对XMLHttpRequest的请求的一种方法是使用HTTP / 2(例如,通过CloudFlare服务您的网站)。

使用HTTP / 2时,尽管HTTP标头没有说Content-Encoding: gzip,但基础HTTP / 2协议会压缩所有内容。

与gzip相比,它的压缩效果也好得多,因为:

  • 它压缩标题
  • 标题压缩使用standard dictionary
  • 我认为数据压缩可以在多条消息上建立字典(brotli-我还没有仔细检查)

您可以通过以下方式see if your server使用HTTP / 2:

  1. 打开Chrome,然后按F12打开开发人员工具
  2. 点击网络标签
  3. 关闭请求检查器面板(具有标签Headers Preview Response Timing
  4. 右键单击请求列表的名称标题,然后勾选Protocol
  5. 导航到您的网站并查看所有请求所使用的协议-在“协议”列中,您要查看的是h2而不是http/1.1

Example log of HTTP/2 network requests withn Chrome developer tools

我不建议使用JavaScript压缩库,因为这会导致速度降低和效率低下。

答案 2 :(得分:1)

问题似乎与标题无关,而是与压缩有关。

您似乎无法压缩postData。

如果postData已经压缩,则无需尝试手动设置内容编码。

如果不是,请让浏览器与服务器协商传输编码(这是协议的一部分并自动完成,服务器说它是否接受它,但我认为很少这样)或者(如果你真的需要)自己编码。此SO问题表示要压缩browseride的库:JavaScript implementation of Gzip