什么是从服务器返回Http 416预期的行为

我有一个服务器,有时当客户端要求一个文件,如果它的请求头范围可能会超过文件的长度,所以服务器返回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] 

你应该在这种情况下服务206。

RFC 7233清楚地表明,如果请求范围的任何部分是可满足的,那么即使部分范围不可满足,也是您发回的内容。

从第2.1节:

如果有效的字节范围集合包括至less一个字节范围规范,其中第一字节pos小于当前表示的长度,或者至less一个后缀字节范围规范具有非字节范围规范,零后缀长度,则字节范围集合是可满足的。 否则,字节范围集是不可满足的。

所以,如果你的文件是1000字节,而客户端请求字节= 501-2000,你将返回一个206,并提供字节501-1000。 (请记住,范围从零开始,所以要小心一个一个的错误。)

在范围的任何部分都不能满足的情况下,发送416错误,但不发送任何文件内容。 错误的全部是没有什么可发送的!