goのコアでhttpパッケージに関する問題が発生しました。レスポンス本文のContent-Lengthは正しいものの、ファイルの内容はキャッシュされているようです。ここでデモするには、私が書いているアプリケーションの簡略版があります。http.FileServerファイルをキャッシュして編集後に古いバージョンを提供します
package main
import (
"fmt"
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir("./www/")))
err := http.ListenAndServe(":8080", nil)
if err != nil {
fmt.Println(err)
}
}
は、今、私たちは非常に単純なHTMLページを持っていると仮定します
<!doctype html>
<html>
<body>
<p>Hello there</p>
</body>
</html>
私が提示するブラウザに行くプログラムやアクセスhttp://localhost:8080
を実行します。
Hello there
応答を確認しますヘッダーは次のとおりです。
Status Code:200 OK
Accept-Ranges:bytes
Content-Length:68
Content-Type:text/html; charset=utf-8
Date:Fri, 20 Dec 2013 10:04:03 GMT
Last-Modified:Fri, 20 Dec 2013 10:03:32 GMT
<p>
タグにHello there everyone
が含まれるようにhtmlファイルを編集し、ページをリロードします。私は
Status Code:200 OK
Accept-Ranges:bytes
Content-Length:77
Content-Type:text/html; charset=utf-8
Date:Fri, 20 Dec 2013 10:04:34 GMT
Last-Modified:Fri, 20 Dec 2013 10:04:14 GMT
だからContent-Length
が変更されただけでなく、最後に変更はなく、実際のファイルの内容がhttp.FileServerハンドラによって配信取得
Hello there
が再び応答ヘッダを見て:私は、次を得ます。この問題は、プログラムを終了してgo run src/.../main.go
を行っても発生します。明らかにキャッシュされたバージョンのファイルをクリアするために今まで見つかった唯一の方法は、プログラムが実行されているマシンを再起動することです。
私は次のことを試してみました:
- 勝利/ Ubuntuの/ OSX 10.8.5
- が務めたファイルかどうかを確認するためにgolang.org/srcの機能/インターフェースの連鎖を通って行く上でプログラムを実行しますどこのディスクにもキャッシュされています
これについてのお手伝いをさせていただきます。
Webブラウザまたはコマンドラインツールを使用していますか? – Javier
入力いただきありがとうございます、コメントをお読みください。私は、いくつかのWebブラウザ、コマンドラインツール、Windows、Linux、Mac上でgoサーバを実行することで動作を再現しました。 – onmylemon
このバージョンのgo go go2.2 darwin/amd64を使用して問題を再現できませんでした。 – Javier