Go の http.FileServer は、特定のファイル システムから静的ファイルを提供するように設計されており、効率的で便利な方法を提供します。 Web コンテンツをホストします。ただし、特定の状況によっては予期しないキャッシュ動作が発生し、古いファイルが提供される可能性があります。
このような問題の 1 つは、Virtual Box 共有フォルダーを使用して http.FileServer のファイルを保存するときに発生します。このシナリオでは、問題はホスト オペレーティング システムとゲスト オペレーティング システム間のこれらのファイルの同期アクセスに関連しています。
説明するために、次の例を考えてみましょう。
<code class="go">http.Handle("/", http.FileServer(http.Dir("./www/"))) err := http.ListenAndServe(":8080", nil) if err != nil { fmt.Println(err) }</code>
HTML の場合次のようなファイル:
<code class="html"><!doctype html> <html> <body> <p>Hello there</p> </body> </html></code>
最初に提供されるとき、コンテンツは正しく表示され、応答ヘッダーには適切なコンテンツの長さと最終変更タイムスタンプが表示されます。
ただし、HTML に変更を加えると、ファイルを保存してページをリロードしても、元のコンテンツは引き続き表示されます。これは、ホストとゲスト間の同期の問題により、変更されたファイルがオペレーティング システムによって適切にキャッシュされていないためです。この現象は、プログラムを終了して再起動した後でも発生します。
この問題の解決策は、http.FileServer のファイルをホストするときに Virtual Box 共有フォルダーの使用を避けることです。ファイルをゲスト オペレーティング システムに直接保存することで、同期の問題が解消され、ファイル サーバーがファイルを正しくキャッシュし、更新されたコンテンツを提供できるようになります。
以上がVirtual Box 共有フォルダーを使用すると、Go http.FileServer が古いファイルを提供するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。