Web APIのデータ圧縮
Web APIの性能を最適化する方法としてPagination、キャッシング、圧縮がある。今回は圧縮についてを取り上げる。
既に取り上げたPaginationとキャッシュについてはこちらを参照いただきたい。
メリット
- 通信量削減
- インターネットを介した通信、特にクライアントが通信速度が低いところにいる場合、応答速度が向上する
デメリット
- サーバのCPU負荷上昇
- 静的コンテンツならば事前に圧縮しておくこともできる
- アンチウィルスソフト、Proxy、企業のFWやIPSで破棄される可能性がある
流れ
- クライアントが対応している圧縮方式の一覧をAccept-Encodingヘッダに記載してリクエストを送る
- サーバは圧縮方式を一つ選択してデータを圧縮する
- サーバはレスポンスのContent-Encodingヘッダに圧縮方式を記載して圧縮データを返信する
- クライアントはデータを展開して読み込む
なおサーバはAccept-Encodingヘッダを無視して暗号化しないこともできる。
圧縮方式
gzipがもっとも一般的。
deflateが第2位だったが最近、deflateより圧縮率に優れるbrotliが伸びている。
対象データ
圧縮が効果的なのは、html, xml, css, js と言ったテキストベースのファイルだ。
逆に効果がないのがすでに圧縮済みのファイルだ。JPEG, PNG, GIF などの画像、動画、音声、PDFなどは効果がない。