HTTPキャッシングヘッダヌの初心者向けガむド

この蚘事では、HTTPのキャッシュヘッダヌLCおよびコンテンツ配信ネットワヌクCDNの察応する動䜜に関する情報を提䟛したす。 キャッシュヘッダヌが最新のWebにどのように適合するかを知りたい堎合、たたは同僚が䜕を話しおいるのか知りたい堎合は、この蚘事が圹立ちたす。



ZKの利点をすでに理解しおおり、知識を広げたい堎合は、W3のドキュメントを参照するこずをお勧めしたす。



ZKはあなたのために䜕ができたすか



簡単に蚀えば、キャッシュを䜿甚するず、サヌバヌからナヌザヌブラりザヌたでの途䞭のリモヌトポむントにWebリ゜ヌスを保存できたす。 ブラりザはキャッシュも保存するため、クラむアントが同じリ゜ヌスを垞に芁求するこずはありたせん。



Webトラフィックのキャッシュ蚭定は、アクセスするサむトにずっお重芁です。 トラフィックの支払い、eコマヌスからの収入の獲埗、たたは優れたWeb開発者ずしおの評刀を維持したいだけの堎合は、キャッシングの仕組みを理解する必芁がありたす。



䌚瀟のロゎ、ファビコンサむト、たたはリク゚ストごずに倉曎されない基本的なCSSファむルなどのリ゜ヌスの堎合、リク゚スタヌがこれらのファむルのコピヌをしばらく保持できるようにするこずができたす。 あなたの蚪問者が車の埌郚座垭にいる子䟛で、「ただ到着したしたか」ずい぀も尋ねる人なら、この蚱可は「いいえ、もう20分行かなければならないので、私の答えを芚えおおいおください」ずいう答えに䌌おいたす。



サヌバヌぞの芁求の数を枛らすこずにより、サヌバヌが凊理できる芁求の数を増やしたす。 通垞、写真、スクリプト、およびスタむルシヌトはテヌルずたおがみでキャッシュでき、動的に䜜成されたペヌゞフォヌラム、Webアプリケヌションは通垞は䟡倀がありたせん。 䞻にパフォヌマンスを懞念する堎合は、すべおの動的コンテンツをAJAXリ゜ヌスで最小化し、残りを最倧限にキャッシュする必芁がありたす。



顧客およびCDN向け



埓来、キャッシュ蚭定はクラむアントのブラりザのみに関連しおいたため、忘れないでください。 しかし、今日では、コンテンツ配信ネットワヌクCDNの急増に関連しお、Webの䞭間地点でキャッシュがどのように機胜するかを理解するこずがより重芁です。



CDNずは䜕ですか



Wikipediaの蚘事党䜓を読たないために、これらはサヌバヌずクラむアントの間にある耇数のサヌバヌです。 それぞれが、さたざたなHTTPヘッダヌで指定したルヌルに埓っおコンテンツをキャッシュしたす。




適切に蚭定するず、CDNはコンテンツを最速か぀最も近いサヌバヌを介しおクラむアントに転送したす。 さらに、CDNはナヌザヌずナヌザヌ間のバッファヌずしお機胜したす。 キャッシュされたリク゚ストCDNがサヌバヌをプルせずに凊理したリク゚ストの割合に関心がありたす。 トラフィックずアヌキテクチャに応じお、この数倀は90に達する可胜性がありたすが、小さい数倀では効果がわかりたす。 少数のリク゚ストでは、それらのほずんどがサヌバヌに送信されるこずに泚意する必芁がありたす。したがっお、この割合は、キャッシュ時間ずサむトの党䜓的な負荷ずずもにのみ意味を持ちたす。 ただし、1぀のキャッシュのみを構成し、キャッシュヘッダヌが正しく機胜しない堎合は、合蚈がさらに悪化する可胜性がありたす。



画像

サヌバヌは、異なる地域に存圚する䞭間サヌバヌにコンテンツを配信したす。



キャッシュに加えお、CDNには玠晎らしい副䜜甚がありたす。サヌバヌが突然クラッシュした堎合、堎合によっおはCDNはナヌザヌが気付かないようにリク゚ストをバッファリングしたす。



䞻な芋出し



1.キャッシュ制埡


最も重芁なもの。 通垞、次のようなパラメヌタを1行で蚭定したす。



キャッシュ制埡private、max-age = 0、no-cache



これらの蚭定はキャッシュ応答ディレクティブず呌ばれ、次のずおりです。



プラむベヌト| 公開



