edge浏览器在只使用etag的情况下总是200 from cache

发布于 2022-09-03 08:17:55 字数 2001 浏览 20 评论 0

使用edge浏览器ajax访问一个url,返回一个json字符串。
服务器使用expressjs,默认设置,只添加了etag,返回的http header在调试工具里是这个样子的
图片描述

同样的url,chrome下是这样的
图片描述

补充火狐下的样子
图片描述

然后是使用js,console.log(xhr.getAllResponseHeaders())出来的结果
edge下图片描述
chrome下图片描述
火狐下图片描述

而request header是这样的
edge的图片描述
火狐的图片描述
chrome的图片描述

可以很不明显的看到edge没有if-none-match这一项,因为它坚持使用200 from cache,我只能删除cache才能让他访问服务器,所以edge的是第一次访问

现在的情况是,我需要通过js刷新这个url返回的json字符串,chrome和火狐都正常,不变的话就是304,变了就是200 OK,但是edge就是一定要200 from cache,并且可以看到node这里确实没有收到edge发来的请求,它直接就使用缓存了,很讨厌,大家知不知道有什么好的解决办法

ajax的代码是这样的

const AjaxGet = function( method, url, callback ){
    var xhr = new XMLHttpRequest()
    xhr.open(method, url, true)
    xhr.withCredentials = true
    xhr.send()

    xhr.onreadystatechange = function(){
        if((xhr.readyState == XMLHttpRequest.DONE) && (xhr.status == 200)){
            callback(JSON.parse(xhr.responseText))
        }
    }
}

ps.我觉得禁用etag应该不是个很好的主意,毕竟还是需要304的

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

多情出卖 2022-09-10 08:17:55

清理下缓存,然后在不修改服务端返回内容的情况下,前后两次在edge里访问同一个地址,然后截个图,信息包含完整点,至少包括:

  1. request header

  2. response header

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文