記事本文

test

Cloudflareのキャッシュについて

CloudflareはCDNのひとつ

コンテンツ配信ネットワーク・コンテンツデリバリーネットワーク
(Content Delivery Network)
を略してCDNと呼ばれています。

サーバへリクエストがあった場合に

  • リクエストを最適化
  • コンテンツを高速配信
  • 高速な処理

これらを行うために、 世界中に分散・連携しているサーバーのネットワークです。
コンテンツをユーザーの近くに保持・配置し、レイテンシを削減できます。
CDNはキャッシュされたコンテンツを配信するため、
オリジンサーバは同じコンテンツを何度も配信する必要がありません。

ユーザがひとつのページへアクセスした場合、
Htmlファイル、スタイルシート、JavaScriptファイル、フォントデータ、画像データなどの
様々な種類のデータへリクエストを飛ばします。

CDNではこれらのコンテンツをエッジサーバへキャッシュとして保持・配置しており、 オリジンサーバへ到達することなく、ユーザへ高速にレスポンスを返すことができます。

CDNを利用するメリット

メリット1 サイトの高速化読み込み速度の大幅な改善

ユーザから物理的に近いエッジサーバから配信することでレイテンシは小さくなり、
ユーザのページ読み込み速度は短縮されます。

ユーザは読み込みが遅いサイトからはすぐに離脱します。

そのためCDNを導入し読み込み速度を改善することで、 「直帰率を減らす」 「ユーザーのサイト滞在時間が増やす」 といった効果が見込めます。

メリット2 データ転送量・帯域幅コストの削減

CDNを導入することで、エッジキャッシュやその他の最適化を用いて
オリジンサーバが提供する必要のあるデータ量を削減できます。

オリジンサーバで配信するデータ量が少なければ少ないほどサーバのコストを抑えることができます。
CDNに料金がかかってくるケースもありますが、データ転送量に比べて遥かに安価に設定されています。 またCloudflareではこれら高速なCDNエッジキャッシュが「無料」で利用できます。

メリット3 コンテンツの可用性と冗長性の向上

CDNを利用していない通常のWEBサイトでは、 大量のトラフィックによる配信の遅延、 ハードウェア障害により処理の中断などが起こります。

CDNでは世界中に分散・連携している性質のおかげで、
多くのオリジンサーバよりも多くのトラフィックを処理することになり、 将来のハードウェア障害に耐えることができます。

メリット4 セキュリティの向上

CDNでは、DDoS攻撃の防御・緩和、SSL証明書の改善、
およびその他の最適化サービスを提供することにより、
セキュリティを向上させることができます。

CloudflareとはどのようなCDNか?

無料プランのある数少ないCDN,CDNプラットフォームの1つです。

  • 高度なファイアウォール
  • CDNキャッシュ
  • キャッシュ管理機能
  • アクセス解析
  • 画像最適化
  • トラフィックルーティング

等々ユーザ体験を向上させるさまざまな機能を有しています。

Cloudflareでのデフォルトキャッシュ動作

特にルールを設定しない場合は、デフォルトのルールに則りエッジキャッシュを生成します。

Cloudflareがキャッシュするファイルタイプ

  • Cloudflareは、MIMEタイプではなく、ファイルの拡張子に基づいてのみキャッシュを行う
  • Cloudflareは、デフォルトでHTMLをキャッシュしない
  • Cloudflareは、robots.txtをキャッシュする

以下の拡張子のファイルが自動的にキャッシュされます。

7Z  CSV GIF MIDI    PNG TIF ZIP
AVI DOC GZ  MKV PPT TIFF    ZST
AVIF    DOCX    ICO MP3 PPTX    TTF 
APK DMG ISO MP4 PS  WEBM    
BIN EJS JAR OGG RAR WEBP    
BMP EOT JPG OTF SVG WOFF    
BZ2 EPS JPEG    PDF SVGZ    WOFF2   
CLASS   EXE JS  PICT    SWF XLS 
CSS FLAC    MID PLS TAR XLSX

HTMLを静的にキャッシュしたい場合はPageRulesの設定などの工夫が必要になります。

Cloudflareがコンテンツをキャッシュしないケース

  • Cache-Controlヘッダー が privateである場合
  • Cache-Controlヘッダー が no-storeである場合
  • Cache-Controlヘッダー が no-cacheである場合
  • Cache-Controlヘッダー が max-age=0の場合
  • Set-Cookieヘッダーが存在する場合

Cloudflareがコンテンツをキャッシュするケース

  • Cache-Control ヘッダが public に設定され、かつ max-age が 0 より大きい場合

注意: Cloudflare はステータスコードに基づく Cache-Control ヘッダがない場合でもリソースをキャッシュする 注意: max-ageとExpiresヘッダーの両方が設定されている場合、Cloudflareではmax-ageが使用される

Cloudflareのキャッシュ可能なファイル容量

  • Freeプラン 最大512MB
  • Proプラン 最大512MB
  • Businessプラン 最大512MB
  • Enterpriseプラン 5GB(もしくは問い合わせによる上限解除)

