簡體   English   中英

我可以使用GZIP壓縮HTTP請求嗎?

[英]Can I compress HTTP Requests using GZIP?

我正在使用移動設備上的Java ME應用程序與Tomcat服務器通信。
我想知道我是否可以使用Gzip壓縮我的請求/響應以減少通過網絡發送的字節數。

現代手機具有如此多的CPU功率,網絡相對較慢,因此壓縮非常有意義。 這也很容易。

在J2ME方面,你做這樣的事情(假設你使用HttpConnection),

  hc.setRequestProperty("Accept-Encoding", "gzip, deflate");
  if (hc.getResponseCode() == HttpConnection.HTTP_OK) {
      InputStream in = hc.openInputStream();
      if ("gzip".equals(hc.getEncoding())) 
         in = new GZIPInputStream(in);
  ...

我們使用來自tinyline的GZIPInputStream,但我相信還有其他人,

http://www.tinyline.com/utils/index.html

在服務器端,它都是內置的。 只需將以下屬性添加到Tomcat上server.xml中的Connector即可,

<Connector 
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,application/json"
... />

您可以壓縮HTTP請求或響應的內容,但不壓縮標頭。 請參閱HTTP 1.1規范的第3.6節和后面描述Content-Encoding標頭的部分。

編輯:這方面的另一面是,無法保證HTTP服務器端將接受任何特定的壓縮格式。 並且根據HTTP的服務器端實現的質量,它甚至可能無法識別請求內容已被壓縮。 因此,除非您知道服務器端支持壓縮的請求內容,否則您不希望這樣做。

由於您使用的是Tomcat,因此請考慮將Apache HTTP Server實例放在Tomcat服務器之前的可能性。

這可以使用Apache HTTP Server的mod_jk模塊完成。 完成后,您可以在Apache中使用mod_gzip / mod_deflate

當然,您的客戶端應該能夠處理壓縮響應,以實現此目的。 如果強制客戶端使用壓縮響應,客戶端最終會顯示亂碼,因為它(通常)會期待純文本響應。 您將在客戶端的Accept-Encoding標頭中找到客戶端處理壓縮響應的能力的明確指示。

如果要避免在網絡中引入Apache HTTP Server,可以使用servlet或寫入ZipOutputStream或GZipOutputStream的servlet過濾器以編程方式完成此操作。 您可以在OReilly OnJava.com網站上找到有關如何執行此操作的一些建議

在服務器端,您可以按照此處所述啟用它,但移動應用程序將需要一個可以解壓縮gzip的庫,例如這個 可能需要一些工作來讓它工作......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM