web-dev-qa-db-ja.com

キャッシュが無効になっているにもかかわらず、サーバーがコードファイルの変更を無視するのはなぜですか?

ローカルホスト(Windows 7、Chrome v79.0.3945.130(64-bit))でhtml/jsコードをテストし、コード変更の約50%がブラウザーに反映されない(私はDev Tools/Sourcesでそれを見る)。
インターネットにはたくさんのアドバイスがありますが、どちらもうまくいかないようです:

  • リロードを右クリックして、「キャッシュを空にしてハードリロード」を選択します-30%の場合は役に立ちません。
  • Chrome開発ツールのネットワーク)タブでキャッシュを無効にします-役に立ちません。
  • ヘッダーに<meta http-equiv="Cache-control" content="no-cache">を追加-役に立たない。
  • <script src="common.js"></script><script src="common.js?blabla"></script>に置き換えます-ケースの60%で役立ちますが、すべての変更が非常に面倒な場合は、必ず行う必要があります。また、htmlの変更には対応していません。
  • ファイルを新しいファイル(index.htmlからindex2.htmlなど)にコピーし、コード内のファイル名を置き換えます-常に機能しますが、さらに面倒です。

コードをgithub.ioにコミットするときに発生するまったく同じ問題

サイトにコードの変更がすぐに反映されるようにしてください。


編集:index3.htmlファイルを作成し、「hello world」のみを配置しました。ブラウザでファイルを開きました。 「hello world2」に変更-ブラウザがコンテンツを更新しました。 「hello world3」に変更されました-複数のリロードおよび「キャッシュとハードリロードを空にした」後でも、ブラウザはまだ「hello world2」を表示していました。私は「hello world4」に変更しました-ブラウザはまだ「hello world2」を示していました。 4時間後、私は「hello world5」に変更しました-ブラウザーにはまだ「hello world2」が表示されています。このファイルは、基本的なメモ帳で編集しました。


Edit2:人々は私が使用しているサーバーを尋ね続けます。これは問題の一部のようです。残念ながら、私はそれを確認するために私が正確に何をする必要があるのか​​わかりません。ここに私がこれまでに見つけたすべてがあります:

  • inetpub/wwwrootディレクトリにhtmlとjsファイルを置き、index.htmlをブラウザーのhttp://localhost/で開きます。
  • Devs ToolsのMy Networkパネルは次のようになります: image link
  • サーバーのセットアップは非常に高速で、追加のソフトウェアをインストールする必要はありませんでした。つまりnode.jsを使用していません。
  • inetpub/wwwrootにiisstart.htmがあり、http://localhost/iisstart.htmを開くとIIS7と表示されています。
14
klm123

パラメータの使用は正しい方法です!ここでは、大きな変更でのみ変更するバージョン番号を手動で追加できます。デバッグの場合は、それをDate.time()に設定できます。これにより、<head>タグで、パラメーターが常に新しいため、キャッシュされたすべてのバージョンが強制的に上書きされます。 1:

< script type="text/javascript"> 
    var script = document.createElement('script'); 
    var version = Date.time();
    script.src = "common.js?v="+version; 
    document.head.appendChild(script) 
< /script>

お役に立てれば!

6
lehm.ro

Windows 7で実行されているIIS7 Windowsサーバーでは、コンテンツのキャッシュを防ぐために、web.configという構成ファイルの1つに変更を加える必要があります。 IIS 7以降の構成ファイルは%WinDir%\System32\Inetsrv\Config folderにあります。ここで、%WinDir%はWindowsをインストールしたフォルダーです(通常はC:/Windows))。

編集する前にweb.configファイルのバックアップコピーを作成し、ファイルに加えた変更によってファイルが破損した場合にロールバックできるようにします。

web.configファイルに次のコードを追加するだけで、index.htmlのキャッシュを防止できます。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <location path="index.html">
    <system.webServer>
      <httpProtocol>
        <customHeaders>
          <add name="Cache-Control" value="no-cache" />
        </customHeaders>
      </httpProtocol>
    </system.webServer>
  </location>

</configuration>

ここからweb.configファイルのファイルパスを取得: Windows Doc:Configuration Reference

上記のキャッシュの構成をここから取得: IISを介して提供される単一ページアプリケーションのHTMLファイルのキャッシュを無効にする方法

3
AndrewL64

私は同じ問題を抱えていましたが、これは私のチェックリストです:

  1. web.config(キャッシングとclientcache、カーネルキャッシュポリシーなど)または。htaccess(ヘッダーセットCache-Control)を確認します。
  2. ASPのような動的言語を使用している場合、PHP内部キャッシュ設定がある可能性があります。あるケースでは<%Response.Expires=1440%> ASPコードの多くの行内にあり、他のすべての設定を克服していました!phpでsession_cache_expireでも同じことができます。
  3. IISを使用している場合は、server> HTTP Response headersを確認して、個々のWebサイトについても同じようにキャッシュすることについて何もないことを確認しますサーバー名の下に表示されます。
  4. 小切手 http-equiv="Cache-control" htmlヘッダー内(このテストに合格しました!)。

最後に、上記のすべての状況で、チェックキャッシュを無効にするのチェックインnewtworkタブのChromeコンソールは常に、新しいバージョンのページですが、これはデバッグ目的でのみ有効であり、訪問者はそれを行いません。