Cloudflareキャッシュレスポンスについて

CF-Cache-Statusヘッダーで、リソースがキャッシュされているかどうかを確認できます。 Chromeの開発者ツールなどですぐに確認が可能です。 F12→Networkで確認可能!

CF-Cache-Statusは9種類あります

Cloudflare キャッシュレスポンス「HIT」とは

Cloudflare キャッシュレスポンス CF-Cache-Status が 「HIT」の場合は、 Cloudflare エッジキャッシュが見つかったことを示します。 オリジンサーバへリクエストが到達することなくエッジサーバからレスポンスが返ってきています。

Cloudflare キャッシュレスポンス「MISS」とは

Cloudflare キャッシュレスポンス CF-Cache-Status が 「MISS」の場合は、 Cloudflare エッジキャッシュが見つからなかったことを示します。 オリジンサーバへリクエストが到達し、コンテンツはオリジンサーバから返されたことを示しています。

Cloudflare キャッシュレスポンス「NONE/UNKNOWN」とは

Cloudflare キャッシュレスポンス CF-Cache-Status が 「NONE/UNKNOWN」の場合は、 アセットがキャッシュの対象外であることを示すレスポンスを生成したことを示しています。

発生パターンは以下のようになります。 - Workerがサブリクエストを送信せずにレスポンスを生成した(レスポンスはキャッシュから来たものではないので、キャッシュステータスはnone/unknown) - Workerのリクエストが、サブリクエスト(フェッチ)を作成した(サブリクエストはキャッシュステータスで記録され、メインリクエストは none/unknown ステータスで記録される,Workersはキャッシュの前に位置するため、メインリクエストはキャッシュにヒットしない) - リクエストをブロックするために、ファイアウォールルールが起動された(レスポンスはキャッシュにヒットする前にエッジネットワークから来る。キャッシュのステータスがないため、none/unknownが返る) - リダイレクトページルールによって、エッジネットワークが別のアセット/URLへのリダイレクトで応答した(このリダイレクト応答は、リクエストがキャッシュに到達する前に発生するため、キャッシュステータスはnone/unknown)

Cloudflare キャッシュレスポンス「EXPIRED」とは

Cloudflare キャッシュレスポンス CF-Cache-Status が 「EXPIRED」の場合は、 Cloudflare エッジキャッシュが見つかったが、期限切れであったことを示します。 そのためオリジンサーバへリクエストが到達し、コンテンツはオリジンサーバから返されます。

Cloudflare キャッシュレスポンス「STALE」とは

Cloudflare キャッシュレスポンス CF-Cache-Status が 「STALE」の場合は、 Cloudflare エッジキャッシュからレスポンスが返ってきているが、期限切れであることを示します。 また、Cloudflareは更新されたリソースを取得するためにオリジンサーバへの通信に失敗しています。

Cloudflare キャッシュレスポンス「BYPASS」とは

Cloudflare キャッシュレスポンス CF-Cache-Status が 「BYPASS」の場合は、 オリジンサーバへリクエストが到達し、コンテンツはオリジンサーバから返されます。

Cloudflareが元々アセットをキャッシュすることを望んでいたにも関わらず、
Cache-Controlヘッダをno-cache,private,max-age=0に設定しキャッシュを回避するように設定されています。
Set-Cookieヘッダーが存在する場合もBYPASSが返ります。

Cloudflare キャッシュレスポンス「REVALIDATED」とは

Cloudflare キャッシュレスポンス CF-Cache-Status が 「REVALIDATED」の場合は、 Cloudflare エッジキャッシュからレスポンスが返ってきているが、キャッシュが古くなっていることを示します。 また、このリソースは If-Modified-Since ヘッダーまたは If-None-Match ヘッダーによって再検証されたことを示します。

Cloudflare キャッシュレスポンス「UPDATING」とは

Cloudflare キャッシュレスポンス CF-Cache-Status が 「UPDATING」の場合は、 Cloudflare 期限切れであるがエッジキャッシュからレスポンスが返ってきており、オリジンサーバの情報は新しくなっていることを示します。 タイミング的にUPDATINGは通常、非常に人気のあるキャッシュリソースにのみ見られます。

Cloudflare キャッシュレスポンス「DYNAMIC」とは

Cloudflare キャッシュレスポンス CF-Cache-Status が 「DYNAMIC」の場合は、 Cloudflare キャッシュを生成・利用せずオリジンサーバへリクエストが到達し、 コンテンツがオリジンサーバから返されていることを示します。

このリソースをキャッシュする場合はPageRulesやCacheRulesの設定が必要です。

まとめ

本記事ではざっとこのあたりを確認できるかと思います。

  • Cloudflareは無料で高機能なCDN
  • Cloudflareエッジキャッシュのデフォルトルールを理解する
  • キャッシュレスポンスを確認して現在の状態を把握する

理解を深めてより良くサービスを利用できたらと思います。