[英]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網站上找到有關如何執行此操作的一些建議 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.