Last-Modified と HTTP date と RFC 1123

API だの Feed だので盛り上がっている wtnabe です。

今日は先日の ETag の話に続いて client 側での cache に使える Last-Modified response header のお話。

サーバサイドで各種スクリプトを動かす場合、HTML そのものは cache してほしくない場合が少なくありません。

……。ということにしてください。

実は Last-Modified はほとんど意識したことがありませんでした。ですが API や feed の場合は基本的に生のデータをそのまま提供する形になるし、ブラウザからの自サイトへの直接のアクセス以外にも様々な利用が可能なので、ネットワーク帯域やサーバの負荷を抑えるためにできることはいろいろ細工しておきたいものです。

ということで本題。

cf. [Studying HTTP] HTTP Header Fields

このヘッダの値は HTTP date という名前で定義され、以下のようなルールになっています。

  1. RFC1123 スタイルの固定長の表記が好まれている(送出はこれにしなければならない(MUST))
  2. それ以外も含めて3つの表記をサーバ、クライアントともに受け入れなければならない(MUST)
  3. すべての HTTP date/time stamp は例外なく GMT で表現されなければならない(MUST)1

ちなみに RFC1123 の日時表記が RFC822 と違うのは

  • 年は4桁の数字で表現すべき(SHOULD)
  • timezone の名前ではなく時差を数字で表現すべき(SHOULD)

ということらしいです。

ということは timezone の名前は管理する必要ないですね。よかったよかった。

  1. リンク先は誤訳でしょう。without exception は「例外を除いて」ではなく「例外なく」になるはずです。 

More