html - 避免缓存 205 响应
问题描述
应使用 eTag 缓存的动态后表单。导航:
- 用户浏览表格并在来自服务器的响应中
form.html
接收具有新eTag的状态200 。"DNEI297"
现在浏览器将此文档缓存在缓存中。 - 用户输入一些值,最后将表单数据发布到
form.html
(浏览器到服务器)并从服务器接收HTTP 状态代码 205(接受/重置表单数据)和未更改的 eTag"DNEI297"
。 - 由于在这种情况下 205 响应为空,因此浏览器
form.html
使用 eTag重新加载页面"DNEI297"
。服务器将 eTag 与他的 eTag 进行比较,并确定表单和 eTag 都没有更改,并且浏览器已经缓存了正确的版本form.html
并发送 304(未更改)。
现在的问题:由于服务器发送了 304,浏览器接受了最后一个请求并决定使用缓存版本。但是缓存的版本是具有状态码 205 和 eTag 的后请求的答案"DNEI297"
。
最后提交表单后,文档 http-status 为 205。如何避免错误的代码?它会制造麻烦并从防病毒插件产生警报。
解决方案
在这种情况下,服务器通过在其对表单提交的响应中发送相同ETag
或任何内容而出错。ETag
205
RFC 7232描述了何时适合使用ETag
:
“强验证器”是表示元数据,每当表示数据发生变化时,该元数据就会改变值,而表示数据可以在
200 (OK)
响应的有效负载正文中观察到GET
。
所以你不应该发送一个ETag
空205
响应,因为这不是你通过GET
对该 URL 成功执行得到的结果。
推荐阅读
- amazon-web-services - 如何通过主机名而不是地址连接到 Kubernetes 服务?
- vue.js - Nuxt 内容:如何从 markdown/yaml 链接到二进制文件?
- linux - 用于 Linux 触摸移动操作系统的 ElectronJS?
- javascript - 在c#上反序列化javascript数组
- google-sheets - ArrayFormula 展开为一整列
- node.js - 在安装了 nvm 时找不到节点
- amazon-web-services - 使用 python lambda 将 AWS 快照复制到 S3 存储桶
- angular - 覆盖 Angular2 中 HttpClient 生成的 request-id http 标头
- amazon-web-services - 动态公共 IP 地址 ELB 的问题
- google-apps-script - onSelectionChange 只能间歇性地工作