ある条件下ではてなのデータ読み込みが異様に遅い件
http://i.hatena.ne.jp/idea/5483
はじめに
はてなダイアリーの閲覧の際毎回のように画像読み込みが止まるのがいいかげんうざく感じたため、原因を自分の方で調べ報告しようと思いました。
症状を確認した環境
- Windows XP SP2
- Opera 8.02
- Proxomitron 4.5
症状
上記の環境下ではてなダイアリーのページで再読み込みを行った際、たとえばデフォルトでページ左上に表示される画像データの読み込みが異様に時間がかかる。
Proxomitronのログを見たところ、時間がかかっている箇所で以下のログが出てきている。
HTTP/1.1 200 (No headers) Server: Unknown, missing HTTP headers
原因
- HTTP/1.1のKeep-Alive接続による連続的なリクエスト・レスポンスの中で、レスポンスボディを含んだ「304 Not Modified」レスポンスが返されている。これはRFC2616に違反している。
- Proxomitronは直前の304レスポンスに含まれるレスポンスボディを次のリクエストに対するレスポンスのヘッダと誤認識し、誤動作を起こす。
再現方法一例
% wget --header "If-Modified-Since: Mon, 22 Aug 2005 07:50:17 GMT" *2 --header "Accept-Encoding: gzip" http://d.hatena.ne.jp/theme/hatena/hatena.css
- 以下のような結果が出る。
--02:02:27-- http://d.hatena.ne.jp/theme/hatena/hatena.css => `hatena.css' Resolving d.hatena.ne.jp... 61.196.246.67, 221.186.146.29, 221.186.129.146 Connecting to d.hatena.ne.jp|61.196.246.67|:80... connected. HTTP request sent, awaiting response... 304 Not Modified 02:02:27 ERROR 304: Not Modified.
- パケットキャプチャの結果を見る→画像
上記画像の「Data(20 bytes)」の部分が余分なデータです。調べたところ、0バイトのデータをgzip圧縮した結果でした。