【问题标题】:HTTP If-None-Match vs. If-MatchHTTP If-None-Match 与 If-Match
【发布时间】:2010-01-28 19:01:12
【问题描述】:

我目前正在构建一个 PHP 脚本,它会在需要时回答 HTTP“304 Not Modified”。

(请参阅question #2086712 了解我目前所做的工作)。

目前我的回答如下:

  • If-Modified-Since
  • 如果没有匹配

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

  • 如果匹配
  • If-Unmodified-Since
  • If 范围

最后两个对我的缓存系统似乎无关紧要(它们似乎在恢复“大”下载时使用),但我还没有发现“If-Match”是否可以在我的系统中使用。

“If-Match”是否在代理或 Web 浏览器中用于“常规”页面内容? “If-Match”与“If-None-Match”有何不同?

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

【问题讨论】:

    标签: http caching header http-headers http-1.1


    【解决方案1】:

    如果匹配

    如果出现以下情况,服务器必须返回 412(前提条件失败)响应:

    • 没有一个实体标签匹配,
    • 或“*”已给出且当前实体不存在

    If-Match 应该被忽略,如果:

    • 任何实体标签匹配
    • 或者如果请求的结果不是 2xx 或 412 状态(没有 If-Match)
    • 或者如果给出“*”并且该资源存在任何当前实体

    关于如果匹配的结论:

    • “If-Match: *”的意思是,如果源服务器选择的表示形式存在就应该执行该方法,如果表示形式不存在就不能执行。

    If-Match in RFC2616

    If-Unmodified-Since

    如果出现以下情况,服务器必须返回 412(前提条件失败)响应:

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

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

    • 自此字段中指定的时间以来,请求的资源没有被修改
    • 或者通常的请求(即,没有 If-Unmodified-Since 标头)将导致除了 2xx 或 412 状态之外的任何内容
    • 或指定的日期无效

    If-Unmodified-Since in RFC2616

    如果范围

    非正式地,它的意思是'如果实体没有改变,把我缺少的部分发给我;否则,将整个新实体发给我'

    前提条件:

    • If-Range 标头应该仅与 Range 标头一起使用,如果请求不包含 Range 标头,或者如果服务器不支持子范围操作。

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

    If-Range in RFC2616

    未定义的结果

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

    • 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 and(If-None-Match or If-Modified-Since)

    【讨论】:

    • 是否存在 If-Match、If-Unmodified-Since 或 If-Range 可以触发 HTTP 304“未修改”答案的情况?
    • 不,只允许If-None-MatchIf-Modified-Sinceen.wikipedia.org/wiki/List_of_HTTP_headers
    • If-Match: *不是和404冲突吗?
    • 回答我自己的问题,If-Match 有一个条件使自己成为最后一个解析链,因此 404 通常优先。
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2016-06-07
    • 2011-01-06
    • 2015-06-16
    相关资源
    最近更新 更多