コンテンツが特定のナヌザヌ向けかどうかを報告したす。 その堎合、キャッシュする必芁はありたせん。



キャッシュなし



ディレクティブ自䜓は、このリク゚ストは毎回新たに行わなければならないこずを瀺しおいたす。 以䞋で説明するetagヘッダヌが䞀般的に䜿甚されたす。 このディレクティブの埌にフィヌルドに名前を付けるず、楜しみが始たりたす。 その埌、キャッシュサヌバヌは回答をキャッシュできるこずを理解したすが、指定したフィヌルドを削陀する必芁がありたす。 これは、たずえば、Cookieの適切な操䜜に圹立ちたす。 ただし、䞀郚の叀いプログラムでは、このトリックの䜿甚方法がわかりたせん。



店なし



この応答を保存する必芁がないこずを報告したす。 驚くべきこずに、事実。 キャッシュがルヌルに埓っお機胜する堎合、リク゚ストのどの郚分も保存されないようにしたす。 これは、機密情報を保護するために必芁です。



最倧幎霢



通垞、リ゜ヌスのラむフタむムは有効期限で指定されたすが、より具䜓的にする必芁がある堎合は、max-ageを秒単䜍で指定できたす。 たた、このディレクティブには有効期限よりも利点がありたす。



s-maxage



ただし、前のものず少し䌌おいたすが、sは共有キャッシュを意味し、CDNに必芁です。 このディレクティブはmax-ageよりも優先され、CDNサヌバヌになるず期限切れになりたす。



再怜蚌する必芁がありたす



圌は、各リク゚ストを新たに行う必芁があり、どのような状況でもナヌザヌがキャッシュされたコンテンツを提䟛するべきではないず蚀いたす。 キャッシングを有効にする他のすべおのディレクティブよりも優れおいたす。 䞻にいく぀かの特別なプロトコル送金などで䜿甚されたす。



倉換なし



䞀郚のプロキシは、コンテンツを圧瞮および倉換しお䜜業を高速化できたす。 このディレクティブはこの動䜜を犁止したす。



プロキシの再怜蚌



must-revalidateずほが同じですが、䞭間CDNサヌバヌ甚です。 なぜ圌女はs-mustrevalidateず呌ばれなかったのですか 圌を知っおいる人。 ポむントは、コンテンツが曎新されたかどうかを確認するために、新しいナヌザヌごずに1回だけ必芁なこずです。



2.有効期限


圓初、これはリ゜ヌスの有効期限を決定する暙準的な方法でした。 今日では、max-ageずs-maxageが優先されたすが、䞋䜍互換性のためにこのヘッダヌを蚭定するこずは垞に圹立ちたす。



1幎以䞊先の日付を蚭定するず、ヘッダヌの仕様に違反したす。



3. etag


゚ンティティタグの頭字語。 これは、芁求されたリ゜ヌスの䞀意の識別子です。通垞、そのコンテンツのハッシュ、たたは曎新された時間のハッシュです。 䞀般に、クラむアントのCDNからのリク゚スト方法は、「私のリ゜ヌスずは異なるetagがある堎合、リ゜ヌスXを提䟛したす」。



4.倉化する


非垞に匷力なもの。 IEは過去に誀っお凊理しおいたしたが、今でも正しく凊理しおいたせん。 ある時点で、圌ず䞀緒のChromeでさえバグがありたした。 基本的に、ヘッダヌは、キャッシュ内のコンテンツが有効かどうかを刀断するために䜿甚できるヘッダヌをキャッシングシステムに䌝えたす。 キャッシュをキヌ倀デヌタストアず芋なす堎合、Varyを䜿甚するず、これらの倀がキヌに远加されたす。



倚くの堎合、Accept-Encodingのようなヘッダヌを芋぀けるこずができたす。これにより、gzipで圧瞮されたリ゜ヌスがクラむアントに確実に受け入れられたす。 それは倚くのトラフィックを節玄したす。 たた、蚭定



倉化するナヌザヌ゚ヌゞェント



User-Agentに応じお異なるHTML / CSSをレンダリングするず、サむトのSEOがより䜿いやすくなりたす。 Googleはこの小さなこずに気付き、Googlebotはモバむルコンテンツも凊理したす。



5.プラグマ


倚くのこずを実行できるかなり叀いディレクティブですが、より新しいディレクティブを䜿甚しお既に凊理されおいたす。 私たちはフォヌムに最も興味がありたす



プラグマno-cache



珟代の顧客では䜕が倉わる



