HTTP 2xx 范围内的状态码表明了“客户端发送的请求已经被服务器接受并且被成功处理了”。 HTTP/1.1 200 OK 是 HTTP 请求成功后的标准响应,当你在浏览器中打开某个网站后,你通常会得到一个 200 状态码。HTTP/1.1 206 状态码表示的是“客户端通过发送范围请求头Range抓取到了资源的部分数据” 这种请求通常用来:
- 学习http头和状态
- 解决网路问题
- 解决大文件下载问题
- 解决CDN和原始HTTP服务器问题
- 使用工具例如lftp,wget,telnet测试断电续传
- 测试将一个大文件分割成多个部分同时下载
测试
查看服务器是否支持 HTTP 206:
1 |
curl -I https://raw.githubusercontent.com/Germey/LaravelGeetest/master/README.md |
其中有两个我们比较关注的请求头: Accept-Ranges: bytes:该响应头表明服务器支持 Range 请求,以及服务器所支持的单位是字节。同时服务器支持断点续传,以及支持同时下载文件的多个部分,也就是说下载工具可以利用范围请求加速下载该文件。Accept-Ranges: none 响应头表示服务器不支持范围请求。 Content-Length: 8709 :Content-Length 响应头表明了响应实体的大小,也就是真实的图片文件的大小是 8709 字节 (8.7K)。
发送
利用 CURL 可以指定请求范围。 获取前 500 字节:
1 |
curl --header "Range: bytes=0-500" https://raw.githubusercontent.com/Germey/LaravelGeetest/master/README.md |
后 500 字节:
1 |
curl --header "Range: bytes=-500" https://raw.githubusercontent.com/Germey/LaravelGeetest/master/README.md |
从 500 - 1000 字节:
1 |
curl --header "Range: bytes=500-1000" https://raw.githubusercontent.com/Germey/LaravelGeetest/master/README.md |
从 500 - 末尾字节:
1 |
curl --header "Range: bytes=500-" https://raw.githubusercontent.com/Germey/LaravelGeetest/master/README.md |
开启
大部分web服务器都原生支持字节范围请求. Apache 2.x用户可以在httpd.conf中尝试 mod_headers:
1 |
Header set Accept-Ranges bytes |