表达返回304用于IE重复请求

bbb*_*oon 11 internet-explorer node.js express

我遇到了一些ExpressJS的奇怪行为.在对我的node.js/express基于API的URL的第二次请求时,它总是向IE返回304 Not Modified响应代码.其他浏览器获得200(Chrome/FF).问题是,即使内容实际已被更改,它也会返回304.我试图搜索,但在这个主题上找不到任何东西.此外,我试图找到IE和Chrome的请求标头的差异,并可以看到任何可能导致这种情况的标头.任何帮助将不胜感激.

我必须通过SSL添加连接,以防万一

Zac*_*tes 6

Cache-Control标头一种解决方法.该错误是在Internet Explorer中对标头的HTTP 1.1规范的解释.

我把它添加到我的路由处理程序,它解决了这个问题.你还需要一个Last-ModifiedETag标题,但快递已经发送给我了.

res.setHeader("Expires", "-1");
res.setHeader("Cache-Control", "must-revalidate, private");
Run Code Online (Sandbox Code Playgroud)

请参阅:使IE缓存资源,但始终重新验证


Ste*_*fan 5

有同样的问题我看了很多,事实上,问题来自IE的ajax get请求的愚蠢积极缓存.实际上,当您看到304时,实际请求永远不会到达服务器,但IE会使用其缓存中的最新数据进行响应.这是MS的预期行为,因此只有解决方法.

我首选的是为每个ajax get请求附加一个包含当前时间的无用查询参数.它将强制IE始终从服务器检索.好的部分是如果你使用jQuery,你可以自动配置它

$.ajaxSetup({cache:false})
Run Code Online (Sandbox Code Playgroud)

另一个解决方法是使用POST请求而不是GET,但这并不总是一个选项.


bbb*_*oon 3

好吧,我设法通过添加 Cache-Control 标头来修复它