我在为公司创建的演示网站中遇到了 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/