我正在AppEngine上编写Java Servlet。该servlet生成png图像。我想“ gzip”的答复。我这样做:

resp.setHeader("Content-Encoding","gzip");
resp.setContentType("image/png");

// ... png generation ...

GZIPOutputStream gzos = new GZIPOutputStream(resp.getOutputStream());
gzos.write(myPNGdata);
gzos.close();


但是:在开发服务器中,没关系,png可以正常显示,并且响应也可以很好地压缩。然后,我在生产服务器(AppEngine)上进行测试,得到的只是一个“损坏”的图像...



我的代码有什么问题?它与开发/生产环境有关吗?

当然,如果我不gzip输出,在两种环境中都可以。

谢谢你的帮助。



编辑:我也尝试过:

GZIPOutputStream gzos = new GZIPOutputStream(resp.getOutputStream());
gzos.write(ImagesServiceFactory.makeImage(readImage("somePicture.png")).getImageData());
gzos.flush();
gzos.finish();
gzos.close();


而且也不起作用。



编辑2:实际上,响应是gzip。我使用“ curl theUrl> tmp.gz”获取了servlet,然后将“ tmp.gz”打包为zip,并且图像很好。但是没有浏览器可以正确显示它:(我的gzip有什么问题?

最佳答案

App Engine基础架构将在适当时为您提供gzipping内容。你不应该自己做。

09-12 18:34