n2s アーカイブス

「 【えぬ】〜Theme of えぬ〜 にまつわるはてダ」のアーカイブです。気が向いたら復活するかもしれません。

ある条件下ではてなのデータ読み込みが異様に遅い件

http://i.hatena.ne.jp/idea/5483

はじめに

はてなダイアリーの閲覧の際毎回のように画像読み込みが止まるのがいいかげんうざく感じたため、原因を自分の方で調べ報告しようと思いました。

症状を確認した環境

症状

上記の環境下ではてなダイアリーのページで再読み込みを行った際、たとえばデフォルトでページ左上に表示される画像データの読み込みが異様に時間がかかる。
Proxomitronのログを見たところ、時間がかかっている箇所で以下のログが出てきている。

HTTP/1.1 200 (No headers)
Server: Unknown, missing HTTP headers

原因

  • HTTP/1.1のKeep-Alive接続による連続的なリクエスト・レスポンスの中で、レスポンスボディを含んだ「304 Not Modified」レスポンスが返されている。これはRFC2616に違反している
  • Proxomitronは直前の304レスポンスに含まれるレスポンスボディを次のリクエストに対するレスポンスのヘッダと誤認識し、誤動作を起こす。

再現方法一例

  • パケットキャプチャ(etherealなど)を起動する。
  • 以下のコマンドを実行する。*1
% 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圧縮した結果でした。

*1:複数行に分けていますが1行につなげて実行すること

*2:コマンドを実行する時点でのhatena.cssのLast-Modified:に合わせること