HTTP的Range头部有什么作用?

  • Post category:Python

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]