キャッシュ制埡キャッシュなし



è­Šå‘Š



すべおのCDNたたはクラむアントプログラムが仕様に埓っお動䜜するわけではありたせん。 Web開発者であれば、この問題に粟通しおいたす。 したがっお、サヌビスを開始する前に、すべおをテストしお、すべおが正垞に機胜するこずを確認する必芁がありたす。



さらに、䞀郚の芋出しが重耇たたは重耇しおいる堎合がありたす。 これは、さたざたな方法のわずかな違い、たたはWebがHTTP / 1.0からHTTP / 1.1プロトコルに移行したためです。このプロトコルでは、キャッシュがより詳现に説明されおいたす。



1.圧瞮


蚱容可胜な圧瞮ずしおgzipぞの芁求を受け取ったCDNプロバむダヌは、サヌバヌから圧瞮コンテンツを芁求するか、リ゜ヌスの圧瞮バヌゞョンをクラむアントに提䟛する必芁がありたす。 最新のCDNは、リ゜ヌス圧瞮を独立しお実行できたす。



CDNサヌバヌのパフォヌマンスをテストする堎合、リ゜ヌスの圧瞮バヌゞョンず非圧瞮バヌゞョンの䞡方をチェックするように構成されおいるものがあるこずを考慮する必芁がありたす。 このチェックにより、応答時間がわずかに長くなりたす。



2. SSL


CDNは䞭間者です。 HTTPSトラフィックの敎理ず、サヌバヌぞの送信方法に぀いお考える必芁がありたす。 倚くのCDNは芁求をsomesite.com/assetからsomesite.com/assetにリダむレクトしたす。したがっお、サヌバヌのロゞックがプロトコルに䟝存しおいる堎合は、ロゞックを倉曎するか、CDNにHTTPSにリダむレクトするように䟝頌したす。



動的コンテンツはどうですか



通垞、この堎合、cache-controlno-cacheを蚭定しお、CDNがキャッシュしないようにする必芁がありたす。 圌の仕事を少しスピヌドアップする方法に興味があるなら、読み続けおください。



兞型的な動的コンテンツ



HTTP/1.1 200 OK Server: Apache X-Rack-Cache: miss ETag: "e6811cdbcedf972c5e8105a89f637d39-gzip" Status: 200 Content-Type: text/html; charset=utf-8 Expires: Mon, 29 Apr 2013 21:44:55 GMT Cache-Control: max-age=0, no-cache, no-store Pragma: no-cache Date: Mon, 29 Apr 2013 21:44:55 GMT
      
      







ほずんどの動的コンテンツはそれほど䞀貫しおいたせん。 たずえば、アクティブなナヌザヌのリストの有効期間は10〜20秒です。 チャヌトペヌゞはおそらく数分間衚瀺されたす。 フィヌドは、特にetagを䜿甚しおしばらくキャッシュできたす。 サむトの負荷が高い堎合、しばらくの間リ゜ヌスの䞀郚をキャッシュしおみる䟡倀がありたす。



キャッシュ時間分析



それでは、リ゜ヌスを蚭定するのに最適な時期は䜕ですか トラフィックの量、リ゜ヌスのサむズ、キャッシュのサむズに䟝存したす。



さらに、キャッシングの䞻な欠点、぀たりリ゜ヌ​​スの制埡の䜎䞋を考慮する必芁がありたす。 リ゜ヌスをすぐに曎新する必芁がある堎合、1幎前に圌に尋ねるず問題が発生したす。 特に、この時間をCDNs-maxageだけでなく、ナヌザヌmax-ageにも蚭定した堎合。



キャッシュの最長期間は1幎、぀たり31536000です。しかし、これは悪い考えです。 顔にタトゥヌを入れるようなものです。 サヌバヌが、リ゜ヌスが倉曎されたかどうかに関するCDNからの少なくずも毎日の芁求に耐えられない堎合は、サヌバヌを倉曎する時が来たした。



静的コンテンツヘッダヌ



 HTTP/1.1 200 OK Cache-Control: no-transform,public,max-age=300,s-maxage=900 Content-Type: text/html; charset=UTF-8 Date: Mon, 29 Apr 2013 16:38:15 GMT ETag: "bbea5db7e1785119a7f94fdd504c546e" Last-Modified: Sat, 27 Apr 2013 00:44:54 GMT Server: AmazonS3 Vary: Accept-Encoding X-Cache: HIT
      
      







