gpt4 book ai didi

javascript - 我怎样才能强制客户重新下载我的网站?

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:15 25 4
gpt4 key购买 nike

我正在使用 github.com/gorilla/mux 路由器用 Go 编写一个 Web 服务器。我的程序检查客户端是否有一个名为“名称”的 cookie,并基于此提供两个文件之一。这是处理函数:

func indexHandler(w http.ResponseWriter, r *http.Request) {
if name, err := r.Cookie("name"); err == nil && name.Value != "" {
http.ServeFile(w, r, "static/messager.html")
} else {
http.ServeFile(w, r, "static/index.html")
}
}

在 Firefox 上测试这个,我加载了我的网站,它正确地提供了 index.html 因为我没有设置 cookie。在 index.html 中,有一个表单可以设置 cookie 并在提交时重新加载页面。

这就是问题所在。页面重新加载,但由于缓存 index.html 仍显示在浏览器中(尽管服务器实际服务 messager.html - 我添加了调试日志。)我可以多次手动重新加载页面,没有任何区别,但一旦我进行硬刷新,它就会工作并显示 messager.html

这似乎只发生在 Firefox 上(我测试过 Safari、Edge 和 Firefox)。关于如何强制浏览器显示正确页面的任何建议?

最佳答案

http.ServeFile 发送 Last-Modified header (值设置为文件的 mtime),并且没有 Cache-Control header 。在这种情况下,浏览器将实现试探法来确定是否可以缓存响应以及缓存多长时间。

要指示客户端不要缓存响应,请发送 Cache-Control header你自己:

func indexHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Cache-Control", "max-age=0")

if name, err := r.Cookie("name"); err == nil && name.Value != "" {
http.ServeFile(w, r, "static/messager.html")
} else {
http.ServeFile(w, r, "static/index.html")
}
}

注意:Cache-Control header 确实不直观。例如,有一个名为“no-cache”的值,但这实际上不会导致客户端不缓存响应。仔细阅读文档以获得您想要的效果。

关于javascript - 我怎样才能强制客户重新下载我的网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50047740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com