web-dev-qa-db-ja.com

キャッシュからではなく、サーバーから毎回index.htmlをロードします

特定のサーバーでホストされているWebページindex.htmlがあります。私はexample.comexample.com/index.htmlに向けました。したがって、index.htmlで変更を加えて保存し、example.comを開こうとしても、変更は反映されません。 Webページがキャッシュされている理由。

次に、ページを手動で更新します。キャッシュからではなく、新しいコピーが読み込まれるため、正常に機能します。しかし、クライアントにそうするように依頼することはできません。彼らはすべてが完璧であることを望んでいます。だから私の質問は、キャッシュからではなくサーバーから毎回ファイルをロードする方法についてのトリックやテクニックがありますか?

追伸:CSS、JS、画像ファイルのトリック、つまり?v=1の追加は知っていますが、index.htmlでそれを行う方法はわかりません。

任意の助けをいただければ幸いです。ありがとう!

42
Pulkit Mittal

これで:

<meta http-equiv="expires" content="0">

コンテンツを「0」に設定すると、ブラウザは常にWebサーバーからページをロードします。

45
doniyor

メタタグは私にはうまくいきませんでした。フィルターまたはコントローラーを実装するJavaクラスからヘッダーを設定しました。それが機能しました。ここにコードがあります

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0
httpResponse.setDateHeader("Expires", 0); // Proxies.
8
user3979672

2018年の時点で利用できる最も信頼できる方法は2つだけです

1)**<meta http-equiv="expires" content="0">**このメタタグを使用しますが、ブラウザでWebページが処理されるとすぐにこのタグがページのすべてのキャッシュを破棄するため、注意してください。

2)各ページ要求に対してサーバーで一意のIDを生成し、?を使用してHTMLドキュメント内のすべてのファイル名の最後にこのIDを追加します毎回サーバーからロードする必要がある画像、ドキュメント、css/jsファイル、ビデオなどに一意のIDを追加する前。たとえば、<img src="images/profile223.jpg" alt="profile picture">のようなHTMLタグがある場合、サーバー側でこのecho '<img src="images/profile223.jpg?'.$uniqueid.'"" alt="profile picture">';のようなファイル名の最後に一意のIDを追加します。この例ではphpを使用していますが、任意の言語で一意のIDを生成できます。 Google、Facebook、Microsoft、Twitterなどのすべての大企業は、最も効果的な方法であり、ログインセッションIDなどのユーザーブラウザーに保存するキャッシュデータに影響しないため、この手法を使用します。この手法はブラウザ間で互換性があり、IE、Firefox、Chrome、Safari、Operaの古いバージョンをサポートしています。同じ手法を使用して、URLの末尾に一意のIDを追加できます。

4
Sam

以下の方法を試してみてください。私にとってはうまくいきました。

.htaccessファイルに以下のコード行を追加してください。

<IfModule mod_headers.c>

    <FilesMatch "\.(html|php)$">
        Header set Cache-Control "no-cache, no-store, must-revalidate"
        Header set Pragma "no-cache"
        Header set Expires 0
    </FilesMatch>

    <FilesMatch "\.(ico|pdf|jpg|png|gif|js|css)$">
        Header set Cache-Control "max-age=172800, public, must-revalidate"
    </FilesMatch>

</IfModule>

上記のコードを使用すると、ブラウザは.htmlファイルをキャッシュしません。

ファイルに追加のヘッダーを送信して、クライアント(ブラウザー)にファイルをキャッシュしてはならないことを通知できます。 Apacheを入手した場合は、 mod_expires をご覧ください。 PHPなどのサーバー側スクリプト言語を使用している場合は、それを使用して解決することもできます。

1
GolezTrol

私は自分のウェブサイトでこの問題に遭遇しました。 URLにq = ''を追加します

http://yoururl.com/somelinks?q=fill_with_random_number

私にとっては、それは動作します

1
ahr