关于何时使用实体标签ETag和最后修改时间(Last-modified)的规则
2010-09-18 12:18
381 查看
我们对源服务器,客户端和缓存采用一套规则和建议来规定不同的验证器何时应该被使用,出
于何种目的被使用。
HTTP/1.1 源服务器:
- 应该发送一个实体标签验证器除非源服务器产生这样一个实体标签不可行。
- 可能会发送弱实体标签而不是强实体标签,如果使用弱实体标签能提高性能的话或者如果发送一个强实体标签不可行的情况下。
- 应该发送一个Last-Modifed值如果可行的话,除非打破语义透明性(这可能由利用If-Modified-Since头域里的日期产生)可能会导致严重的后果。
换句话说,对http1.1源服务器来说,比较好的做法是同时发送强实体标签和Last-Modified值。.
HTTP/1.1 客户端:
- 若实体标签被源服务器提供,HTTP/1.1客户端必须在任何缓存条件请求(利用了If-Match或If-None-Match的请求)里利用实体标签.。
- 仅当Last-Modified值被源服务器提供时,HTTP/1.1客户端应该在非子范围缓存条件请求(利用If-Modified-Since)里利用此值。
- 仅当Last-Modified值被HTTP/1.0源服务器提供,HTTP/1.1客户端可能会在子范围缓存条件请求(利用了If-Unmodified-Since)里利用此值。
- 如果一个实体标签和Last-Modified值被源服务器提高,HTTP/1.1客户端应该在缓存条件请求里利用这两个验证器。这允许HTTP/1.1和HTTP/1.1缓存能合适地进行响应。
HTTP/1.1源服务器,当接收到一个条件请求并且此请求同时包含Last-Modifed日期(例如,在If-Modified-Since,或If-Unmodified-Since头域里)和一个或多个实体标签(例如在If-Match,If-None=Match,或If-Range头域里)作为缓存验证器时,源服务器不能返回一个304状态响应(Not Modified)除非这样做能当当前实体的验证器和请求里所有的条件头域里的验证器一致。
HTTP/1.1缓存服务器,当接收到一个条件请求并且此请求里同时包含Last-Modified日期和一个或多个实体标签作为缓存验证器时,它不能返回一个本地的副本给客户端除非那个副本的验证器和所有请求里条件头域里的验证器一致。
注意:这些规则背的常用的原则是HTTP/1.1服务器和客户端应该在请求和响应里尽可能传输非冗余的信息。接收这些非冗余信息的HTTP/1.1系统将会假设它接收了验证器。
于何种目的被使用。
HTTP/1.1 源服务器:
- 应该发送一个实体标签验证器除非源服务器产生这样一个实体标签不可行。
- 可能会发送弱实体标签而不是强实体标签,如果使用弱实体标签能提高性能的话或者如果发送一个强实体标签不可行的情况下。
- 应该发送一个Last-Modifed值如果可行的话,除非打破语义透明性(这可能由利用If-Modified-Since头域里的日期产生)可能会导致严重的后果。
换句话说,对http1.1源服务器来说,比较好的做法是同时发送强实体标签和Last-Modified值。.
HTTP/1.1 客户端:
- 若实体标签被源服务器提供,HTTP/1.1客户端必须在任何缓存条件请求(利用了If-Match或If-None-Match的请求)里利用实体标签.。
- 仅当Last-Modified值被源服务器提供时,HTTP/1.1客户端应该在非子范围缓存条件请求(利用If-Modified-Since)里利用此值。
- 仅当Last-Modified值被HTTP/1.0源服务器提供,HTTP/1.1客户端可能会在子范围缓存条件请求(利用了If-Unmodified-Since)里利用此值。
- 如果一个实体标签和Last-Modified值被源服务器提高,HTTP/1.1客户端应该在缓存条件请求里利用这两个验证器。这允许HTTP/1.1和HTTP/1.1缓存能合适地进行响应。
HTTP/1.1源服务器,当接收到一个条件请求并且此请求同时包含Last-Modifed日期(例如,在If-Modified-Since,或If-Unmodified-Since头域里)和一个或多个实体标签(例如在If-Match,If-None=Match,或If-Range头域里)作为缓存验证器时,源服务器不能返回一个304状态响应(Not Modified)除非这样做能当当前实体的验证器和请求里所有的条件头域里的验证器一致。
HTTP/1.1缓存服务器,当接收到一个条件请求并且此请求里同时包含Last-Modified日期和一个或多个实体标签作为缓存验证器时,它不能返回一个本地的副本给客户端除非那个副本的验证器和所有请求里条件头域里的验证器一致。
注意:这些规则背的常用的原则是HTTP/1.1服务器和客户端应该在请求和响应里尽可能传输非冗余的信息。接收这些非冗余信息的HTTP/1.1系统将会假设它接收了验证器。
相关文章推荐
- Expires / Cache-Control / Last-Modified / If-Modified-Since / ETag / If-None-Match 区别使用
- 关于SubSonic3.0插件使用Json反序列化获得的实体进行更新操作时,只能执行添加而不能执行修改(编辑)操作的处理
- 关于etag Last-Modified
- Linux使用find查找最后修改时间超过三天的文件并移动到指定目录(附:find找出文件并清空)
- http中最后修改时间Last-Modified ETag
- Spring JPA 使用@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 自动生成时间和修改者
- Delphi 使用 IDHttp 获取文件最后修改时间
- 关于http的Last-Modified和ETag
- 查看mysql各数据库使用大小以及库中每个表最后修改时间
- [导入]关于asp.net中的etag和LastModified等header的设置
- Expires / Cache-Control / Last-Modified / If-Modified-Since / ETag / If-None-Match 区别使用
- vim配置技巧——在vim中使用autocmd命令在保存文件时自动插入最后修改日期和时间
- 关于SubSonic3.0插件使用实体进行更新操作时(执行T.Update()或T.Save()),某些列无法进行修改操作的问题处理
- Gmail修改了登陆规则,现有的关于Gmail的API都无法使用了
- MySQL中日期类型数据的使用:如何让字段保存记录的创建时间和最后修改时间
- 用PHP操作http中Etag、lastModified和Expires标签
- Solr 的DIH组件 使用delta_import时 父子关系的entity 最后修改时间问题
- 关于浏览器的缓存和getLastModified()的使用问题
- 关于使用weui.io的界面修改,已经weui中<a>标签调用script中的内容为空的解决
- 用PHP操作http中Etag、lastModified和Expires标签