我有一个Google Appengine应用程序,使用urllib2 POST从另一台服务器请求页面。我最近在运行Apache2的其他服务器上启用了gzip压缩,并且Appengine页面请求开始因密钥错误而失败,表明“内容长度”不在标题中。
我没有在Appengine的请求中明确声明gzip是可接受的编码,但Appengine可能会添加该标头。谷歌搜索没有发现任何明确的迹象表明Appengine的urlfetch隐含地添加了一个标头来接受gzip编码。
Apache2,如果我没记错的话,在压缩响应时省略内容长度标题,但这不应该影响来自同一服务器的非压缩响应。
有没有人知道发生了什么,为什么要省略内容长度标题?
答案 0 :(得分:2)
根据这个帖子: http://groups.google.com/group/google-appengine-java/browse_thread/thread/5c5f2a7e2d2beadc?pli=1) 在Appengine Java新闻组中,Google通常会在urlfetch请求中设置'Accept-Encoding:gzip'标头,然后在将数据传递给脚本之前解压缩(ungzips)输入。
显然,Appengine在发送到互联网的请求上隐式添加了一个accept-encoding:gzip标头,并解压缩响应,但没有在解压缩数据大小的标头中插入内容长度。因此,如果外部服务器将提供gzip压缩响应,则Appengine脚本的最终结果(在上述Appengine的所有预处理和后处理行为之后)是丢失内容长度标头。