プログラミングマガジン

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

  • ホーム
  • Web技術
  • 【Web技術】Cache-Control調査
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Web技術】Cache-Control調査

09.16

  • miyabisan2
  • コメントを書く

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

静的コンテンツへの指定例

サイトA

36日半の指定

1
public,max-age=31536000,must-revalidate

must-revalidate

キャッシュは期限が切れたからといって必ず再取得が行われるわけではないです。ただ、このオプションを使えば強制的にキャッシュの再取得を行わせることができます。「キャッシュの期限が切れたら再検証を行う」という意味になります。

next.jsの静的コンテンツ

next/imageの画像以外の静的コンテンツは以下の設定になる。(jsやcssなど)

1
public, max-age=315360000, immutable

immutable

キャッシュしたオブジェクトが変更されないという意味になります。なので、後からキャッシュの期限を短めに変更するなどしてキャッシュを変更することができなくなります。(再度新しいデータを取得したければ新しいURLを取得してくださいねというという意味になる。)

next/Image

キャッシュされないようにしている。ただ、ETagで弱いキャッシュが使われていて画像の差し替えがない限りは304が返るので通信量が減るというような設定になっている。

public, max-age=0, must-revalidate

個人情報を含むAPIなどでキャッシュさせない場合(ログイン後のマイページのフェッチングなど)

サイトA

1
no-cache、no-store、max-age=0

next/Image

1
public, max-age=0, must-revalidate

個人情報を含む場合は他人にデータが漏洩するとまずいのでWebサーバーやCDNのCache-Contorlでキャッシュしないようにしますが、React-Queryなどのクライアントサイドのキャッシュ機構を使えば同じようにキャッシュができるので強い整合性が必要のないページであれば活用してみても良いです。

主に個人情報を含まないが、整合性がそこまで強くなくてもよいページの場合(例:ブログ内容、商品一覧など誰が見ても検索結果が同じもの)

1
public,s-max=10,stale-while-revalidate=86400

初回リクエストでは最新データを表示、10秒間は何度更新しても古いデータになる。11秒以降にアクセスすると、新しいキャッシュが作られる。その次のアクセスで最新になる。

86400秒(1日)で自動的にキャッシュは破棄される。

なので1日の間は数時間とかアクセスの間隔が空いたとしても数時間前にアクセスしたデータでページを表示させることができます。

Next.jsのstale-while-revalidateをRailsやLaravelなど他のフレームワークでも実現できます。(ただ、Next.jsのSG+ISRの方が、SSRやRailsやLaravelなどの毎回動的生成に比べたら描画は遅くなる。)

個人情報を含まないAPIフェッチ

その際もサーバー側でCache-Controlを設定してコントロールは可能です。画面ごとにキャッシュを細かくコントロールしたい場合もあるかとは思います。

その場合は、React-QueryやSWRなどでローカルでキャッシュコントロールができるライブラリが最近はあるので検討することになります。(ただ、その場合サーバーで設定されているCache-Controlのキャッシュと競合しないようにする必要があります。基本的にAPI作る際は個人情報のあるなしに限らずキャッシュしないことにしている現場が多いと思うのでそこまで心配はないかもしれませんが。)

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

関連記事

  1. 2023 09.14

    【Web技術】CDNについて

  2. 2021 09.17

    【Web開発】「Data URL Schema」と「Blob URL Schema」の違い

  3. 2023 09.16

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

  4. 2018 05.27

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

  5. 2022 04.11

    【WebGL】WebGLの基本、知っておいた方が良い「CPU」と「GPU」の知識

  6. 2022 04.08

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

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

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

返信をキャンセルする。

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

【Web技術】画像の遅延読み込み(lazyload)に…

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 ©  プログラミングマガジン | プライバシーポリシー