HTTP协议中的Range
请求头部用于请求部分资源,它的作用是在请求时指定所需要的资源的一部分,通常用于多线程下载、续传等场景。
Range
请求头部可以接收一个或多个字节范围请求,范围请求的格式是byte-unit start-end
,其中start和end表示的是所请求的资源的字节数范围,字节数范围以0为起点,最后一个字节的位置以资源大小减1表示。例如:
- 请求资源的前500个字节:
bytes=0-499
- 请求资源的第四个字节:
bytes=3-3
- 请求资源的最后500个字节:
bytes=-500
在响应时,服务器可以返回请求的部分资源,响应中的Content-Range
标头用于标识响应的部分资源位置和总共的资源大小。例如:
HTTP/1.1 206 Partial Content
Content-Type: video/mp4
Content-Length: 4096
Content-Range: bytes 0-4095/10000
[request range data]
上面的响应表示返回了第一个4096字节的部分内容,总共的资源大小是10000字节。
除了Range
请求头部和Content-Range
响应头部之外,Accept-Ranges
响应头部还告诉客户端服务器是否支持Range
请求,并且支持哪种单位。如果服务器支持范围请求,则应该包含Accept-Ranges: bytes
响应头部。
综上所述,Range
请求头部的作用是可以让客户端从服务器上请求的资源的部分内容,适合处理大文件下载、视频播放等需要一部分一部分的获取数据的场景,通在含有大量图片资源的网页访问中提高了用户体验。
示例 1: 请求资源的前1000个字节
请求头部:
GET /resource HTTP/1.1
Host: example.com
Range: bytes=0-999
响应头部:
HTTP/1.1 206 Partial Content
Content-Type: application/octet-stream
Content-Range: bytes 0-999/5000
Content-Length: 1000
[request range data]
示例 2: 请求资源的第五个字节
请求头部:
GET /resource HTTP/1.1
Host: example.com
Range: bytes=4-4
响应头部:
HTTP/1.1 206 Partial Content
Content-Type: application/octet-stream
Content-Range: bytes 4-4/5000
Content-Length: 1
[request range data]