我有一台服务器,有时当客户端请求文件时,如果其请求标头范围可能超出文件的长度,则服务器返回 416 状态代码。但我想知道它是否也应该写入文件内容?还是只返回 416 而没有内容?
解释W3 网站不够清楚。
我从 W3 网站了解到,它应该写入 Content-Range 标头(从 0 开始?)。因此,如果内容长度为 10 个字节。响应应该如下所示
HTTP/1.1 416
Content-Range: bytes 0-9/10
Content-Length: 10
[10 bytes FILE CONTENT HERE]
答案1
在这种情况下,您应该得到 206 分。
RFC 7233明确表示,如果任何部分如果请求的范围是可满足的,那么这就是您发回的内容,即使部分范围不可满足。
来自第2.1节:
如果有效字节范围集至少包含一个首字节位置小于当前表示长度的字节范围规范,或至少包含一个后缀长度非零的后缀字节范围规范,则该字节范围集是可满足的。否则,该字节范围集是不可满足的。
因此,如果您的文件为 1000 字节,而客户端请求字节数为 501-2000,则您将返回 206 并提供字节数 501-1000。(请记住,范围从零开始,因此请注意差一错误。)
如果不如果部分范围是可满足的,则发送 416 错误,但不会发送任何文件内容。错误的关键在于没有任何内容可发送!