2011-12-12 168 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

我们可以做到这一点,而无需发送请求?像在代码中设置这些值? –