Проблемы с пакетом http в ядре go. Похоже, что содержимое файла кэшируется, хотя длина содержимого в теле ответа правильная. Чтобы продемонстрировать здесь, это упрощенная версия приложения, которое я пишу.
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>
Я запускаю программу go и получаю доступ к 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
Теперь я редактирую html файл, поэтому тег <p>
содержит Hello there everyone
и перезагружает страницу. Я получаю следующее:
Hello there
Снова глядя на заголовки ответов, я получаю
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. Эта проблема возникает даже после закрытия программы и выполнения go run src/.../main.go
. Единственный способ, которым я нашел, чтобы очистить, по-видимому, кэшированную версию файла, - перезагрузить компьютер, на котором работает программа.
Я пробовал следующее:
- Выполнение программы по win/ubuntu/osx 10.8.5
- Переходя через цепочку функций/интерфейсов на golang.org/src, чтобы проверить, сохранен ли кеш файл на диске в любом месте
Любая помощь с этим будет очень оценена.