我遇到了一些奇怪的ExpressJS行为。在对我的基于node.js/express的API URL进行第二次请求时,它总是返回304未修改的响应代码给IE浏览器,而其他浏览器则会得到200(Chrome/FF)。问题是,即使内容实际上已更改,它也会返回304。我尝试搜索并找不到有关此主题的任何信息。此外,我尝试查找IE和Chrome的请求标头之间的差异,并且没有看到可能导致此问题的任何标头。将不胜感激任何帮助。
我必须补充说明,连接通过SSL进行,以防它有影响。
我遇到了一些奇怪的ExpressJS行为。在对我的基于node.js/express的API URL进行第二次请求时,它总是返回304未修改的响应代码给IE浏览器,而其他浏览器则会得到200(Chrome/FF)。问题是,即使内容实际上已更改,它也会返回304。我尝试搜索并找不到有关此主题的任何信息。此外,我尝试查找IE和Chrome的请求标头之间的差异,并且没有看到可能导致此问题的任何标头。将不胜感激任何帮助。
我必须补充说明,连接通过SSL进行,以防它有影响。
res.setHeader("Expires", "-1");
res.setHeader("Cache-Control", "must-revalidate, private");
我发现有同样的问题,经过大量搜索,实际上这个问题源于IE对ajax get请求进行了愚蠢而激进的缓存。事实上,当你看到304状态码时,实际的请求从未到达服务器,而是IE直接从它的缓存中返回最新数据。这是微软预期的行为,因此只有一些解决方法。
我推荐的解决方法是,在每个ajax get请求中添加一个无用的查询参数,其中包含当前时间信息。这样会强制IE始终从服务器检索。好处是,如果你使用jQuery,你可以自动将其配置为:
$.ajaxSetup({cache:false})
另一种解决方法是使用POST请求而不是GET,但这并非总是可行的。
好的,我通过添加Cache-Control头来解决了它。