0

阅读以下主题后:

使用 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 中被阻止,导致:“警告:不允许添加标准头 [...]...”警告。

4

1 回答 1

0

支持将在未来的 Restlet Framework 2.3.8 版本中添加。

于 2016-04-16T13:49:22.900 回答