API接口返回416错误时如何通过Content-Range头确认资源长度
当服务器无法满足请求的字节范围时,会返回416错误,此时需检查响应头中的Content-Range字段以确认当前资源长度。
确认416错误的响应头格式
服务器返回416状态码时,必须在响应头中包含Content-Range字段来告知客户端无法满足的请求范围。该字段的标准格式为bytes */当前资源长度,其中星号表示请求的范围无效。例如,Content-Range: bytes */800表示服务器资源总长度为800字节,而客户端请求的范围超出了这个长度。
如果响应头中缺少Content-Range字段,或者格式不符合bytes */长度的要求,则该响应可能不是标准的416错误。客户端应检查响应头是否完整,并确认状态码确实为416,以避免误判。MDN文档指出,该字段应紧跟在状态行之后,并在响应体之前发送。
排查请求范围超出资源长度的问题
416错误最常见的原因是客户端请求的字节范围起始位置大于资源的实际长度。例如,请求1000-1999字节,但资源只有800字节。此时服务器会返回416,并在Content-Range头中显示资源的实际长度。客户端应对比请求的起始位置与响应头中显示的长度,判断是否超出了范围。
另一种情况是请求的范围语法正确,但实际包含的字节数超过了资源长度。例如,请求0-1000字节,但资源只有800字节。服务器同样会返回416,并告知资源的实际长度。客户端需确保请求的范围在0到资源长度-1之间,以避免此类错误。
验证416错误的复现步骤
要复现416错误,可以使用curl命令发送一个超出资源长度的范围请求。例如,请求一个800字节的文件的第1000字节开始的内容。命令如下:curl -H 'Range: bytes=1000-1999' http://example.com/file.txt。服务器将返回416状态码,并在响应头中显示Content-Range: bytes */800。
验证结果时,检查响应头中的Content-Range字段是否为bytes */800。如果字段值正确,说明服务器正确识别了范围超出的问题。如果字段值不正确或缺失,说明服务器可能未正确处理范围请求。客户端应根据该字段调整请求范围,重新发送请求。
处理416错误的后续操作
当客户端收到416错误时,浏览器通常会中止操作,例如停止下载,或将下载视为不可恢复。客户端也可以选择重新请求整个文档,而不附带Range头。例如,发送一个不带Range头的请求:curl http://example.com/file.txt。服务器将返回200状态码和完整的资源内容。
如果客户端需要继续下载,应调整请求范围,确保起始位置在0到资源长度-1之间。例如,请求0-799字节。服务器将返回206状态码和部分内容。客户端应根据Content-Range头中的长度信息,动态调整请求范围,以实现断点续传功能。
资料与延伸阅读
你可以通过以下原始资料核对文中概念,并继续深入阅读。