一文带你了解 HTTP 黑科技(12)


下面是两种常见的案例

  • 对于 GET 和 POST 方法 , 会结合使用 Range 标头 , 它可以确保新发送请求的范围与上一个请求的资源相同 , 如果不匹配的话 , 会返回 416 响应 。
  • 对于其他方法 , 特别是 PUT 方法 , If-Match 可以防止丢失更新 , 服务器会比对 If-Match 的字段值和资源的 Etag 值 , 仅当两者一致时 , 才会执行请求 。反之 , 则返回状态码 412 Precondition Failed 的响应 。例如
If-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"If-Match: *If-None-Match条件请求 , 它与 If-Match 的作用相反 , 仅当 If-None-Match 的字段值与 Etag 值不一致时 , 可处理该请求 。对于GET 和 HEAD  , 仅当服务器没有与给定资源匹配的 Etag 时 , 服务器将返回 200 OK作为响应 。对于其他方法 , 仅当最终现有资源的 Etag 与列出的任何值都不匹配时 , 才会处理请求 。
当 GET 和 POST 发送的 If-None-Match与 Etag 匹配时 , 服务器会返回 304 。
If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"If-None-Match: W/"67ab43", "54ed21", "7892dd"If-None-Match: *If-Modified-SinceIf-Modified-Since 是 HTTP 条件请求的一部分 , 只有在给定日期之后 , 服务端修改了请求所需要的资源 , 才会返回 200 OK 的响应 。如果在给定日期之后 , 服务端没有修改内容 , 响应会返回 304 并且不带任何响应体 。If-Modified-Since 只能使用 GET 和 HEAD 请求 。
If-Modified-Since 与 If-None-Match 结合使用时 , 它将被忽略 , 除非服务器不支持 If-None-Match 。一般表示如下
If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
注意:这是格林威治标准时间 。HTTP 日期始终以格林尼治标准时间表示 , 而不是本地时间 。
If-RangeIf-Range 也是条件请求 , 如果满足条件(If-Range 的值和 Etag 值或者更新的日期时间一致) , 则会发出范围请求 , 否则将会返回全部资源 。它的一般表示如下
If-Range: Wed, 21 Oct 2015 07:28:00 GMT If-Range: bfc13a64729c4290ef5b2c2730249c88ca92d82dIf-Unmodified-SinceIf-Unmodified-Since HTTP 请求标头也是一个条件请求 , 服务器只有在给定日期之后没有对其进行修改时 , 服务器才返回请求资源 。如果在指定日期时间后发生了更新 , 则以状态码 412 Precondition Failed 作为响应返回 。
If-Unmodified-Since: Wed, 21 Oct 2015 07:28:00 GMT 条件请求示例缓存更新条件请求最常见的示例就是更新缓存 , 如果缓存是空或没有缓存 , 则以200 OK的状态发送回请求的资源 。如下图所示
一文带你了解 HTTP 黑科技

文章插图
 
客户端第一次发送请求没有 , 缓存为空并且没有条件请求 , 服务器在收到客户端请求后 , 设置验证器 Last-Modified 和 Etag 标签 , 并把这两个标签随着响应一起发送回客户端 。
下一次客户端再发送相同的请求后 , 会直接从缓存中提取 , 只要缓存没有过期 , 就不会有任何新的请求到达服务器重新下载资源 。但是 , 一旦缓存过期 , 客户端不会直接使用缓存的值 , 而是发出条件请求 。验证器的值用作 If-Modified-Since 和If-Match标头的参数 。
缓存过期后客户端重新发起请求 , 服务器收到请求后发现如果资源没有更改 , 服务器会发回 304 Not Modified响应 , 这使缓存再次刷新 , 并让客户端使用缓存的资源 。尽管有一个响应/请求往返消耗一些资源 , 但是这比再次通过有线传输整个资源更有效 。
一文带你了解 HTTP 黑科技

文章插图
 
如果资源已经发生更改 , 则服务器仅使用新版本的资源返回 200 OK 响应 , 就像没有条件请求 , 并且客户端会重新使用新的资源 , 从这个角度来讲 , 缓存是条件请求的前置条件 。
一文带你了解 HTTP 黑科技

文章插图
 
断点续传HTTP 可以支持文件的部分下载 , 通过保留已获得的信息 , 此功能允许恢复先前的操作 , 从而节省带宽和时间 。


推荐阅读