我们来详细讲解一下 HTTP 响应码 200、206 和 416,尤其是在文件下载和断点续传场景下的含义。
1️⃣ HTTP 200 OK
含义:请求成功,服务器返回请求的资源。
适用场景:
普通文件下载。
浏览器访问网页。
特点:
服务器返回整个资源(完整文件)。
如果请求带了
Range
头(断点续传),但服务器不支持或忽略它,也可能返回 200,表示返回整个文件而不是部分内容。
示例:
GET /file.zip HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
Content-Length: 1024000
Content-Type: application/zip
<文件内容>
说明:这里返回的是完整文件(1MB)。
2️⃣ HTTP 206 Partial Content
含义:部分内容响应,表示服务器成功处理了带
Range
的请求,只返回请求范围内的数据。适用场景:
断点续传。
分段下载大文件。
特点:
请求中必须包含
Range
头,例如:Range: bytes=1000-1999
响应中会带
Content-Range
头,明确本次返回的字节范围和总大小。
示例:
GET /file.zip HTTP/1.1
Host: example.com
Range: bytes=1000-1999
HTTP/1.1 206 Partial Content
Content-Range: bytes 1000-1999/1024000
Content-Length: 1000
Content-Type: application/zip
<文件的 1000-1999 字节>
说明:客户端请求文件的 1000~1999 字节,服务器返回了这个范围的数据。
3️⃣ HTTP 416 Range Not Satisfiable
含义:请求的范围无效或超出文件实际长度。
适用场景:
客户端请求超出文件大小的区间。
断点续传时,客户端本地记录的已下载范围超过服务器文件大小。
特点:
响应会带
Content-Range
,告诉客户端文件总长度:Content-Range: bytes */1024000
客户端需重新计算下载区间或从头下载。
示例:
GET /file.zip HTTP/1.1
Host: example.com
Range: bytes=1024000-1025000
HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */1024000
说明:客户端请求了 1024000~1025000 字节,但文件总长度只有 1024000 字节,所以服务器返回 416。
总结对比表
响应码 | 含义 | 请求要求 | 典型场景 |
---|---|---|---|
200 OK | 成功返回完整资源 | 可以带或不带 Range,但服务器返回整个资源 | 普通下载 |
206 Partial Content | 成功返回部分内容 | 必须带 Range 请求 | 断点续传、分片下载 |
416 Range Not Satisfiable | 请求范围无效 | 带 Range,但超出文件长度 | 断点续传失败 |
💡 实际开发中注意:
如果服务器不支持断点续传,带
Range
请求也可能返回 200。断点续传前要检查本地已下载文件大小,避免请求超出范围导致 416。
Content-Range
是关键头信息,标明当前返回的字节区间。