水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > 301 を喰らい続けるロボット

301 を喰らい続けるロボット

2003年5月9日(金曜日)

301 を喰らい続けるロボット

実はちょっと前まで、この辺りのページを見たとき「なんか知らないけどスタイルシートが無効になってるっぽい」「サイト内のリンクがリンク切れになっている」という現象がしばしば発生していたことと思います。これは要するに hatomaru.dll のバグなんですが、「末尾に / をつけた URL をリクエストされると内部キャッシュが汚染される」という結構強烈なものでした。

ソースを見ると分かると思いますが、この辺の HTML では基本的に href属性などを相対URL で書いています。これは hatomaru.dll 内部で自動的に生成しているのですが、リクエストされた URL の末尾に / がくっついていると相対 URL の書き方が変わります。困ったことに /ebi と /ebi/ とでは同じ内部キャッシュファイルを共有しているため、/ebi/ に誰かがアクセスした後で /ebi を見ると、URL が全て /ebi/ から計算された相対 URL になっているわけです。

そんなわけで / の有無はどちらかに統一する必要があるのですが、短い方が良いので無しに統一することにしました。/ つきの URL がリクエストされた場合は、内部処理を行わないで 301 を発行して / のない URL にリダイレクトします。

……という変更を行ったのが今週頭くらいなのですが、いまだに / つきの URL が定期的にアクセスされています。それは明らかにロボットなのですが、何度 301 を喰らっても一向に学習する気配なし。RFC2616 では、301 を受け取ったクライアントはこんな風に動作するべしとされています。

Clients with link editing capabilities ought to automatically re-link references to the Request-URI to one or more of the new references returned by the server, where possible.

以上、RFC2616 10.3.2 301 Moved Permanently より

※SHOULD ではなく ought to という表現が使われているのは、RFC2119 で定義されている SHOULD を意味しないという主旨なのでしょうね。仕様として SHOULD と定める訳ではないけど当然そうすべきだよねとか、そんなニュアンスなのでしょう。

具体的に名前を挙げると、そのユーザエージェントは Hatena Antenna/0.4 です。できれば 301 応答を学習して、参照する URL を変えて欲しいところです。できないことはないと思うのですが。

関連する話題: Web / UA / http / altba.com / サーバ / hatomaru.dll

最近の日記

関わった本など