Webブラウザでどのようなアクションを起こすか、標準的なものはありますか?
IE6とFirefox 2.xで実験したことがありますが、F5のリフレッシュでは、If-Modified-Since
ヘッダーを持つHTTPリクエストがサーバーに送信されますが、Ctrl + F5では、そのようなヘッダーはありませんでした。私の理解では、F5はキャッシュされたコンテンツを可能な限り利用しようとするのに対し、Ctrl + F5はキャッシュされたコンテンツをすべて放棄し、すべてのコンテンツを再びサーバーから取得することを意図しています。
しかし、今日、いくつかの最新ブラウザ(Chrome、IE8)では、この方法では動作しなくなっていることに気づきました。双方とも、If-Modified-Since
ヘッダーを送信しています。
では、これはどのように機能するのでしょうか。また、(標準規格がないとすれば)主要なブラウザでは、これらのリフレッシュ機能の実装方法がどのように異なるのでしょうか。
ブラウザ次第ではありますが、似たような挙動をします。
FF、IE7、Opera、Chromeをテストしました。
F5は通常、ページが変更された場合のみ更新します。ブラウザは通常、すべての種類のキャッシュをできる限り使用しようとし、リクエストに "If-modified-since"ヘッダを追加します。Operaの場合は、"Cache-Control: no-cache"を送信することで異なります。
また、IE7では、キャッシュを無視して強制的に更新を行うために、"kbd>CTRL-F5が使用されます。IE7は"Cache-Control: no-cache"を追加し、FFは"Pragma: no-cache"を追加しています。Chromeは通常の"If-modified-since"を行い、Operaはそのキーを無視します。
私の記憶が正しければ、Netscapeが最初にキャッシュコントロールのサポートを追加したのは、"Pragma.No-cache"を追加したブラウザでした。No-cache"を追加してキャッシュコントロールをサポートしたのはNetscapeでした。
編集:表を更新
下の表は、(Joel Coehoornのリクエストにより)ブラウザの更新ボタンがクリックされたときの情報と、"max-age=0" Cache-control-headerの情報を更新したものです。
2010年9月27日更新表。
┌────────────┬───────────────────────────────────────────────┐
│ UPDATED │ Firefox 3.x │
│27 SEP 2010 │ ┌────────────────────────────────────────────┤
│ │ │ MSIE 8, 7 │
│ Version 3 │ │ ┌─────────────────────────────────────────┤
│ │ │ │ Chrome 6.0 │
│ │ │ │ ┌──────────────────────────────────────┤
│ │ │ │ │ Chrome 1.0 │
│ │ │ │ │ ┌───────────────────────────────────┤
│ │ │ │ │ │ Opera 10, 9 │
│ │ │ │ │ │ ┌────────────────────────────────┤
│ │ │ │ │ │ │ │
├────────────┼──┼──┼──┼──┼──┼────────────────────────────────┤
│ F5│IM│I │IM│IM│C │ │
│ SHIFT-F5│- │- │CP│IM│- │ Legend: │
│ CTRL-F5│CP│C │CP│IM│- │ I = "If-Modified-Since" │
│ ALT-F5│- │- │- │- │*2│ P = "Pragma: No-cache" │
│ ALTGR-F5│- │I │- │- │- │ C = "Cache-Control: no-cache" │
├────────────┼──┼──┼──┼──┼──┤ M = "Cache-Control: max-age=0" │
│ CTRL-R│IM│I │IM│IM│C │ - = ignored │
│CTRL-SHIFT-R│CP│- │CP│- │- │ │
├────────────┼──┼──┼──┼──┼──┤ │
│ Click│IM│I │IM│IM│C │ With 'click' I refer to a │
│ Shift-Click│CP│I │CP│IM│C │ mouse click on the browsers │
│ Ctrl-Click│*1│C │CP│IM│C │ refresh-icon. │
│ Alt-Click│IM│I │IM│IM│C │ │
│ AltGr-Click│IM│I │- │IM│- │ │
└────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘
テストされたバージョン。
注意事項
1.バージョン3.0.6ではIとCを送信していますが、3.1.6では新しいタブでページを開きます。 I"のみで通常のリクエストを行います。
2.バージョン10.62は何もしません。9.61は、私の古いテーブルにタイプミスがなければ、Cをするかもしれません。
Chrome 6.0.472についての注意点。強制リロード(CTRL-F5)を行うと、常に強制リロードを行うようにURLが内部的にマークされているように動作します。このフラグは、アドレスバーに移動してエンターキーを押すとクリアされます。
一般的には
F5は、キャッシュからページを読み込む可能性があるため、コンテンツが変更されていても同じページが表示されることがあります。しかし、Ctrl-F5は、キャッシュを強制的に更新するため、コンテンツが変更されても新しいコンテンツが表示されることが保証されます。
ユーザーがF5を押すと、新しいリクエストがウェブサーバーに送信され、そのリクエストに対するレスポンスも取得されます。しかし、レスポンシブ・ヘッダーが解析されると、ブラウザのキャッシュにある必要な情報をチェックします。キャッシュ内の必要な情報が期限切れになっていなければ、その情報はキャッシュ内から復元されます。
ユーザーがCTRL-F5をクリックした場合も、新しいリクエストがWebサーバーに送信され、レスポンスが得られます。しかし、今回のレスポンセスヘッダーのParsedでは、キャッシュの中の必要な情報をチェックせず、すべての更新された情報をサーバーからのみ取得しています。