服务器响应 416 Range Not Satisfiable
HTTP 状态码 416 (范围无法满足)
HTTP 状态码 416 表示服务器无法满足客户端请求的范围。这通常发生在客户端请求的数据部分超出了可用数据的范围。本文将详细探讨导致此状态码的原因、实际示例以及在不同编程语言中修复错误的方法。
导致状态码 416 的原因
- 不正确的范围指定
客户端在请求范围时可能会出现错误,例如请求的范围超过文件的实际大小。
- 服务器上缺少数据
在某些情况下,资源可能已被删除或更改,导致请求的范围超出可用数据。
- 不正确的头部信息
不正确配置的 Range 头部可能会引发此错误。
实际示例
- 音频文件示例
客户端请求超出音频文件长度的范围,以下是请求和服务器响应的示例:
请求: GET /audio.mp3 HTTP/1.1 Range: bytes=1000000-
响应: HTTP/1.1 416 Range Not Satisfiable
- 图像示例
请求获取部分图像,但该图像已被修改,客户端不知晓新的尺寸:
请求: GET /image.png HTTP/1.1 Range: bytes=0-500
响应: HTTP/1.1 416 Range Not Satisfiable
- 文本文件示例
客户端请求的文本文件范围超出实际文件的大小:
请求: GET /document.txt HTTP/1.1 Range: bytes=0-1000
响应: HTTP/1.1 416 Range Not Satisfiable
在不同编程语言中修复 416 错误
Python(使用 requests 库)
import requests url = "http://example.com/file.mp3" headers = {"Range": "bytes=1000000-"} response = requests.get(url, headers=headers) if response.status_code == 416: print("请求的范围无法满足,调整请求范围。")
JavaScript(使用 Fetch API)
fetch("http://example.com/file.mp3", { method: "GET", headers: { "Range": "bytes=1000000-" } }) .then(response => { if (response.status === 416) { console.log("请求的范围无法满足,调整请求范围。"); } });
PHP(使用 cURL)
$ch = curl_init("http://example.com/file.mp3"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: bytes=1000000-")); $response = curl_exec($ch); if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 416) { echo "请求的范围无法满足,调整请求范围。"; } curl_close($ch);
总结
状态码 416 表示请求的范围数据不可用。为了避免此状态,客户端应正确指定范围并妥善处理可能出现的错误。
情况 | 示例请求 | 响应代码 |
---|---|---|
音频文件超出范围 | Range: bytes=1000000- | 416 |
图像被修改 | Range: bytes=0-500 | 416 |
文本文件超出范围 | Range: bytes=0-1000 | 416 |