プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Web技術
  • 【Web技術】キャッシュに関わるHTTPヘッダーについて
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Web技術】キャッシュに関わるHTTPヘッダーについて

09.16

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

強いキャッシュ

基本的にクリアができないキャッシュになるので、HTML、CSS、JS、画像などの静的リソースに適用するのが一般的です。

Expiresヘッダー

リソースのキャッシュをブラウザに指示ができる。絶対日時。この日時を過ぎるまでブラウザはマシン内にキャッシュをします。

1
Expires: Thu, 12 Oct 2023 12:00:00 GMT

デメリット

キャッシュ日時を設定するため、サーバーとクライアントで時間設定がずれている場合にキャッシュ期限が意図通りに正しく設定されない。

Cache-Controlヘッダー

max-ageで指定する。600と指定した場合は600秒クライアントマシンに保持される。これならExpiredの弱点である時刻がずれている件にも対応できます。(ただ、ProxyやCDNを間に挟む構成になっている場合はそこを通過する場合もmax-ageを消費するので注意が必要です。)

ExpiresとCache-Controlの使い分け

どちらも設定されている場合は、Cache-Controlが優先されます。Cache-Controlの方が登場が遅かったので様々なブラウザに対応するためにどちらも対応するという手法が行われてきました。

ただ、モダンブラウザであれば全てCache-Controlには対応しているので現環境だとCache-Controlだけで良くなっています。

無理やりこれらのキャッシュをクリアするには?

画像URLにトークンを付与する手法です。PHPなどのサーバーサイド言語でトークンを付与を自動化する場合がほとんどです。現在日時などを付与します。

弱いキャッシュ

強いキャッシュだと一度ブラウザマシンで有効になるとWebサーバー側でキャッシュをクリアできないので扱いに困る。URLトークンで無理やりクリアできますが、HTMLにはトークンを加えられないので適用できません。その際に、使えるのが弱いキャッシュです。

具体的には、繰り返し変更されるようなリソース(動的リソース)に対して適用するのが一般的です。

HTTP/1.1から導入された「条件付きHTTPリクエスト」を用いることでWebサーバーからキャッシュをクリアできます。

Etagヘッダー

URLのリソースのバージョン(エンティティタグ)をもとにキャッシュ切れか判断します。

適当ですが、Webサーバーはレスポンスヘッダの中に以下のようなEtagを返します。リソースの一意のIDを示しています。

1
Etag: "acaofpqkmfaji"

サーバーはこのEtagの値が変わっていなければ同じリソースであるとみなして304を返します。Etagが一致しなかった場合は新しいレスポンスを返します。

Last-Modifiedヘッダー

URLの最終更新日をもとにキャッシュ切れかを判定します。

そのURLのリソースが最後に変更されたのがいつなのか設定します。強いキャッシュのように全くサーバーに再要求しなくなるわけではなく、普通にクライアントからサーバーにリクエストを出した上でサーバー側が判断してキャッシュされていると判断した場合はその信号を小さなレスポンスで返すのでレスポンスサイズと少なくすることが可能です。

条件に合致した場合(キャッシュが残っている場合)にサーバーサイドは304を返します。そうじゃない場合は普通にレスポンスを返します。

EtagとLast-Modifiedヘッダーの使い分け

柔軟な仕組みを活かしたい場合はEtagが良いです。両方使った場合はEtagが優先されます。

理由としてはトークンさえあれば複数の結果をキャッシュできるためです。

ただ、EtagはWebサーバーが分かれている場合などは別々のサーバーで同じコンテンツで別のEtagが生成されないようにするために設計上の考慮が必要になります。

スポンサーリンク
  • 2023 09.16
  • miyabisan2
  • コメントを書く
  • Web技術
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 07.31

    【Web】「CORS」を使わないSOPの緩和方法

  2. 2023 09.14

    【Web技術】CDNについて

  3. 2018 05.27

    ファイルの「圧縮」と「アーカイブ」と「解凍」、gzip圧縮について

  4. 2023 09.11

    【Web技術】高速配信の戦略

  5. 2023 09.16

    【Web技術】Cache-Control調査

  6. 2022 04.08

    【WebGL】「カクつく」問題、gtlf

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Web技術】CDNについて

【Next.js】デプロイ先検討

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー