Задать вопрос
@blecked88

Почему не кэшируются страницы на клиенте?

У меня есть очень простой пример сервера на Go, где я пытаюсь заставить браузер кэшировать страницу

package main

import (
	"fmt"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Println("handle")
	w.Header().Set("Cache-Control", "public, max-age=31536000, immutable")
	w.Write([]byte("<html>ТЕСТ</html>"))
}

func main() {
	http.HandleFunc("/", handler)
	http.ListenAndServe(":8080", nil)
}


Но при последовательной отправке запросов получаю такие ответы

HTTP/1.1 200 OK
Cache-Control: public, max-age=31536000, immutable
Date: Tue, 22 Apr 2025 22:29:21 GMT
Content-Length: 21
Content-Type: text/html; charset=utf-8

HTTP/1.1 200 OK
Cache-Control: public, max-age=31536000, immutable
Date: Tue, 22 Apr 2025 22:29:26 GMT
Content-Length: 21
Content-Type: text/html; charset=utf-8

HTTP/1.1 200 OK
Cache-Control: public, max-age=31536000, immutable
Date: Tue, 22 Apr 2025 22:29:27 GMT
Content-Length: 21
Content-Type: text/html; charset=utf-8

т.е. Date меняется, кэширования нет. В браузере (firefox) также нет пометки о том, что страничка взята из кэша.
Какие только я не пробовал заголовки, что только не делал - не кэшируется и все страница в браузере
  • Вопрос задан
  • 36 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Заголовком "Date:" вы указываете локальное время сервера, от которого браузер рассчитывает свои сроки.

А где в ответе сервера заголовок "Last-Modified:" именно этой страницы? Ну или "E-Tag:" от неё-же? Нет их.

После добавления заголовка(ов) нужно смотреть уже запросы, что бы в них был заголовок "If-Modified-Since:" с датой из "Last-Modified:", ну или "If-None-Match:" с содержимым "E-Tag:" предыдущего ответа.

Вот тогда и присматривайтесь к 304 Not Modified.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы