📜  HTTP 标头 |范围(1)

📅  最后修改于: 2023-12-03 15:31:20.099000             🧑  作者: Mango

HTTP 标头 |范围

HTTP 标头范围是指在 HTTP 请求或响应中用于指定要传输或返回的数据的范围。范围请求通常用于部分文件下载,例如当从服务器下载大文件时,客户端可以指定从哪个字节开始下载,这样可以一部分一部分地下载文件而不需要重新下载整个文件。

请求头

客户端在发送请求时,可以在请求头中添加一个 Range 标头以指定所请求的字节范围。当服务器接收到此请求后,将响应头设置为包含请求字节范围的实际字节范围。如果服务器无法满足所请求的字节范围,服务器将返回一个 HTTP 状态码为 416 的响应。

以下是一个范例请求头:

GET /video.mp4 HTTP/1.1
Host: example.com
Range: bytes=500-999

在此请求中,客户端请求从字节 500 到字节 999 的数据。

响应头

当服务器返回响应时,响应头中也包含范围标头。以下是响应头的一个例子:

HTTP/1.1 206 Partial Content
Accept-Ranges: bytes
Content-Length: 500
Content-Range: bytes 500-999/10000
Content-Type: video/mp4

在此响应中,服务器返回了一个 HTTP 状态码为 206,表示范围请求成功。在 Content-Range 标头中指定了实际返回的字节范围,即 500 到 999 字节。在 Content-Length 标头中指定了此响应包含总字节数,即 500 字节。

示例代码

以下是一个示例代码片段,展示如何在 Python 中向服务器发送范围请求,并从响应中读取范围数据:

import requests

url = "http://example.com/video.mp4"
headers = {"Range": "bytes=500-999"}
response = requests.get(url, headers=headers)

if response.status_code == 206:
    # 范围请求成功
    content_range = response.headers['Content-Range']
    content_length = response.headers['Content-Length']
    file_data = response.content
    # 处理范围数据
else:
    # 范围请求失败
    print("Error:", response.status_code)

此代码使用第三方库 requests 向服务器发送带有范围标头的请求,并从响应中读取范围数据。如果服务器返回 206 状态码,则表明范围请求成功,可以从响应中读取数据并进行处理。否则,将输出错误代码。