301&410

もう20年以上何らかのウェブサイトを趣味として運営しているが、きちんとした場で勉強したことがなく、続けるうちにいろいろと学んできた。サイト作成と維持はどこか職人芸の面があり、CSSやページのソース・コードやHTTPレスポンスなどを基本的に見て盗んできたし、壁にぶつかれば Stack Overflow や Server Fault にある回答を参照にしてきた。そのため自分では知っているできることに偏りがあるのか、全く分からないどころか、果たして正しいことをしているのかすら、全然自信がない。

ここ1年くらい、ページ上には反映されない部分で様々なことを変えてきた。そのうちの一つが、HTTPステータス・コードの301 Moved Permanently と410 Gone にできればCDNを利用すること。両方とも完全そして永久にリソースが移動したか削除されたかを示しているので、わざわざバック・エンドのサーバーに確認する必要がない。そのためヘッダーに cache-control: public, max-age=3153600, immutable を設定した。一度キャッシュされれば、次回以降はバック・エンドを通さずにCDNで応答できる。

長くウェブサイトを運営していると、どうしても301が増えてしまう。今はURI変更を極力避けているが、以前はちゃんと転送すれば良いと思って、どんどん変えていた。一時はリダイレクトが何重にもなったり、複雑なことを試みたがために無限ループになったりした。いくら正確にリダイレクトを設定して、一つ一つの転送が数十数百ミリ秒だとしても、転送に転送を重ねれば、それだけでページの読み込みが遅くなる。スピードが重視されるというか、サイトがすぐに表示されるのが当たり前の時代、数百ミリ秒の差は無視できない。

410が多いのは mod_pagespeed の利用をやめて、最適化された画像ファイルがなくなったから。画像の最適化・圧縮を主眼として mod_pagespeed を使っていたが、バック・エンドのサーバーにかなり負担がかかり、画像ファイルの数が増え、HTMLページは必ずバック・エンドを通した。多くのページでは <picture> を使って、スクリーンの大きさに合わせて画像を変えたり、優先的に WebP 形式の画像を表示させたりしていたので、そこまで mod_pagespeed を使うメリットはないという結論に。

また悪い癖で何か変えたくなった。ほぼ無意味だが301を308に変えてみよう。