2011-12-12 164 views
6

我試圖從GAE服務器gzip響應,但在Content-Encoding中接收到null。AppEngine gzip壓縮

我有以下代碼:

connection = (HttpURLConnection)url.openConnection(); 
connection.setRequestMethod("POST"); 
connection.setRequestProperty("Content-Type", 
      "application/json; charset=utf-8"); //"application/json; charset=utf-8" 
connection.setRequestProperty("Accept-Encoding", "gzip"); 
connection.setRequestProperty("User-Agent", "gzip"); 
connection.setUseCaches (false); 
connection.setDoInput(true); 
connection.setDoOutput(true); 

//write 
//read 

System.out.println("Content-Encoding " + connection.getContentEncoding()); 

我讀過,在GAE服務器並自動壓縮。那麼問題是什麼?

+0

GAE沒有注意你是否要求壓縮或不壓縮。在這種情況下文件有多大?根據經驗,任何超過1MB的內容都不會被壓縮。 – David

回答

9

App Engine前端服務器依賴於許多因素,包括Accept-EncodingUser-Agent標題,以確定它們是否應壓縮響應。他們這樣做是因爲有許多用戶代理聲稱接受gzip響應,但實際上無法理解它們。

嘗試將您的用戶代理設置爲合理的(而不是'gzip',它不是真正的用戶代理),並查看是否有任何區別。

+6

https://developers.google.com/appengine/kb/general#compression states「要強制gzip內容被提供,客戶端可以提供'gzip'作爲Accept-Encoding和User-Agent請求標頭的值。 」。有些人報告工作,有些則沒有。基本上,沒有人似乎知道真正的答案。 – David

+0

經過修改的客戶端發送'Accept-Encoding:gzip',但App Engine仍然響應未壓縮。然後將gzip附加到UA,'User-Agent:我們的真實UA字符串; gzip',並且(和'Accept-Encoding:gzip'一起)最終迫使App Engine響應壓縮。 –

+0

我們可以做到這一點,而無需發送請求?像在代碼中設置這些值? –