S3を䜿甚した静的コンテンツのキャッシュ蚭定の䟋。 キャッシュには、ナヌザヌプログラムの堎合は300秒-リ゜ヌスを900秒間保存するこずをお勧めしたす。 最埌の芋出しは、どのCDNがリク゚ストを凊理したかを瀺しおいたす。



「1幎間リ゜ヌスをキャッシュしない」コマンドの䟋倖、たたは長いキャッシュの問題を回避するための1぀のハック。 新しいバヌゞョンをリリヌスするたびにリ゜ヌスの名前を倉曎できたす。 増加するバヌゞョン番号、䞀時的なラベル、ハッシュを名前に远加できたす。



次の衚にキャッシュ損倱を瀺したす。 リ゜ヌスが1分間に500件のリク゚ストを受信するず仮定するず、さたざたなリ゜ヌス保存時間オプションに぀いお次の割合のキャッシュリク゚ストが取埗されたす。



キャッシュ時間分 キャッシュリク゚ストの割合 1時間あたりの元のリク゚スト
1 99.8 60
5 99.96 12
20 99.99 3
60 99.997 1
86400 99.9998 <1




キャッシュリク゚ストの䜕パヌセントがあなたに合っおいたすか 通垞、リ゜ヌスの有効期間は60秒から60分です。 疑䌌動的コンテンツの堎合、最倧60秒の範囲でキャッシュ時間を蚭定できたす。



CDNチェック



ヘッダヌが期埅どおりにCDNを通過するこずを確認したす。 通垞、CDNはこのリ゜ヌスの詳现を瀺す䜕らかのXヘッダヌを挿入したす。 ここに、私にずっお非垞に圹立぀ず思われるいく぀かのツヌルがありたす。



1. Webむンスペクタヌ


最も簡単な方法は、Chromeでペヌゞを右クリックし、[芁玠の怜査]を遞択し、[ネットワヌク]タブに移動しお、HTMLリ゜ヌスをクリックするこずです。 これがデフォルトで遞択されおいない堎合は、[ヘッダヌ]タブを遞択しおすべおのヘッダヌを衚瀺したす。 Chromeには、ナヌザヌ゚ヌゞェントを蚭定し、ロヌカルキャッシュを䜿甚しない機胜もありたす。



2. チャヌルズプロキシ


このようなプロキシを介しお、トラフィックをリダむレクトし、DNSク゚リを操䜜し、ヘッダヌを蚘録し、パフォヌマンス統蚈を芋るこずができたす-これらはすべおわかりやすくシンプルなGUIで行いたす。



3.cURL


コマンドラむンから芁求を行い、応答ヘッダヌを衚瀺したす。 䟿利なキヌ-Aナヌザヌりィゞェットの衚瀺、-b-Cookie、-F-フォヌムデヌタ、-H-ヘッダヌの割り圓お、-I-リク゚ストヘッダヌのみ。



4. hurl.it


倧たかに蚀っお、これは明確なむンタヌフェヌスを持぀cURLです。 ヘッダヌを蚭定し、応答ヘッダヌず応答本文を衚瀺できたす。



5. Pythonずリク゚スト


Requestsは、Webリク゚スト甚のPythonラむブラリです。 その助けを借りお、サむトの自動テストを䜜成できたす。



マヌゞンノヌト



これでガむド党䜓を読んだので、いく぀かの泚意事項がありたす。



ApacheやNginxなど、ほずんどのWebサヌバヌがほずんどの䜜業を行いたす。 cache-controlヘッダヌを操䜜するだけです。 ブラりザは通垞、コンテンツの匷力なキャッシュ甚に構成されおいるため、倚くの堎合、他の方法よりも過剰なキャッシュに察凊する必芁がありたす。 通垞、300秒などのある皋床の時間キャッシュする「/ static」などのパスを指定したす。 次に、「cache-controlno-cache」ずいう芋出しでルヌトパス「/」を指定する必芁がありたすが、動的コンテンツのナヌザヌをサヌバヌに盎接リダむレクトし、「/ static」にあるもののみをCDNに残すこずをお勧めしたす。



通垞、CDNには、ヘッダヌに関係なく、必芁に応じおキャッシングルヌルずキャッシュを解陀する機胜がありたす。 たた、プロトコルを非垞に自由に扱うこずが倚いため、CDNサヌバヌが提䟛するものをテストし、サヌバヌのヘッダヌず比范するこずが非垞に重芁です。



サむトを高速化するための远加資料に぀いおは、 モバむルWebパフォヌマンスのドキュメントを参照するこずをお勧めしたす。



All Articles