javascript - 当使用 ajax 方式进行登录状态检查时,Internet Explorer 会强制显示 304

标签 javascript http-status-code-304

我在为公司创建的演示网站中遇到了 IE 特定的 ajax 登录状态请求问题。

在每个 Internet Explorer 浏览器(7-9)中,都会出现此问题,而它在所有其他浏览器中都表现得很好:

成功登录后,用户将被重定向到触发登录状态请求的登录页面。

如果此登录状态请求返回的内容不是“1”,则页面将重定向回登录页面。

如果您跟踪开发人员工具中的流量,您会发现针对该特定状态检查的请求会导致 304 未修改(不应该发生),并且请求正文显示为空。 (它总是返回 0 或 1)...

对页面进行硬刷新(CTRL-F5)并检查该页面,仍然会导致浏览器出现 304 错误。

使用 fiddler 跟踪这些 304 表明网络上甚至没有对该登录状态 URL 的请求,浏览器本身正在假设 304,并且无法发送请求。

直接访问 url 时,响应始终是 200,并带有相应的 0 或 1,但是当使用 ajax 时,它通常是 304,并且永远不会通过网络发送,甚至从 304 确认服务器。

清除浏览器历史记录似乎对是否将 304 更改为 200 没有影响。

更奇怪的是,每 10 次左右的尝试,这实际上确实有效,请求返回 200 并有真正的响应,但更常见的是它返回 304 没有响应,并且该值不等于 1缓存的值(甚至不确定它等于什么?!)

我已更改对此请求的响应,以由 php 生成以下 header :

header('Cache-Control: no-cache');
header('Pragma: no-cache');
header('Expires: -1');

当直接在 IE 中访问 URL 时,这些 header 会出现,而当发生 304 时,它们不会出现。

就好像 IE 主动忽略该特定请求...

有什么想法吗?

再说一遍,这确实适用于所有其他浏览器,但不包括各种风格的 IE。

最佳答案

尝试将随机查询字符串参数添加到状态请求的 URL 中。像:

'/your/url?breakcache='+Math.random()

关于javascript - 当使用 ajax 方式进行登录状态检查时,Internet Explorer 会强制显示 304,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6285736/

相关文章:

node.js - 为什么express的sendFile函数将304视为错误?

.net - HttpWebRequest.GetResponse 在 HTTP 304 上抛出 WebException

javascript - 正则表达式包含括号内的文本

javascript - jquery mobile 滑出对话框中有以前的剩余内容

javascript - 如果客户端先运行,asp.net mvc 5 应该运行服务器端验证

javascript - 返回 Intl.NumberFormat 罗马尼亚列伊的正确货币

php - 使用 AJAX 和 PHP 进行 mysql UPDATE 在两种相同情况之一中不起作用

http - 缓存控制不返回 304

Javascript 对象和 this 关键字