簡體   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