分解构成条件 GET 的原因:
在RFC 2616If-*
中,它声明如果请求消息包含( If-Modified-Since
、If-Unmodified-Since
、If-Match
、If-None-Match
或If-Range
) 标头字段,则 GET 方法将更改为“条件 GET” 。
然后它说:
条件 GET 方法请求仅在条件头字段描述的情况下传输实体。
据我了解,这意味着只有在任何新的后续请求中满足“ ”条件时,它才会返回所请求的数据。If-*
例如,如果 GET 请求返回带有Etag
标头的响应,则下一个请求必须包含If-None-Match
带有ETag
值的 ,以将客户端传输回请求的资源。
ETag
但是,如果客户端必须在获取返回的“ ”标头(以返回)之前发送初始请求,If-None-Match
那么他们已经拥有请求的资源。因此,任何将来返回If-None-Match
带有该ETag
值的标头的请求仅指示返回所请求的值,返回200 OK(如果客户端未从初始请求返回If-None-Match
and 值)或304 Not Modified(如果返回),其中通过缓存资源来帮助客户端和服务器。ETag
我的问题:
为什么它声明实体(来自请求的资源)将在满足条件时“仅传输” (例如在我的示例中,客户端返回带有 an 的值以缓存请求的资源)如果资源或“实体" 是否被返回,是否返回 " "?它不会“仅在条件标头描述的情况下”返回资源,因为它返回资源尽管返回200 OK或304 Not Modified取决于是否返回“”标头。我对此有什么误解?If-*
ETag
If-None-Match
If-*
If-*
来自RFC 2616的完整条件 GET 参考:
如果请求消息包含 If-Modified-Since、If-Unmodified-Since、If-Match、If-None-Match 或 If-Range 头字段,则 GET 方法的语义更改为“条件 GET”。条件 GET 方法请求仅在条件头字段描述的情况下传输实体。条件 GET 方法旨在通过允许刷新缓存的实体而不需要多个请求或传输客户端已经持有的数据来减少不必要的网络使用。