首页 > 解决方案 > 避免缓存 205 响应

问题描述

应使用 eTag 缓存的动态后表单。导航:

  1. 用户浏览表格并在来自服务器的响应中form.html接收具有新eTag的状态200 。"DNEI297"现在浏览器将此文档缓存在缓存中。
  2. 用户输入一些值,最后将表单数据发布到form.html(浏览器到服务器)并从服务器接收HTTP 状态代码 205(接受/重置表单数据)和未更改的 eTag "DNEI297"
  3. 由于在这种情况下 205 响应为空,因此浏览器form.html使用 eTag重新加载页面"DNEI297"。服务器将 eTag 与他的 eTag 进行比较,并确定表单和 eTag 都没有更改,并且浏览器已经缓存了正确的版本form.html并发送 304(未更改)。

现在的问题:由于服务器发送了 304,浏览器接受了最后一个请求并决定使用缓存版本。但是缓存的版本是具有状态码 205 和 eTag 的后请求的答案"DNEI297"

最后提交表单后,文档 http-status 为 205。如何避免错误的代码?它会制造麻烦并从防病毒插件产生警报。

标签: htmlformshttpcachingetag

解决方案


在这种情况下,服务器通过在其对表单提交的响应中发送相同ETag或任何内容而出错。ETag205

RFC 7232描述了何时适合使用ETag:

“强验证器”是表示元数据,每当表示数据发生变化时,该元数据就会改变值,而表示数据可以在200 (OK)响应的有效负载正文中观察到GET

所以你不应该发送一个ETag205响应,因为这不是你通过GET对该 URL 成功执行得到的结果。


推荐阅读