如何从Google App Engine提供GZIP编码的图像

时间:2019-03-13 15:21:50

标签: python http google-app-engine webapp2

我正在尝试进行链接共享,以包括Facebook上的图片。 Facebook共享调试器表示,图像未使用gzip编码,这显然是必需的。

使用curl,我可以确认Facebook在说什么。我能找到的所有文档都说gzip编码应该自动发生,所以我不确定如何解决。

这是curl输出:

$ curl -v -D /tmp/h -H "Accept-Encoding: gzip" http://m.kaon.com/ss/5907657076506624.jpg > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 172.217.3.115...
* TCP_NODELAY set
* Connected to m.kaon.com (172.217.3.115) port 80 (#0)
> GET /ss/5907657076506624.jpg HTTP/1.1
> Host: m.kaon.com
> User-Agent: curl/7.54.0
> Accept: */*
> Accept-Encoding: gzip
> 
< HTTP/1.1 200 OK
< Cache-Control: no-cache
< Content-Type: image/jpeg
< X-Cloud-Trace-Context: 5b0c467df46cb34732e5721733742742
< Date: Wed, 13 Mar 2019 15:11:08 GMT
< Server: Google Frontend
< Content-Length: 128384
< 
{ [3516 bytes data]
100  125k  100  125k    0     0   620k      0 --:--:-- --:--:-- --:--:--  623k
* Connection #0 to host m.kaon.com left intact
$ cat /tmp/h
HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Type: image/jpeg
X-Cloud-Trace-Context: 5b0c467df46cb34732e5721733742742
Date: Wed, 13 Mar 2019 15:11:08 GMT
Server: Google Frontend
Content-Length: 128384

这是提供图片的代码:

class SSHandler(webapp2.RequestHandler):
  def get(self, id):
    a = ScreenShotModel.get_by_id(int(id))
    self.response.headers['Content-Type'] = 'image/jpeg'
    self.response.out.write(a.image)

是否缺少一些app.yaml设置,或者我是否需要在标题中添加其他内容?还是我应该亲自寻找accept-encoding头并在python代码中进行gzip压缩?

1 个答案:

答案 0 :(得分:-1)

用gzip压缩jpeg没有意义。已被压缩。

有一组允许的压缩类型用于压缩。 JPEG不是其中之一。

白名单中的典型代表是:

文本/纯文本,文本/ html,应用程序/ javascript等