繁体   English   中英

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

[英]ajax send request with encoding gzip is not working

使用编码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);
}

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

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

使用HTTP / 2时,虽然HTTP标头没有说Content-Encoding: gzip但底层HTTP / 2协议会压缩所有内容。

它也比gzip压缩得更好,因为:

  • 它会压缩标题
  • 标头压缩使用标准字典
  • 我认为数据压缩会在多条消息上构建一个字典(brotli - 我没有仔细检查过它)

您可以通过以下方式查看您的服务器是否正在使用HTTP / 2:

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

使用Chrome开发人员工具记录HTTP / 2网络请求的示例

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

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

你似乎没有压缩你的postData。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM