HTTP If-None-Match与If-Match

Ale*_*exV 24 caching header http http-1.1 http-headers

我目前正在构建一个PHP脚本,在需要时将回答HTTP"304 Not Modified".

(到目前为止我所做的事情见问题#2086712).

目前我回答以下问题:

  • 如果-Modified-Since的
  • 如果 - 无 - 匹配

但我发现另外3个标题可以触发"条件GET"(参见http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3):

  • 如果-匹配
  • 如果未修饰的,因为
  • 如果量程

最后2对我的缓存系统似乎是不相干的(它们似乎在恢复"大"下载时使用)但我还没有发现"If-Match"是否可以在我的系统中使用.

"If-Match"是否在代理或Web浏览器中用于"常规"页面内容?"If-Match"与"If-None-Match"的不同之处是什么?

我应该支持那些3还是只支持其中的一部分?欢迎任何帮助!

St.*_*and 37

如果-匹配

如果出现以下情况,服务器必须返回412(Precondition Failed)响应:

  • 没有任何实体标签匹配,
  • 或者给出"*"并且不存在当前实体

如果出现以下情况,则应忽略If-Match:

  • 任何实体标签都匹配
  • 或者如果请求导致除2xx或412状态之外的任何其他内容(没有If-Match)
  • 或者如果给出"*"并且资源存在任何当前实体

关于if-match的结论:

  • "If-Match:*"的含义是,如果原始服务器选择的表示存在,则应该执行该方法,如果表示不存在,则不能执行该方法.

如果在RFC2616中匹配

如果未修饰的,因为

如果出现以下情况,服务器必须返回412(Precondition Failed)响应:

  • 自指定时间以来,已请求的变体已被修改

If-Unmodified-Since应该被忽略,如果

  • 自此字段中指定的时间以来未请求修改所请求的资源
  • 或者通常的请求(即没有If-Unmodified-Since标头)会产生2xx或412以外的任何其他状态
  • 或指定的日期无效

If-Unmodified-自RFC2616起

如果量程

非正式地,它的意思是"如果实体不变,请将我遗漏的部分发给我; 否则,给我发送整个新实体'

前提条件:

  • If-Range报头应该只能与一个一起使用Range报头,并且必须如果请求被忽略不包括一个Range报头,或者如果服务器不支持的子范围操作.

如果If-Range标头与实体的当前实体标签匹配,则服务器应该提供206(部分内容)响应.否则,服务器应该使用200(OK)响应返回整个实体.

RFC2616中的If-Range

未定义的结果

具有以下标头组合会导致未定义的结果:

  • If-Modified-Since If-Match
  • If-Modified-Since If-Unmodified-Since
  • If-None-Match If-Match
  • If-None-Match If-Unmodified-Since

这些规则已从以下规则中分解出来(可在RFC2616中找到):

  • If-Match (If-None-Match If-Modified-Since)
  • If-Modified-Since (If-Match If-Unmodified-Since)
  • If-None-Match (If-Match If-Unmodified-Since)
  • If-Unmodified-Since (If-None-Match If-Modified-Since)

  • 不,它只允许`If-None-Match`和`If-Modified-Since`.http://en.wikipedia.org/wiki/List_of_HTTP_headers (5认同)
  • 是否存在If-Match,If-Unmodified-Since或If-Range可以触发HTTP 304"未修改"答案的情况? (4认同)