水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > hatomaru.dll 修正

hatomaru.dll 修正

2007年5月7日(月曜日)

hatomaru.dll 修正

さっそくバグの嵐だったようで、すみません。いろいろご指摘くださった皆様、ありがとうございました。

キャッシュ周りでいろいろ問題が出ていたので修正したら、http://bakera.jp/ が自身にリダイレクトして死亡するというエンバグが発生し、それも修正。どちらも、私がいろいろ忘れていたのが原因です。

もう少し説明すると、Not Found はキャッシュのファイル名が競合する事によって発生していました。実は末尾に / のついた URL では、うまくキャッシュのファイル名が付けられないという問題があります。たとえば、http://bakera.jp/ebi と http://bakera.jp/ebi/ は、両方とも内部では同じファイル名になってしまいます。

※まあ、実装がショボイだけなのですが。ちなみに、IE の履歴から / で終わる URL にアクセスすると / なしの URL にアクセスしに行ったりしますが、おそらく同じ理由によるものでしょう。

キャッシュのファイル名が競合しているとどうなるかというと、http://bakera.jp/ebi にアクセスしたときにキャッシュされた内容が http://bakera.jp/ebi/ にアクセスしたときにも表示されたり、その逆が起きたりします。そして本来、http://bakera.jp/ebi は日記、http://bakera.jp/ebi/ は Not Found ページになっていました。つまり、

という順だと http://bakera.jp/ebi/ が Not Found にならず、日記の内容が表示されてしまうという不具合が起きます。逆に、

という順だと、日記ページが Not Found になるという不具合が発生します。今回はこれらが両方とも発生していたのですが、前者は問題として認識されにくかったため、「日記が Not Found になる」という問題として認識されたのです。「日記が Not Found だというコメントを書き込んだら復活した」という報告も何度かいただきましたが、これは、掲示板に何か書き込むと日記のキャッシュが無効になって再生成されるためです。

※コメントが書き込まれると、各日記のコメント数表示が更新されるため。

では、どうして昔の hatomaru.dll では大丈夫だったかというと、単純に「誤って / つきの URL にアクセスされたら、キャッシュを生成せずに / なしの URL にリダイレクトする」という処理を行っていたためです。今回の改造でこの処理をやめたため、問題が表面化してしまったのでした。

では、何故今回の改造でリダイレクトをやめたのか? それは、今回の改造で / つきの URL にアクセスせざるを得ないケースが現れたためです。それは http://bakera.jp/ にアクセスしたケースで、これを http://bakera.jp にリダイレクトすると、http://bakera.jp/ にアクセスされることになって無限ループになってしまいます。

流れをまとめてみましょう。

……なんかフォローしようがない忘れっぷりです。ご迷惑おかけして申し訳ありませんです。

関連する話題: hatomaru.dll / えび日記 / 失敗談

最近の日記

関わった本など