我的缓存服务器拒绝缓存200OK响应,当它有一个Content-Range头的时候。这是符合RFC2616的实现。
但是,需要缓存200OK响应,即使它有Content-Range头。这是允许的,还是违反了RFC规范?
发布于 2019-12-19 17:22:18
根据MDN docs for Range的说法
服务器也可以忽略
Range头并返回整个文档,状态码为200。
类似地,Partial request下的MDN docs for range requests状态响应
换句话说,如果浏览器接收到响应Range报头的200,则可以假定服务器不支持部分响应。目前,Chrome就是这么做的。即使你发回了整个文档,如果Chrome在请求视频的一部分时收到了一个200,播放条/搜索栏就不能工作了。
至于Content-Range是否被允许,我还没有找到任何文档。据我所知,如果你发送一个200来响应Range头,那么Content-Range头是没有意义的,因为你应该发送整个文件。换句话说,它可以被忽略;它只对206有意义。
为了回答您的另一个问题,因此,无论是否存在Content-Range,您都可以缓存200。还可以缓存带有Content-Range的206:
默认情况下,
A 206响应是可缓存的;即,除非显式缓存控制另有说明(参见RFC7234的4.2.2节)。
-- Section 4.1 of RFC 7233的最后一段。
https://stackoverflow.com/questions/43133321
复制相似问题