0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Accept-Encoding: gzipをリクエストヘッダーに指定していないのに、レスポンスヘッダーにContent-Encoding: gzip設定して、bodyをgzip圧縮してくることも想定したほうがよい?

0
Posted at

はい、「想定しておくべき」です


✅ 結論:

たとえリクエストヘッダーに Accept-Encoding: gzip指定していなくても
サーバーが Content-Encoding: gzip を付けて gzip 圧縮してくるケースはあります


🔍 なぜそんなことが起きるのか?

1. サーバー設定が強制 gzip

  • サーバーやリバースプロキシ(例:Nginx、Apache、CDN)が「常に gzip 圧縮する」設定になっていることがあります。
  • クライアントの Accept-Encoding を無視して、無条件に Content-Encoding: gzip を付けて返すケース。

2. バグ・誤設定

  • 本来 Accept-Encoding を見て圧縮すべきですが、設定ミスや実装バグで無視されることがあります。

3. 中間プロキシの介入

  • 中間の CDN やリバースプロキシ(Cloudflare、Akamai など)が自動的に gzip 圧縮してレスポンスを書き換えていることもあります。

🧪 実例:Java の WebClient / HttpClient などで起こりうる症状

  • クライアントが Accept-Encoding を指定していないと仮定。
  • サーバーが Content-Encoding: gzip を付けて gzip 圧縮されたボディを返す。
  • クライアントがそれを 非圧縮のレスポンスと誤認 すると → ゴミデータ・文字化け・パース失敗などが起きる。

✅ どう対応すべきか?

✔ サーバー側がどう返してくるかを 常にチェック

HTTP/1.1 200 OK
Content-Encoding: gzip

があれば、ボディは gzip 圧縮されていると判断し、クライアント側で展開する必要があります。


✔ クライアントでの安全な実装(例: Java)

WebClient(Spring)

  • Spring WebClient は Accept-Encoding を自動で送ります。
  • 受信時に Content-Encoding を見て、自動で解凍してくれます。
  • ただし、手動で Accept-Encoding を空にしても、Netty の内部実装で勝手に gzip 対応してしまうこともある

HttpURLConnection(Java標準)

  • Accept-Encoding を送らなければ gzip 展開されません。
  • でも Content-Encoding: gzip が返ってきたら、自力で GZIPInputStream で展開する必要があります

🎯 まとめ

条件 gzip圧縮レスポンスが来る可能性 クライアントで展開が必要か
Accept-Encoding: gzip を送った 高い(当然) 自動 or 明示的に展開
送らなかった ある(特に CDN 経由時) 念のため展開処理を用意すべき

✅ 推奨アプローチ

  • Content-Encodinggzip のときは、常に gzip 解凍する処理を用意しておく。
  • Java などの低レベル実装では、Accept-Encoding の有無にかかわらず、Content-Encoding を見て判断。
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?