【问题标题】:AppEngine gzip compressingAppEngine gzip 压缩
【发布时间】:2012-01-18 06:59:41
【问题描述】:

我正在尝试 gzip 来自 GAE 服务器的响应,但在 Content-Encoding 中收到 null。

我有以下代码:

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 服务器会自动压缩。那么可能是什么问题呢?

【问题讨论】:

  • GAE 不会注意到您是否要求它进行压缩。在这种情况下文件有多大?根据经验,任何超过 1MB 的内容都不会被压缩。

标签: java google-app-engine servlets


【解决方案1】:

App Engine 前端服务器依赖于许多因素,包括 Accept-EncodingUser-Agent 标头来确定它们是否应该压缩响应。他们这样做是因为有许多用户代理声称接受 gzip 压缩的响应,但实际上无法理解它们。

尝试将您的用户代理设置为合理的(而不是“gzip”,它不是真正的用户代理),看看是否有什么不同。

【讨论】:

  • developers.google.com/appengine/kb/general#compression 声明“要强制提供 gzip 压缩的内容,客户端可以提供 'gzip' 作为 Accept-Encoding 和 User-Agent 请求标头的值。”。有些人报告它工作,其他人没有。基本上,似乎没有人知道真正的答案。
  • 已修改客户端发送Accept-Encoding: gzip,但App Engine 仍响应未压缩。然后将 gzip 附加到 UA,User-Agent: Our Real UA String; gzip 并且(连同Accept-Encoding: gzip)最终迫使 App Engine 响应压缩。
  • 我们可以在不发送请求的情况下做到这一点吗?喜欢在代码中设置这些值吗?
【解决方案2】:

在我的例子中,问题在于 servlet 没有为 Content-Type 标头指定值。我需要做的就是明确指定它:

public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException, ServletException {
    ...
    resp.setHeader("Content-Type", "application/json");
    ...

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 2013-12-29
    • 2016-06-13
    相关资源
    最近更新 更多