某些服务器不能精确的得到文件的最后修改时间 。
为此 , HTTP/1.1 引入了 Etag 。Etag 仅仅是一个和文件相关的标记 , 可以是一个版本标记 , 例如:v1.0.0;或者说 “627-4d648041f6b80” 这么一串看起来很神秘的编码 。但是 HTTP/1.1 标准并没有规定 Etag 的内容是什么或者说要怎么实现 , 唯一规定的是 Etag 需要放在 “” 内 。
If-Range
用于判断实体是否发生改变 , 如果实体未改变 , 服务器发送客户端丢失的部分 , 否则发送整个实体 。一般格式:
If-Range: Etag | HTTP-Date
也就是说 , If-Range 可以使用 Etag 或者 Last-Modified 返回的值 。当没有 ETage 却有 Last-modified 时 , 可以把 Last-modified 作为 If-Range 字段的值 。
例如:
If-Range: “627-4d648041f6b80”
If-Range: Fri, 22 Feb 2013 03:45:02 GMT
If-Range 必须与 Range 配套使用 。如果请求报文中没有 Range , 那么 If-Range 就会被忽略 。如果服务器不支持 If-Range , 那么 Range 也会被忽略 。
如果请求报文中的 Etag 与服务器目标内容的 Etag 相等 , 即没有发生变化 , 那么应答报文的状态码为 206 。如果服务器目标内容发生了变化 , 那么应答报文的状态码为 200 。
用于校验的其他 HTTP 头信息:If-Match/If-None-Match、If-Modified-Since/If-Unmodified-Since 。
工作原理
Etag 由服务器端生成 , 客户端通过 If-Range 条件判断请求来验证资源是否修改 。请求一个文件的流程如下:
第一次请求:
客户端发起 HTTP GET 请求一个文件 。
服务器处理请求 , 返回文件内容以及相应的 Header , 其中包括 Etag(例如:627-4d648041f6b80)(假设服务器支持 Etag 生成并已开启了 Etag)状态码为 200 。
第二次请求(断点续传):
客户端发起 HTTP GET 请求一个文件 , 同时发送 If-Range(该头的内容就是第一次请求时服务器返回的 Etag:627-4d648041f6b80) 。
服务器判断接收到的 Etag 和计算出来的 Etag 是否匹配 , 如果匹配 , 那么响应的状态码为 206;否则 , 状态码为 200 。
检测服务器是否支持断点续传
CURL 实现检测:
[root@localhost ~]# curl -i --range 0-9 http://www.baidu.com/img/bdlogo.gifHTTP/1.1 206 Partial ContentDate: Mon, 21 Nov 2016 05:26:29 GMTServer: ApacheP3P: CP=" OTI DSP COR IVA OUR IND COM "Set-Cookie: BAIDUID=0CD0E23B4D4F739954DFEDB92BE6CE03:FG=1; expires=Tue, 21-Nov-17 05:26:29 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1Last-Modified: Fri, 22 Feb 2013 03:45:02 GMTETag: "627-4d648041f6b80"Accept-Ranges: bytesContent-Length: 10Cache-Control: max-age=315360000Expires: Thu, 19 Nov 2026 05:26:29 GMTContent-Range: bytes 0-9/1575Connection: Keep-AliveContent-Type: image/gifGIF89a[root@localhost ~]#能够找到 Content-Range , 则表明服务器支持断点续传 。有些服务器还会返回 Accept-Ranges , 输出结果 Accept-Ranges: bytes , 说明服务器支持按字节下载 。
推荐阅读
- linux性能工具perf工作原理简析
- PHP底层运行机制与原理
- 并使用java实现 一文彻底看懂Base64编码解码原理
- 干货 TCP/IP加速原理详解
- 基于辅助功能的镜像劫持攻击原理
- 软件架构-解密电商系统-秒杀的原理和开发思路
- 凤凰单枞制作工艺及原理
- docker运行原理与使用总结
- 变频器的工作原理及分类 变频器原理
- 以华为手机为例 带NFC功能手机模拟加密门禁卡的原理和方法