おれ かきすてる おまえ よむ

ぶんたい いろいろ いちにんしょう ばらばら でも それでいい きにするな おまえ つよくいきろ それでいい

Proxomitron使用時にはてなブログのグローバルヘッダ周りで読み込みが詰まる問題

が出たので、対症療法的に治した。あるいは、男の料理的に治した。

そもそもこういう、「なんかProxomitronのせいで接続の調子がおかしいな」という類いの問題が起きた時にどう対応するのかという一般的な話、すなわちProxomitronのログをチェックする方法から記す。

  1. Proxomitronのログウィンドウを開き、一時停止、のちリセット。
  2. 問題が発生するページを開き、Proxomitronの中止ボタンを押して全ての接続を切る。
  3. ログウィンドウの一時停止を解除。
  4. 速やかに、問題のページをスーパーリロード。この時ログウィンドウが見えているとページ読み込みが恐ろしく長くなるので、ログウィンドウを最小化するとかブラウザウィンドウで隠すとかするとよい。閉じてはいけない。
  5. 通信が落ち着き、詰まった接続だけが残る状態になったらProxomitronの中止ボタンを押し、ログウィンドウを一時停止する。
  6. ログをテキストエディタにコピペ。

さて、するとログの一番下には

+++CLOSE 168+++
+++CLOSE 157+++

といったように、最後に強制的にぶった切った"詰まった"接続の番号が並ぶ。ログの中からその数字を検索してやろう。今回の場合ではまず「 157+++」なんかをキーにして探せばよい。

結果、おおむね以下のような感じのログが見つかった。

+++GET 157+++
GET /api/log?uri=http%3A%2F%2Fsizuken.hateblo.jp%2F HTTP/1.1
Host: blog.hatena.ne.jp
Cache-Control: max-age=0
Accept: */*
Origin: http://sizuken.hateblo.jp
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
DNT: 1
Referer: http://sizuken.hateblo.jp/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ja,en-US;q=0.8,en;q=0.6
Connection: keep-alive
Browser reload detected...

(中略)

+++RESP 157+++
HTTP/1.1 204 No Content
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://sizuken.hateblo.jp
Date: Sat, 04 Jan 2014 11:27:06 GMT
P3P: CP="OTI CUR OUR BUS STA"
Server: nginx
Vary: Accept-Language, Cookie
X-Content-Type-Options: nosniff
X-Dispatch: Hatena::Epic::Admin::Api#log
X-Frame-Options: DENY
X-Revision: de41de6dec1a8b612c3ef150b5fd8ef6
X-Runtime: 0.020078
X-XSS-Protection: 1
Connection: keep-alive
Browser reload detected...

(中略)

+++CLOSE 157+++

早い話がProxomitronのログは GET → RESP → CLOSE で1セットなのだけれども、この接続番号157番はなぜかRESPが返ってきた後にCLOSEされないまま沈黙してしまっている。だからブラウザの表示は読み込み中のままになってしまうし、読み込みの完了をトリガーにして発動する処理も巻き添え食らって止まってしまう。

んでこれどうすんのって話なのだけど、この問題はごく稀に起きるのだが、私の知る限り、通常はどうしようもない。原因はわからないが、Proxomitronをバイパスモードにして全てのフィルタを無効にしても回避できないことが多いので、フィルタは関係のない、Proxomitron本体のバグだろうとは思う。作者もこの世にいないので基本的にはお手上げである。

ただ、今回の場合は対処法があった。RESPをよく見ると

+++RESP 157+++
HTTP/1.1 204 No Content

とある。何度も試したが、基本的に /api/log?uri= へのGETには 204 No Content が返ってくるらしい。理由は知らないが、中身がないならそもそもGETさせなければよい、ということでAdListに以下の記述を追加したところ完治した。

#はてなブログのグローバルヘッダが詰まる対策
blog.hatena.ne.jp/api/log[?]

アクセス解析機能に関わる何かなのかな。よくわからないが、今のところ自分に不都合はなさそうなのでスーパー対症療法、ザ・男の料理であるが、これでよしということにする。なお、この方法を試す前に「ステータスコード204が返ってきたら切断するフィルタ書けばよくね?」というより副作用の少なそうな方法を試してみたのだが上手く行かなかった。一応その失敗フィルタも置いておく。

[HTTP headers]
Key = "Connection: kill 204 No Content 20140104"
Match = "$RESP(204*)"
Replace = "\k"

なぜ失敗するのかさっぱりわからなくてすみません。Proximodo Liteほしいです。