HTTPレスポンスヘッダ Expires とは?

投稿者 : OSCA

関東地方の美しい夜景を観にいこう。 夜景サイト「夜景散歩」で夜景スポットを検索

 本稿ではHTTPレスポンスヘッダであるExpiresヘッダについて、その概要・使いどころなどについて解説します。

ブラウザのキャッシュとは

 Expires ヘッダの目的を理解するためには、まずはブラウザのキャッシュについて理解する必要があります。 ブラウザのキャッシュについての説明が必要なければ、ここは読み飛ばして下さい。

 ブラウザがホームページを表示する場合、ブラウザはホームページが設置されているサーバーにアクセスし、ホームページのコンテンツをダウンロードします。 このとき、わずかな時間かも知れませんが、コンテンツのダウンロードが完了するまでの待ち時間が発生しています。
 さて、ブラウザで同じホームページに再訪することを考えてみましょう。 このとき「一度アクセスしたことがあるページなら、以前に表示したものを見せてくれれば良い」という考えができます。 そのような場合、以前に表示(ダウンロード)したホームページが手元に残っていれば、再度サーバーにアクセスする必要がなくなり、すぐにホームページを表示できます。 この「以前にダウンロードしたホームページを手元に残す」ことをキャッシュするといい、どのようなブラウザでも、以前ダウンロードしたものをキャッシュする機能を有しています。

Expires ヘッダとは?

 ExpiresヘッダはHTTPレスポンスのヘッダ項目で、コンテンツのキャッシュ有効期限を表します。 言い換えると、コンテンツを要求されたサーバーが、コンテンツとセットでブラウザにキャッシュする有効期限を返却できるというわけです。

 Expires ヘッダの目的は、コンテンツの有効期限を明確にし、有効期限内はブラウザのキャッシュを利用してもらうことです。 そうすればクライアントであるブラウザは高速にホームページを表示できますし、サーバー側としては余計なリクエスト(アクセス)を受けずに済むというわけです。

ここでの要点

  • キャッシュ期限内はブラウザのキャッシュを利用するため高速にコンテンツを表示できる。
  • キャッシュを利用するので、無駄なインターネット通信が削減できる。
  • サーバーは無駄なリクエストを受けずに済み、サーバー負荷を削減できる。

Expires ヘッダをつけるべきコンテンツとは?

 クライアントにもサーバーにも優しい Expires ヘッダですが、コンテンツによって向き/不向きがあります。 それは「コンテンツが静的か動的か」によります。

 Expires ヘッダをつけてコンテンツを返却すると、そのコンテンツはキャッシュの有効期限までキャッシュが利用されますので、サーバー上のコンテンツが更新されたとしてもそれが表示されません。 よって更新頻度が高い動的コンテンツには不向きだと言えます。 逆に画像などのほぼ更新がない静的なコンテンツには有効だと言えます。

ここでの要点

  • 更新頻度の高い動的コンテンツには向いていない。
  • 画像などの更新頻度の低い静的コンテンツには向いている。

Expires ヘッダの書式

 それでは具体的に Expires ヘッダの書式について見ていきましょう。 上述のように、Expres ヘッダはHTTPレスポンスのヘッダ項目で、次の例のように返却されます。

HTTP/1.1 200 OK
Date: Sat, 23 Dec 2017 06:53:29 GMT
Content-Type: text/css
Expires: Wed, 24 Jan 2018 06:53:29 GMT
(以下略)

 具体的な書式としては、次のような形になります。

Expires: <http-date>

有効期限の長さをどう設定するか?

 Expires ヘッダの有効期限として設定すべき日時は、1週間〜1年間が良いとされています。 もちろん長ければ長い程良いですが、インターネットの規約「RFC」で1年以上は指定しないように規定されていますので注意が必要です。

各種HTTPサーバ製品での設定

 Expires ヘッダはHTTPレスポンスのヘッダ項目ですので、HTTPサーバーが返却するものです。 利用者の多い Apache httpd や Nginx では、次のような設定で Expires ヘッダを返却するようにできます。

Apache httpd

 Apache httpd では、モジュール「mod_expires」を利用することで Exprires を返却できるようになります。 詳しい方法は、次のページをご覧ください。

Nginx

 Nginx では、設定に次のような expires の記述を追加してあげることで実現できます。

expires 7d;

SEOに与える影響

 最後に SEO (Search Engine Optimization) に与える影響についても解説します。 基本的に Expires でコンテンツのキャッシュ有効期間を正しくコントロールできていれば、SEOにも良い影響があります。 Google はページの読込み速度も評価しています。 Google が提供するWEBページの読み込み速度をスコアにしてくれる「PageSpeed Insights」では、静的コンテンツに Expires ヘッダが付けられていることを評価しています。 PageSpeed Insights のヘルプページ「ブラウザのキャッシュを活用する」をぜひ読んでみてください。

おわりに

 本稿ではHTTPレスポンスヘッダであるExpiresヘッダの概要・使いどころなどについて解説しました。 皆様のお仕事のお役に立てれば幸いです。

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。
個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca