LoginSignup
6
4

More than 5 years have passed since last update.

GoogleAppEngineを使ってレスポンスを自動的にgzip圧縮してもらう

Last updated at Posted at 2018-06-23

GoogleAppEngineにdjangoのアプリを載せていたのですが、
レスポンスサイズが大きいな……と思い、gzip圧縮しよう!と思ったら予想以上にドハマリしてしまったので。
備忘録的に。

事象

当初はDjangoのdjango.middleware.gzip.GZipMiddlewareを使用して解決のはずだったんですが、
headerにAccept-Encodingを入れてもgzip圧縮されて帰ってこず!
おかしいなと思い、request headerを見てみると、プログラム上ではAccept-Encodingのヘッダーが消えている!
何故だッ!? と、思ったらちゃんとドキュメントに書いてありました。

removed_headers

  • Accept-Encoding
  • Connection
  • Keep-Alive
  • Proxy-Authorization
  • TE
  • Trailer
  • Transfer-Encoding

上のrequest headerは勝手に消えるみたいですねー

解決

ではでは、Accept-Encodingなしでどうやってgzip化するかどうか判定させよう?と思ったら、これもちゃんと書いてありました。
response_compression

curl \
-H "accept-encoding:gzip" \
-H "user-agent:gzip" \
https://xxxxxxxxxx.appspot.com/sugoi_api/

request headerのAccept-EncodingとUser-Agentの両方にgzipと含まれていれば、
上のcurlの戻りがアプリ上で特に何もしなくても自動的にgzip化してくれて返してくれました。

ちなみに一般的なブラウザのUAにはgzipと含まれていないんですが、ちゃんとgzip圧縮されたものが返却されました。
なので、gzip解凍ができるブラウザ、またはgzipってプログラム上で明示的に入れていれば圧縮して返すよ!ということなのかなと。

いやけど、User-Agentも判定に入れるってわかりにくくないですかね?
いやちゃんと最初から全部読んでいれば良かったんですが……うむむむ。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4