HTTP 2xx 范围内的状态码表明了“客户端发送的请求已经被服务器接受并且被成功处理了”。
HTTP/1.1 200 OK 是 HTTP 请求成功后的标准响应,当你在浏览器中打开某个网站后,你通常会得到一个 200 状态码。HTTP/1.1 206 状态码表示的是“客户端通过发送范围请求头Range抓取到了资源的部分数据” 这种请求通常用来:
- 学习http头和状态
- 解决网路问题
- 解决大文件下载问题
- 解决CDN和原始HTTP服务器问题
- 使用工具例如lftp,wget,telnet测试断电续传
- 测试将一个大文件分割成多个部分同时下载
测试
查看服务器是否支持 HTTP 206:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
curl -I http://raw.githubusercontent.com/Germey/LaravelGeetest/master/README.md HTTP/1.1 200 OK Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline' Strict-Transport-Security: max-age=31536000 X-Content-Type-Options: nosniff X-Frame-Options: deny X-XSS-Protection: 1; mode=block ETag: "b29f4639b76cd7f94a4b36b05be6c85acfe478f1" Content-Type: text/plain; charset=utf-8 Cache-Control: max-age=300 X-Geo-Block-List: X-GitHub-Request-Id: 850A:16D2:30128BA:3341504:59BBC946 Content-Length: 8709 Accept-Ranges: bytes Date: Fri, 15 Sep 2017 12:36:31 GMT Via: 1.1 varnish Connection: keep-alive X-Served-By: cache-nrt6123-NRT X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1505478991.145862,VS0,VE1 Vary: Authorization,Accept-Encoding Access-Control-Allow-Origin: * X-Fastly-Request-ID: ee23d80d2ba507ec0a70c880a075df0d2671aa4d Expires: Fri, 15 Sep 2017 12:41:31 GMT Source-Age: 8 |
其中有两个我们比较关注的请求头:
Accept-Ranges: bytes:该响应头表明服务器支持 Range 请求,以及服务器所支持的单位是字节。同时服务器支持断点续传,以及支持同时下载文件的多个部分,也就是说下载工具可以利用范围请求加速下载该文件。Accept-Ranges: none 响应头表示服务器不支持范围请求。
Content-Length: 8709 :Content-Length 响应头表明了响应实体的大小,也就是真实的图片文件的大小是 8709 字节 (8.7K)。
发送
利用 CURL 可以指定请求范围。
获取前 500 字节:
1 |
curl --header "Range: bytes=0-500" http://raw.githubusercontent.com/Germey/LaravelGeetest/master/README.md |
后 500 字节:
1 |
curl --header "Range: bytes=-500" http://raw.githubusercontent.com/Germey/LaravelGeetest/master/README.md |
从 500 – 1000 字节:
1 |
curl --header "Range: bytes=500-1000" http://raw.githubusercontent.com/Germey/LaravelGeetest/master/README.md |
从 500 – 末尾字节:
1 |
curl --header "Range: bytes=500-" http://raw.githubusercontent.com/Germey/LaravelGeetest/master/README.md |
开启
大部分web服务器都原生支持字节范围请求. Apache 2.x用户可以在httpd.conf中尝试 :
1 |
Header set Accept-Ranges bytes |
转载请注明:新宝6 » HTTP 206 获取文件部分内容和范围请求