请求超出文件长度返回416错误,是否符合HTTP规范?
疑问:请求超出文件长度的Byte-Range返回416错误,是否符合RFC规范?
我发起Range: bytes=0-65536的HTTP请求时,收到了416 Range Not Satisfiable错误,但目标文件实际只有3356字节。
查RFC9110的Byte-Range规范,里面明确:客户端可以在不知道文件大小的情况下限制请求字节数;如果范围的结束值缺失,或者结束值大于等于文件当前长度,这个字节范围应该被解释为文件的剩余部分——也就是服务器要把结束值替换成文件长度减一。按这个规则,我应该能拿到整个文件才对,但实际却报错了。
现在的情况是只有当请求的Byte-Range不超过文件长度时才能成功,但我需要客户端不用提前知道文件大小(文件大小差异很大)。请求的是cloud-optimized-geotiff文件,由Vite开发服务器提供,通过OpenLayers和geotiff.js发起请求。
以下是DevTools里的请求和响应详情:
General信息
Request URL: http://localhost:3000/scenarios/1/1_parcel_fill.tif Request Method: GET Status Code: 416 Range Not Satisfiable Remote Address: [::1]:3000 Referrer Policy: strict-origin-when-cross-origin
响应头
Access-Control-Allow-Origin: * Connection: keep-alive Content-Length: 0 Content-Range: bytes */3356 Date: Wed, 21 Sep 2022 21:38:19 GMT Keep-Alive: timeout=5
请求头
Accept: */* Accept-Encoding: identity Accept-Language: en-US,en;q=0.9 Cache-Control: no-cache Connection: keep-alive Host: localhost:3000 Pragma: no-cache Range: bytes=0-65536 Referer: http://localhost:3000/ sec-ch-ua: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Sec-Fetch-Dest: empty Sec-Fetch-Mode: cors Sec-Fetch-Site: same-origin User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
到底是我误解了规范,还是这个请求确实无法被满足?
内容的提问来源于stack exchange,提问作者davemfish
相关产品推荐
相关产品推荐

