トップ  > メモ一覧  > カテゴリ「キャッシュ」の絞り込み結果 : 7件

7件中 1 〜 7 表示  1 

No.3944【引用】データ属性による分類とデータ保存場所一覧

データ属性による分類とデータ保存場所一覧
http://yumewaza.yumemi.co.jp/img/postfile/data_kind.html

引用元

更新:2011/07/28 10:30 カテゴリ: web開発  > キャッシュ ▲トップ

No.1216 キャッシュについてのまとめ

■キャッシュの分類


キャッシュには2種類ある

  • サーバ側のキャッシュ(Smarty・function_cacheなど)
  • クライアント側のキャッシュ
    • ブラウザキャッシュ
    • Proxyサーバ

 

  • 今回の問題はクライアント側のキャッシュ

HTTPヘッダのキャッシュに関する要素


  • リクエスト用
    • If-Modified-Since(⇔Last-Modified)
      • 日時を指定する。指定した日時より新しいコンテンツの場合のみデータを返却するようにサーバに指示する。
      • ローカルキャッシュの最新確認に使用される
    • If-None-Match(⇔Etag)
      • 指定したエンティティタグに一致しない場合のみコンテンツを返却するようにサーバに指示する。
      • 最新情報の取得や競合の排除のために指定される
  • レスポンス用
    • Expires[有効期限]
      • コンテンツの有効期限を示す
    • Last-Modified[最終更新日時](⇔If-Modified-Since)
      • コンテンツの最終更新時刻を示す。If-Modified-Sinceと対で使用される
    • ETag(⇔If-None-Match)
      • コンテンツの全体や一部を特定する固有値を示す。If-None-Matchと対で使用される
      • apacheでやる。PHPでもできる。OpenPNEの機能では現状やってない
  • リクエスト/レスポンス共通
    • Pragma(⇒HTML1.0)
      • 関連するクライアント/Proxy/サーバそれぞれに認識させるための特殊な追加情報を記述する。
      • 例えば、「no-cache」を指定することで無条件に最新リソースを転送させることができる
  • Cache-Control[キャッシュコントロール](⇒HTML1.1)
    • キャッシュのコントロールに関する指示や情報を示す

Cache-Control について


以下の設定が可能

  • none  :何もしない(キャッシュに関するヘッダを出力しない)
  • no_cache :クライアント/プロキシキャッシュ不許可
  • private :クライアント許可/プロキシ不許可
  • private_no_expire:クライアント許可/プロキシ不許可 ※Expiresヘッダ(有効期限)を出力しない
  • public :クライアント許可/プロキシキャッシュ許可

■キャッシュの流れ


サーバへリクエストするかどうか


処理の主体:ブラウザ・Proxyサーバ

  • キャッシュの使用が許可されているコンテンツであり、かつ、クライアント側に有効なキャッシュがある場合 ⇒サーバへリクエストされない
  • キャッシュの使用が許可されていないコンテンツである、または、クライアント側に有効なキャッシュがない場合 ⇒サーバへリクエストされる

サーバへリクエストが到達した時の処理


処理の主体:webサーバ

  • If-Modified-SinceヘッダやIf?-None-Matchヘッダが付いていた場合、以下の処理を行う
    • コンテンツのタイムスタンプとIf-Modified-Sinceヘッダの時間を比較
    • コンテンツの全体や一部を特定する固有値(ETag)とIf-None-Match ヘッダの値を比較
  • 結果
    • コンテンツが更新されていればコンテンツを送信する
    • 更新されていなければ304 Not Modified をレスポンスとして返す。(レスポンスボディに実際のファイルを含まないヘッダだけのレスポンスなため、非常に軽量)

対策(クライアント側へキャッシュさせない)


  • レスポンスするコンテンツに、キャッシュの使用を許可しない情報(Cache-Control:no-cache)を付加する
  • レスポンスするコンテンツに、キャッシュを無効化する情報(Expires・Last-Modified)を付加する

■キャッシュを制御する方法


  1. HTTPヘッダによる制御
  2. METAタグによる制御(⇒Proxyには無効)

1. HTTPヘッダによる制御


◆PHPのheader()関数で


// 日付が過去
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

// 常に修正されている
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');

// HTTP/1.1
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);

// HTTP/1.0
header("Pragma: no-cache");

2. METAタグによる制御


◆<meta>タグで


<meta http-equiv="Pragma" content="no-cache">     ⇒HTML1.0の仕様への対応
<meta http-equiv="Cache-Control" content="no-cache">⇒HTML1.1の仕様への対応
<meta http-equiv="Expires" content="Thu, 01 Dec 1994 16:00:00 GMT">

Proxyのキャッシュについての注意点


METAタグは基本的にはブラウザのキャッシュを操作するためのものなので、Proxyのキャッシュは制御できない
(キャッシュされたコンテンツと一緒に保存されたHTTPヘッダ情報による制御は可能)

  • 確実にキャッシュをコントロールしたい場合には、HTTPヘッダとMETAタグの両方を使用するのがよい

■IEのブラウザキャッシュ設定(参考)


設定箇所


[ツール(T)]→[インターネットオプション(O)]→「全般」タブ→「インターネット一時ファイル[設定(S)]」

設定(4つ)


  • ページを表示するごとに確認する
    ページを開くごとにサーバへアクセスし、一時ファイルが最新かどうか確認をします。
    更新されていれば最新の状態を読み込みます。常に最新のページが表示されるので高速回線環境なら便利かもしれません。
    
  • Internet Explorerを起動するごとに確認する
      ブラウザを開いてから表示したページを再び開こうとした時はキャッシュを表示し、
      ブラウザを開く以前の一時ファイルとして保存されたページを開く際にはサーバにアクセスして確認します。
    
  • 自動的に確認する(⇒デフォルト)
     一定の間隔に従って、その間隔より以前に一時ファイルとして保存されたページはサーバにアクセスして確認し、
     以降に保存されたページは確認しません。通常はこの設定が便利です。
    
  • 確認しない
    一時ファイルのあるページを表示する時は、サーバにアクセスせず、一時ファイルのものを表示します。
    キャッシュを破棄しないとサーバへの問い合わせが行われません。
    

デフォルト値である「自動的に確認する」の確認する間隔の詳細は不明
http://support.microsoft.com/kb/263070/ja より抜粋↓

自動的に確認する (Internet Explorer 5 以降のみ) : [Internet Explorer を起動するごとに確認する] と同じですが、
このオプションでは Web ページの動作の特徴を認識するアルゴリズムが使用されます。
このオプションを使用すると、以前表示したことがあるページに戻ったときに、そのページが最後に表示されてから変更されたかどうかが、
通常は確認されません。

このオプションを選択すると、Internet Explorer の以前のセッションで表示したページや
前日以前に表示したことがあるページに戻ったときにのみ、コンテンツが更新されているかどうかが確認されます。
時間の経過と共に、あるページの画像が頻繁に変更されないと Internet Explorer が判断すると、そのページの画像を
確認する頻度は低くなります。 

 

引用元

更新:2009/07/26 00:00 カテゴリ: web開発  > キャッシュ ▲トップ

No.1187 ブラウザキャッシュ

◆HTTPレスポンス・ヘッダにてキャッシュをつかさどるもの
(1)Last-Modified(最終更新日時)
(2)Expires(有効期限)
(3)Cache-Control(キャッシュコントロール)

※参考:キHTTP/1.1仕様のRFC2616
その他:Etag

◆metaタグによる「キャッシュしない」
--------------
(1) <meta http-equiv="Pragma" content="no-cache">
(2) <meta http-equiv="Cache-Control" content="no-cache">
(3) <meta http-equiv="Expires" content="Thu, 01 Dec 1994 16:00:00 GMT">
--------------
(1)・・・HTML1.0の仕様への対応
(2)・・・HTML1.1の仕様への対応


◆IEの設定
デフォルトでは「自動的に確認する」になっている
⇒更新の確認ルールがよく分からない・IE起動時でさえみないっぽい
---------
抜粋
以前表示したページに戻った時、そのページが更新されているか通常は確認されませんが、Microsoftの説明(*2)では「Web ページの動作の特徴を認識するアルゴリズムが使用されます」とあります。項目順位から推測すると、確認頻度は「Internet Explorerを起動するごとに確認する」より低いと考えられます。デフォルトではこの設定になっていると思います。
---------

◆Ctrl+F5
強制的にキャッシュをみないでリクエストする

◆PHPでのヘッダー出力
// 日付が過去
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

// 常に修正されている
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');

// HTTP/1.1
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);

// HTTP/1.0
header("Pragma: no-cache");
◆キャッシュのステータス
none 何もしない(キャッシュに関するヘッダを出力しない)
nocache クライアント/プロキシキャッシュ不許可
private クライアント許可/プロキシ不許可
private_no_expire クライアント許可/プロキシ不許可
※Expiresヘッダ(有効期限)を出力しない
public クライアント許可/プロキシキャッシュ許可
個人的に調べたところですが、nocacheが一番安全っぽいですけど「キャッシュするんじゃないよ」というヘッダに従うかどうかはブラウザやプロキシの設定次第みたいです(汗)。
またieの「ページの有効期限...」もあります。

noneはpublicに近い状態で、キャッシュの有効期限について、たとえばieなら「自動的に確認する」となる模様。
だからprivate_no_expire(有効期限なしのキャッシュ)よりも上手に立ち回ってくれる感じです。

sslなどの暗号化されたページに関してはプロキシにキャッシュされたとしても問題ないものと思われます。
キャッシュが効いたほうが、リクエストが発生しないのでサーバにも優しいというのもあります。

ちなみにYahooは
普通のページはキャッシュが有効で
ログイン後のページは
Cache-Control: private
Pragma: no-cache
Expires: Thu, 05, Jan 1995 22:00:00 GMT
みたいになってました。

Pragma: no-cacheがプロキシに有効みたいで(といっても先に書いたように従わないプロキシもあるかも)、それでいてprivateを指定しているというなんとも変わった設定です。
プロキシになるべくキャッシュさせないという考えみたいです。
またなるべくブラウザの戻るを必要としないような遷移のさせかたになっているように感じます。


引用元

更新:2009/07/22 13:35 カテゴリ: web開発  > キャッシュ ▲トップ

No.1186【引用】ブラウザキャッシュでパフォーマンス向上

ブラウザキャッシュでパフォーマンス向上
―負荷分散装置の落とし穴に注意−

(株)NTTデータ
金子崇之
2003/5/10

本連載では、現場でのエンジニアの経験から得られた、アプリケーション・サーバをベースとしたWebシステム開発における注意点やヒントについて解説する。 巷のドキュメントではなかなか得られない貴重なノウハウが散りばめられている。読者の問題解決や今後システムを開発する際の参考として大いに活用していた...

引用元

更新:2009/07/22 13:24 カテゴリ: web開発  > キャッシュ ▲トップ

No.1189【引用】ETagを使ってキャッシュ制御(未解決)

ETag を使ってキャッシュ制御(未解決)
ってことで、ページの内容(ログイン/ログアウトのナビゲーション)が違うけど、日記の内容は同じ (Last-Modified が同じ) 場合にどうすればいいか。 Web を調べていたら「ETag」というものが使えそうだと気がついた。 ETag について Web ではあまり情報が見つからなかった( @IT や HTTP入門 や Studying HTTP くらい?)。 要はそのページを一意に特定するための ID みたいなもので、キャッシュ制御に利用するらしい。
キャッシュなら「Last-Modified」と「If-Modified-Since」の組み...

引用元

更新:2009/07/22 13:24 カテゴリ: web開発  > キャッシュ ▲トップ

No.1191【引用】IEのブラウザキャッシュ設定


インターネット・エクスプローラの場合、メニューから

[ツール(T)]→[インターネットオプション(O)]→「全般」タブ→「インターネット一時ファイル[設定(S)]」

4つの設定ができます。

ページを表示するごとに確認する
ページを開くごとにサーバへアクセスし、一時ファイルが最新かどうか確認をします。更新されていれば最新の状態を読み込みます。常に最新のページが表示されるので高速回線環境なら便利かもしれません。

Internet Explorerを起動するごとに確認す...

引用元

更新:2009/07/22 13:23 カテゴリ: web開発  > キャッシュ ▲トップ

No.1188【引用】プロキシキャッシュ対策

プロキシキャッシュ対策
プロキシキャッシュへのコンテンツ残留
ブラウザとWebサーバの間には、いくつかのキャッシュメカニズムが働いていることが多い。

プロキシサーバのキャッシュ──企業等LANを運用している多くの組織体ではLANからインターネットアクセスを行う際プロキシサーバを経由して行うことが多い
キャッシュサーバ─インターネットプロバイダの中には、会員のWebアクセスを円滑にする目的でキャッシュサーバを運用しているところがある

これらのキャッシュメカニズムは、ブラウザからのリク...

引用元

更新:2009/07/22 13:22 カテゴリ: web開発  > キャッシュ ▲トップ
7件中 1 〜 7 表示  1 

FuelPHP

Mac

web開発

プロマネ

マネタイズ

プレゼン

webサービス運用

webサービス

Linux

サーバ管理

MySQL

ソース・開発

svn・git

PHP

HTML・CSS

JavaScript

ツール, ライブラリ

ビジネス

テンプレート

負荷・チューニング

Windows

メール

メール・手紙文例

CodeIgniter

オブジェクト指向

UI・フロントエンド

cloud

マークアップ・テキスト

Flash

デザイン

DBその他

Ruby

PostgreSQL

ユーティリティ・ソフト

Firefox

ハードウェア

Google

symfony

OpenPNE全般

OpenPNE2

Hack(賢コツ)

OpenPNE3

リンク

個人開発

その他

未確認

KVS

ubuntu

Android

負荷試験

オープンソース

社会

便利ツール

マネー

Twig

食品宅配

WEB設計

オーディオ

一般常識

アプリ開発

サイトマップ

うずら技術ブログ

たませんSNS

rss2.0