阅读以下主题后:
使用 Restlet 设置自定义 Content-Range 标头
我尝试在实体的范围中设置自定义单位名称。这并不能解决问题。
final Range range = new Range();
range.setUnitName("items");
range.setIndex(0);
range.setSize(20);
[...]
getResponseEntity().setRange(range);
getResponseEntity().setSize(100);
响应现在包含以下标头:
Content-Range:"items 0-19/100"
但是 Restlet 也会读取 range.size(在本例中为 20)并将其自动作为 Content-Length。结果是:
Content-Length:"20"
这会导致客户端(例如,浏览器在 20 字节后停止读取。(这也会导致服务器上的空指针异常,因为输出流意外关闭。)
官方 Restlet 文档:http ://restlet.com/technical-resources/restlet-framework/guide/2.3/core/http-headers-mapping
说 Content-Length 作为 message.entity.size 可用,但这需要设置为 100 才能在 Content-Range 中实现所需的字符串。这对我来说似乎是一个错误,因为 range.size 用于计算内容长度,而不是实体大小。
我不能手动设置 Content-Length,因为这也是一个标准的标头,并且对标准标头的任何手动更改都会被导入。
在提到的线程中提出的“修复”仅更改指定范围的单位名称 - 而不是实际单位。它仍然被解释为无法使用的字节。
使用 Range 中的值两次 - 对于 content-range 和 content-legth 似乎是问题所在。
是否有任何新方法可以手动覆盖 headers 或使它们与 dojo 兼容?
手动更改在 ServerAdapter 调用的 HeaderUtils 中被阻止,导致:“警告:不允许添加标准头 [...]...”警告。