我在为我的公司创建的演示站点中出现了一个特定于 IE 的 ajax 登录状态请求问题。
在每个 Internet Explorer 浏览器 (7-9) 中,都会出现这个问题,而它在所有其他浏览器中都像冠军一样工作:
成功登录后,用户将被重定向到触发登录状态请求的登录页面。
如果此登录状态请求返回“1”以外的任何内容,则页面将重定向回登录页面。
如果您关注开发人员工具中的流量,您会看到对该特定状态检查的请求导致 304 未修改(应该永远不会发生),并且请求的正文显示为 EMPTY。(它总是返回 0 或 1)...
使用该检查对页面进行硬刷新(CTRL-F5),仍然会导致浏览器出现 304。
使用提琴手跟踪那些 304 表明甚至没有通过网络请求该登录状态 URL,浏览器本身假设为 304,并且无法发送请求。
直接访问 url 时,响应总是 200 并期望适当的 0 或 1,但是当 ajax'ed 时,它通常是 304 并且从不通过网络发送,甚至从服务器确认 304。
清除浏览器历史似乎对是否将 304 更改为 200 没有影响。
更奇怪的是,每 10 次左右的尝试,这实际上确实有效,并且请求返回 200 并得到真正的响应,但通常它返回 304 而没有响应,并且该值不等于 1 与缓存的值(甚至不确定它等同于什么?!)
我已更改对此请求的响应,以使 php 生成以下标头:
header('Cache-Control: no-cache');
header('Pragma: no-cache');
header('Expires: -1');
当直接在 IE 中访问 URL 时,这些标头存在,当 304 发生时,它们不存在。
就好像 IE 正在积极地忽略那个特定的请求......
有任何想法吗?
同样,这适用于所有其他浏览器,从字面上看,但各种风格的 IE。