Firefox 66、67 在缓存中保存 302
Firefox 66, 67 saves 302 in cache
Firefox 66 和 67 中的 302 缓存存在一些问题:
某些 302 序列导致 Firefox 使用以前缓存的 302 位置而不是已经可用的 URL - 因此不应重定向它。即使在 header 中对所有 302 使用 "Cache-Control: no-cache, no-store, max-age=0, must-revalidate" 也会发生这种情况。
用例:
- 用户清理 Firefox 缓存。
- 用户为每个页面上出现的资源(PNG 图片)输入 URL。
- 系统(使用 CAS Apereo + Spring 安全性)发送带有状态代码 302 和 CAS 登录页面位置的响应。
- 用户输入其他 URL,例如主页。它导致用户未重定向到第二步所需的资源。 No-caching 跳过此步骤后在 Firefox 中工作正常。
- 系统发送带有状态代码 302 和 CAS 登录页面位置的响应(与第 3 步相同)。
- 用户登录。
- 系统发送带有状态代码 302 和 CAS 票据位置的响应。然后再次使用状态代码 302 重定向到第 4 步所需的 URL。
- 系统运行不正常。 Firefox 使用缓存文件(包括来自第 2 步和第 4 步所需的 URL 的文件),尽管它 should not be cached。例如。它会导致重定向到主页(URL 来自第 4 步)而不是显示所需的页面(从菜单访问)。
其他浏览器和旧版 Firefox 运行正常,不会发生重定向。清除缓存后,Firefox 66 和 67 的行为正常。
Firefox 控制台截图:
第三步网络日志:
第五次网络日志:
第六次网络日志:
第七次网络日志:
302 缓存是 Firefox 中的缺陷。我报告了 issue 并在 Firefox 70 中修复了缓存。
Firefox 66 和 67 中的 302 缓存存在一些问题:
某些 302 序列导致 Firefox 使用以前缓存的 302 位置而不是已经可用的 URL - 因此不应重定向它。即使在 header 中对所有 302 使用 "Cache-Control: no-cache, no-store, max-age=0, must-revalidate" 也会发生这种情况。
用例:
- 用户清理 Firefox 缓存。
- 用户为每个页面上出现的资源(PNG 图片)输入 URL。
- 系统(使用 CAS Apereo + Spring 安全性)发送带有状态代码 302 和 CAS 登录页面位置的响应。
- 用户输入其他 URL,例如主页。它导致用户未重定向到第二步所需的资源。 No-caching 跳过此步骤后在 Firefox 中工作正常。
- 系统发送带有状态代码 302 和 CAS 登录页面位置的响应(与第 3 步相同)。
- 用户登录。
- 系统发送带有状态代码 302 和 CAS 票据位置的响应。然后再次使用状态代码 302 重定向到第 4 步所需的 URL。
- 系统运行不正常。 Firefox 使用缓存文件(包括来自第 2 步和第 4 步所需的 URL 的文件),尽管它 should not be cached。例如。它会导致重定向到主页(URL 来自第 4 步)而不是显示所需的页面(从菜单访问)。
其他浏览器和旧版 Firefox 运行正常,不会发生重定向。清除缓存后,Firefox 66 和 67 的行为正常。
Firefox 控制台截图:
第三步网络日志:
第五次网络日志:
第六次网络日志:
第七次网络日志:
302 缓存是 Firefox 中的缺陷。我报告了 issue 并在 Firefox 70 中修复了缓存。