空集合和HTTP头部Content-Range

11
如何在RESTful接口中处理空集合,使用Content-Range的items标头?
例如,有42条记录,请求Range: items=0-41将返回所有内容,并且响应标头将为:Content-Range: items 0-41/42
但是,当没有任何记录时,我们该如何处理Content-Range标头?感谢任何帮助。
编辑:
我的意思是,返回一个空集合,服务器可能希望返回Content-Range: items x-y/0,其中xy是与0不同的值。但是哪一个?我认为这是一个棘手的问题,规范没有提到。
2个回答

6

实际上服务器应该响应HTTP 416请求不可满足,并带有Content-Range: */0


真的吗?当集合为空时,会有完全不同的状态码?我期望结果是状态码200和一个空数组。不过Content-Range: */0倒是有道理。 - Stijn de Witt
1
进一步研究后,我认为416状态是指请求包含指定无效范围的“Range”标头时使用的。但是,如果未指定范围,则仍应应用默认范围。个人认为,即使指定了范围,416也非常不友好。如果我请求“Range:0-99”,我只想获取前100个项目的第一页。谁在乎实际上有多少?我会读取响应头来弄清楚这一点。但是,如果返回状态416,我们基本上强制客户端首先单独请求结果的总数。这没有任何意义。 - Stijn de Witt
如果范围的开始超出了边界,我认为416是有意义的。但是强制客户端首先获取总数以便调整范围的结束以保持在总数内,会导致一个非常不直观(而且慢)的API。 - Stijn de Witt

0
如果您在X-Y/0处得到非零数字,则服务器的响应无效(损坏)。请报告错误。

1
好的。那么如果集合为空,服务器应该如何回答呢?使用 Content-Range: 0-0/0 是不可能的,因为 0-0 表示集合中有 1 条记录 - T5i
1
没有内容,因此您不需要返回Content-Range头。如果必须这样做,规范允许在以下情况下返回星号(“*”):“在生成响应时未知实例长度。”(来自RFC) - Kylar
1
“没有内容,因此您不会返回Content-Range标头。”,我不确定这是否有意义。为什么要将空集合视为异常(没有范围标头和建议的416状态,如接受的答案所示)?在我看来,这毫无意义。空集合是正常的,没有理由将其视为某种奇怪的边缘情况。 - Stijn de Witt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接