http 패키지의 핵심 기능인 go에 문제가 있습니다. 응답 본문의 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 페이지가 있다고 가정
Hello there
응답을 확인 :
<!doctype html>
<html>
<body>
<p>Hello there</p>
</body>
</html>
내가 이동 프로그램과 브라우저에서 액세스 http://localhost:8080
실행을 제시 할 수 헤더 다음과 같이 볼 수 있습니다 :
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
을 수행 한 후에도 발생합니다. 지금까지 파일의 캐시 된 버전을 지우는 유일한 방법은 프로그램이 실행중인 컴퓨터를 재부팅하는 것입니다.
나는 다음과 같은 시도 : 함수의 체인을 통해가는 승리/우분투/OSX 10.8.5
- 실행 프로그램을/golang.org/src에 대한 인터페이스는 제공 파일이 있는지 확인하기 위해 어디서나 디스크에 캐시됩니다.
이 도움은 매우 감사하겠습니다.
는 웹 브라우저 또는 명령 줄 도구를 사용하고 있습니까 : 사용하여 같은 일을 할 수 firejail의 최신 버전으로
https://github.com/wader/disable_sendfile_vbox_linux
? – Javier
입력 해 주셔서 감사합니다. 의견을 읽어보십시오. 몇 가지 웹 브라우저, 명령 줄 도구 및 Windows, Linux 및 Mac에서 go 서버를 실행하여 동작을 복제했습니다. – onmylemon
이 버전의 go go go1.2 darwin/amd64를 사용하여 문제를 재현 할 수 없습니다. – Javier