1
Ali Sheikhpour

Chromeはこのことを行いますが、ファイルがあまり変更されていない場合、その意味がわからない場合は、「コンパイル済み」のキャッシュバージョンを使用します。 htmlの場合は、解析されたドンツリーを意味します。 JSプリコンパイル済みコードなど。

通常、これに対処する方法があり、多くのフレームワークは次のようにファイル名内でハッシュを使用します:main.md5hash.js、ファイル名を変更するとキャッシュが無効になるため。

次に、おそらくhtmlが更新されないままになります。そして明確にするために、私はわかりません、いつでもランダムなブロブでコメントを追加できます...日付のように。

0
Akxe

あなたの答えの更新に基づいて、私はあなたの問題が [〜#〜] iis [〜#〜] v7があなたのPCを使用していることによって引き起こされたと言いますメモリローカルハードドライブではなくキャッシュのためにHard reloadと他のすべてのメソッドが正しく動作しないようです。

私は3つの解決策を考えることができます:

1。 IISキャッシュの問題:を修正しています(IISを搭載したPCがないため、テストされていません)

  1. スタートメニューから管理ツールをクリックし、次にインターネットインフォメーションサービス(IIS)マネージャーをクリックします。 ( 画像 を参照)
  2. ツリー左側のビューで、アプリケーションを見つけます。
  3. 出力キャッシュメニュー項目を選択します。
  4. キャッシュルールの追加をクリックし、キャッシュを無効にするファイルextensionsを入力します。つまり、.aspx 、. css、.jsなど...(一度に1つでしょうか?)
  5. ここで、チェックを外すユーザーモードキャッシュまたはチェックすべてのキャッシュを禁止するこれは次のようになります。

enter image description here

ソリューションソース - IIS 7キャッシュについて詳細を読む


2。 IISのいくつかの代替案を使用するいくつかありますが、(私の経験に基づいて)推奨します [〜#〜] wamp [〜#〜] または [〜#〜] xampp [〜#〜] どちらもより良い開発「環境」を提供し、どちらもWindows 7をサポートします。また、 VSコードLive Server 拡張機能を使用できます。


。開発中にChromeを使用するIncognito モード。 (IIS7で機能するかどうかは不明です)

0
awran5

Google Chromeを使用する特定のケースでは、次のことを試してください。開発ツールを開き、[ネットワーク]タブに移動します。 [キャッシュを無効にする]チェックボックスをオンにして、ページを更新します。

注:これが機能するためには、Dev Toolsウィンドウを常に開いたままにする必要があります。

enter image description here

ただし、ページをハードリフレッシュすることなくユーザーに変更を伝達するには、頻繁に変更されるファイルの(参照したとおりに)各参照ファイルの最後にファイルバージョンを追加する必要があります。例えば:

<link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/stackoverflow/primary.css?v=20b379f72a37" >

末尾に追加されるv=20b379f72a37は、ファイルコンテンツの自動生成ファイルハッシュです。

0
Martin Shishkov

これはロングショットですが、どのようなエディター/ IDEを使用していますか?また、index.htmlに対してどのような編集を行っていますか?

ファイルを保存してロードしようとしたときに反映されないそのような編集の例をいくつか教えていただけますか?

問題の再現を試みたいのですが。人々が示唆していることから、問題はコード自体の中にあるようには見えません。それは環境問題だと思いますが、私の疑いを確認するためにあなたからより多くの情報が必要です。

0
foreza

これはおそらく本当にイライラさせられ、あなたが何か悪いことをしているようには聞こえません。

問題は、ブラウザと、呼び出しを行っているスクリプトファイルとの間で、何らかのキャッシングが行われていることです。

それが何であるかを判断するために、localhostのURLをどのように参照していますか?

例:

file://path/to/file.html
http://localhost/file.html
http://127.0.0.1/file.html
http://[machine's-hostname]/file.html
http://[custom-domain-defined-in-hosts-file]/file.html

file://path/to/file.htmlを実行している場合、これはWebサーバー/プロキシを参照していないことを意味します。 http://[something]/file.htmlの場合は、何らかのWebサーバーを実行しているため、それが原因である可能性があります。キャッシュをオフにできるような設定を探します。

Webサーバーを使用しておらず、文字通りWebサーバーなしでローカルのhtmlファイルを直接参照している場合は、ブラウザが原因であると考えられます。これが事実である場合、私は Martin Shishkov のようにブラウザのキャッシュをオフにすることをお勧めします。

0

HTMLメタで記述するのはブラウザに対する推奨事項であり、厳密な指示ではありません。ブラウザで厳密なキャッシュが有効になっている場合、これは役に立ちません。

ソリューションはよく説明されています: https://curtistimson.co.uk/post/front-end-dev/what-is-cache-busting/

サーバー側では、ファイル自体の最終更新日を含むバージョンをスクリプトに追加することを好みます。

<script src="/myScript.js?v=1579780745150"></script>

ここで、1579780745150はUnixタイムスタンプで、myScript.jsファイル自体を更新します。独自のファイルでのみ機能しますが、外部のファイルは必要ありません。ほとんどの場合、ファイル名にはバージョンがあります。

0