Cache-controlとjavaの構成
詳細
Webページのキャッシュは、HTTPメッセージヘッダの「Cache-control」によって制御されます.一般的な値はprivate、no-cache、max-age、must-revalidateなどで、デフォルトはprivateです.その役割は、(1)新しいウィンドウを開くcache-controlの値がprivate、no-cache、must-revalidateであることを指定すると、新しいウィンドウを開くとサーバに再アクセスします.一方、max-age値が指定されている場合、この値内の時間にサーバに再アクセスすることはありません.例えば、Cache-control:max-age=5は、このページにアクセスしてから5秒以内にサーバに再アクセスしないことを示します(2)アドレスバーで車を返す場合、値がprivateまたはmust-revalidate(ネット上では異なる)であれば、最初のアクセス時のみサーバにアクセスします.これからは訪問しません.値がno-cacheの場合、毎回アクセスします.値がmax-ageの場合、有効期限が切れるまでアクセスは繰り返しません.(3)後退ボタンを押すprivate,must-revalidate,max-ageの値であれば再アクセスせず,no-cacheの値であれば毎回アクセスを繰り返す(4)更新ボタンを押すとなぜか値が重複する
Cache-controlの値が「no-cache」であることを指定すると、このページにアクセスしてもインターネットの一時的な記事クリップにページバックアップは残りません.また、「Expires」の値を指定することでキャッシュにも影響します.たとえば、Expiresの値を過去の時間として指定すると、このネットワークにアクセスするときにアドレスバーを繰り返して戻ると、毎回繰り返しアクセスします.Expires:Fri、31 Dec 1999 16:00:00 GMT
ASPでは、ResponseオブジェクトのExpires、ExpiresAbsolute属性でExpires値を制御できます.ResponseオブジェクトのCacheControl属性によってCache-controlの値を制御します.たとえば、Response.ExpiresAbsolute=#2000-1-1#'は、サーバのローカル時間を使用する絶対的な有効期限を指定し、GMT時間Responseに自動的に変換する.Expires=20'は、現在の時間から何分経過したかを示す相対的な有効期限を分単位で指定します.Response.CacheControl="no-cache"Expiresの値は、Internetテンポラリフォルダでテンポラリファイルのプロパティを表示することによって表示されます.パケットのフォーマット:Cache-Control:cache-directive cache-directiveは、requestで使用可能:|"no-cache"|"no-cache"|"no-store"|"max-age"="delta-seconds|"max-stale"[="delta-seconds]|"min-fresh"="delta-seconds|"no-transform"|"only-if- cache-extension"responseで使用可能:|"public"|"priblic"|"pripriblic"|"pripripripripripriprin-prinsform"|"vate["="field-name|「no-cache」[=]field-name]|「no-store」|「no-transform」|「must-revalidate」|「proxy-revalidate」|「max-age」=「delta-seconds|「s-maxage」=「delta-seconds|「cache-extension」セクション説明:キャッシュ可能かどうかによってPublic指示応答が任意のキャッシュ領域にキャッシュされることができる.Privateは、単一のユーザに対する応答メッセージの全体または一部が共有キャッシュによって処理されないことを示す.これにより、サーバは、ユーザの応答メッセージの一部のみを記述することができ、この応答メッセージは他のユーザの要求に対して無効である.No-cacheは、要求または応答メッセージがキャッシュできないことを示す(HTTP/1.0はPragmaのno-cacheで置き換えられる)重要な情報が無意識に公開されることを防止するために、何によってno-storeがキャッシュされるかを示す.リクエストメッセージに送信すると、リクエストメッセージとレスポンスメッセージがキャッシュされません.キャッシュタイムアウトmax-ageに基づいて、クライアントが指定された時間(秒単位)未満の生存期間の応答を受信できることを示します.min-freshは、クライアントが現在の時間よりも小さい応答時間と指定された時間の応答を受信できることを示す.max-staleは、クライアントがタイムアウト期間を超えた応答メッセージを受信できることを示します.max-staleメッセージの値を指定すると、クライアントはタイムアウト指定値を超えた応答メッセージを受信できます.Expiresは存在時間を表し、クライアントがこの時間までにチェック(リクエスト)しないことを許可し、max-ageの効果と同等である.しかし同時に存在する場合はCache-Controlのmax-ageで上書きされる.フォーマット:Expires="Expires"":"HTTP-dateたとえばExpires:Thu,01 Dec 1994 16:00:00 GMT(GMT形式でなければならない)HTTPのMETAでexpiresとcache-controlを設定
Htmlコード
これによりクライアントからの要求が多くなり,Last-modified状態をチェックするものであるにもかかわらず,要求が多ければ閲覧速度に必ず影響を及ぼす.
ファイルにcacheを追加する場合はapacheのmod_を使用します.expireモジュール、書き方
ExpiresActive On
ExpiresDefault "access plus 1 days"
ExpiresActiveがOnに設定されていることを覚えています.私は最初からOnを設定していません.どのようにYSlowもキャッシュメカニズムが調べられないようです.このように追加するとデフォルトのすべてです.
個別のMIMEタイプについては、次のことができます.
ExpiresByType image/gif "access plus 5 hours 3 minutes"
Apache Module modを参照expires
また、ブラウザ上のリフレッシュをクリックすると、クライアントから送信されるリクエストのうちいずれもmax-age=0であり、validate操作を示し、サーバへの送信要求を送信する
cacheのチェックを要求し、cacheを更新し、一般的に304 Not Modifiedが得られ、変動していないことを示す.
プロジェクトでフィルタを使用してWebページのキャッシュを設定する
FilterConfigfc;
public
void
doFilter(ServletRequestreq,ServletResponseres, FilterChainchain)
throws
IOException,ServletException
{ HttpServletResponseresponse=(HttpServletResponse)res; //settheprovidedHTTPresponseparameters for(Enumeratione=fc.getInitParameterNames();e.hasMoreElements();) { StringheaderName=(String)e.nextElement(); response.addHeader(headerName,fc.getInitParameter(headerName)); } //passtherequest/responseon chain.doFilter(req,response); }
プロファイルの構成:
<
filter
>
<
filter-name
>
NoCache
filter-name
>
<
filter-class
>
filter.CacheFilter
filter-class
>
<
init-param
>
<
param-name
>
Cache-Control
param-name
>
<
param-value
>
no-cache,must-revalidate
param-value
>
init-param
>
filter
>
<
filter
>
<
filter-name
>
CacheForWeek
filter-name
>
<
filter-class
>
filter.CacheFilter
filter-class
>
<
init-param
>
<
param-name
>
Cache-Control
param-name
>
<
param-value
>
max-age=604800
param-value
>
init-param
>
filter
>
<
filter-mapping
>
<
filter-name
>
CacheForWeek
filter-name
>
<
url-pattern
>
*.js
url-pattern
>
filter-mapping
>
<
filter-mapping
>
<
filter-name
>
CacheForWeek
filter-name
>
<
url-pattern
>
*.css
url-pattern
>
filter-mapping
>
<
filter-mapping
>
<
filter-name
>
CacheForWeek
filter-name
>
<
url-pattern
>
*.gif
url-pattern
>
filter-mapping
>
上記の設定は1週間キャッシュされています.
Webページのキャッシュは、HTTPメッセージヘッダの「Cache-control」によって制御されます.一般的な値はprivate、no-cache、max-age、must-revalidateなどで、デフォルトはprivateです.その役割は、(1)新しいウィンドウを開くcache-controlの値がprivate、no-cache、must-revalidateであることを指定すると、新しいウィンドウを開くとサーバに再アクセスします.一方、max-age値が指定されている場合、この値内の時間にサーバに再アクセスすることはありません.例えば、Cache-control:max-age=5は、このページにアクセスしてから5秒以内にサーバに再アクセスしないことを示します(2)アドレスバーで車を返す場合、値がprivateまたはmust-revalidate(ネット上では異なる)であれば、最初のアクセス時のみサーバにアクセスします.これからは訪問しません.値がno-cacheの場合、毎回アクセスします.値がmax-ageの場合、有効期限が切れるまでアクセスは繰り返しません.(3)後退ボタンを押すprivate,must-revalidate,max-ageの値であれば再アクセスせず,no-cacheの値であれば毎回アクセスを繰り返す(4)更新ボタンを押すとなぜか値が重複する
Cache-controlの値が「no-cache」であることを指定すると、このページにアクセスしてもインターネットの一時的な記事クリップにページバックアップは残りません.また、「Expires」の値を指定することでキャッシュにも影響します.たとえば、Expiresの値を過去の時間として指定すると、このネットワークにアクセスするときにアドレスバーを繰り返して戻ると、毎回繰り返しアクセスします.Expires:Fri、31 Dec 1999 16:00:00 GMT
ASPでは、ResponseオブジェクトのExpires、ExpiresAbsolute属性でExpires値を制御できます.ResponseオブジェクトのCacheControl属性によってCache-controlの値を制御します.たとえば、Response.ExpiresAbsolute=#2000-1-1#'は、サーバのローカル時間を使用する絶対的な有効期限を指定し、GMT時間Responseに自動的に変換する.Expires=20'は、現在の時間から何分経過したかを示す相対的な有効期限を分単位で指定します.Response.CacheControl="no-cache"Expiresの値は、Internetテンポラリフォルダでテンポラリファイルのプロパティを表示することによって表示されます.パケットのフォーマット:Cache-Control:cache-directive cache-directiveは、requestで使用可能:|"no-cache"|"no-cache"|"no-store"|"max-age"="delta-seconds|"max-stale"[="delta-seconds]|"min-fresh"="delta-seconds|"no-transform"|"only-if- cache-extension"responseで使用可能:|"public"|"priblic"|"pripriblic"|"pripripripripripriprin-prinsform"|"vate["="field-name|「no-cache」[=]field-name]|「no-store」|「no-transform」|「must-revalidate」|「proxy-revalidate」|「max-age」=「delta-seconds|「s-maxage」=「delta-seconds|「cache-extension」セクション説明:キャッシュ可能かどうかによってPublic指示応答が任意のキャッシュ領域にキャッシュされることができる.Privateは、単一のユーザに対する応答メッセージの全体または一部が共有キャッシュによって処理されないことを示す.これにより、サーバは、ユーザの応答メッセージの一部のみを記述することができ、この応答メッセージは他のユーザの要求に対して無効である.No-cacheは、要求または応答メッセージがキャッシュできないことを示す(HTTP/1.0はPragmaのno-cacheで置き換えられる)重要な情報が無意識に公開されることを防止するために、何によってno-storeがキャッシュされるかを示す.リクエストメッセージに送信すると、リクエストメッセージとレスポンスメッセージがキャッシュされません.キャッシュタイムアウトmax-ageに基づいて、クライアントが指定された時間(秒単位)未満の生存期間の応答を受信できることを示します.min-freshは、クライアントが現在の時間よりも小さい応答時間と指定された時間の応答を受信できることを示す.max-staleは、クライアントがタイムアウト期間を超えた応答メッセージを受信できることを示します.max-staleメッセージの値を指定すると、クライアントはタイムアウト指定値を超えた応答メッセージを受信できます.Expiresは存在時間を表し、クライアントがこの時間までにチェック(リクエスト)しないことを許可し、max-ageの効果と同等である.しかし同時に存在する場合はCache-Controlのmax-ageで上書きされる.フォーマット:Expires="Expires"":"HTTP-dateたとえばExpires:Thu,01 Dec 1994 16:00:00 GMT(GMT形式でなければならない)HTTPのMETAでexpiresとcache-controlを設定
Htmlコード
Cache-Control" content="max-age=7200" /> Expires" content="Mon, 20 Jul 2009 23:00:00 GMT" />
上記の設定は例にすぎず、実際にその1つを使用すればよい.このように書くと、そのページにのみ有効であり、ページ内の画像やその他のリクエストには無効であり、cacheは一切行われません.これによりクライアントからの要求が多くなり,Last-modified状態をチェックするものであるにもかかわらず,要求が多ければ閲覧速度に必ず影響を及ぼす.
ファイルにcacheを追加する場合はapacheのmod_を使用します.expireモジュール、書き方
ExpiresActive On
ExpiresDefault "access plus 1 days"
ExpiresActiveがOnに設定されていることを覚えています.私は最初からOnを設定していません.どのようにYSlowもキャッシュメカニズムが調べられないようです.このように追加するとデフォルトのすべてです.
個別のMIMEタイプについては、次のことができます.
ExpiresByType image/gif "access plus 5 hours 3 minutes"
Apache Module modを参照expires
また、ブラウザ上のリフレッシュをクリックすると、クライアントから送信されるリクエストのうちいずれもmax-age=0であり、validate操作を示し、サーバへの送信要求を送信する
cacheのチェックを要求し、cacheを更新し、一般的に304 Not Modifiedが得られ、変動していないことを示す.
プロジェクトでフィルタを使用してWebページのキャッシュを設定する
FilterConfigfc;
public
void
doFilter(ServletRequestreq,ServletResponseres, FilterChainchain)
throws
IOException,ServletException
{ HttpServletResponseresponse=(HttpServletResponse)res; //settheprovidedHTTPresponseparameters for(Enumeratione=fc.getInitParameterNames();e.hasMoreElements();) { StringheaderName=(String)e.nextElement(); response.addHeader(headerName,fc.getInitParameter(headerName)); } //passtherequest/responseon chain.doFilter(req,response); }
プロファイルの構成:
<
filter
>
<
filter-name
>
NoCache
filter-name
>
<
filter-class
>
filter.CacheFilter
filter-class
>
<
init-param
>
<
param-name
>
Cache-Control
param-name
>
<
param-value
>
no-cache,must-revalidate
param-value
>
init-param
>
filter
>
<
filter
>
<
filter-name
>
CacheForWeek
filter-name
>
<
filter-class
>
filter.CacheFilter
filter-class
>
<
init-param
>
<
param-name
>
Cache-Control
param-name
>
<
param-value
>
max-age=604800
param-value
>
init-param
>
filter
>
<
filter-mapping
>
<
filter-name
>
CacheForWeek
filter-name
>
<
url-pattern
>
*.js
url-pattern
>
filter-mapping
>
<
filter-mapping
>
<
filter-name
>
CacheForWeek
filter-name
>
<
url-pattern
>
*.css
url-pattern
>
filter-mapping
>
<
filter-mapping
>
<
filter-name
>
CacheForWeek
filter-name
>
<
url-pattern
>
*.gif
url-pattern
>
filter-mapping
>
上記の設定は1週間キャッシュされています.