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 バイト後に読み取りを停止します (たとえば、ブラウザは 20 バイト後に読み取りを停止します (出力ストリームが予期せず閉じられるため、これにより、サーバーでヌル ポインター例外も発生します)。)

Restlet の公式ドキュメント: http://restlet.com/technical-resources/restlet-framework/guide/2.3/core/http-headers-mapping

Content-Length は message.entity.size として利用可能ですが、Content-Range で目的の文字列を実現するには、これを 100 に設定する必要があります。range.size はエンティティのサイズではなくコンテンツの長さを計算するために使用されるため、これは私にはバグのように見えます。

Content-Length を手動で設定することはできません。これは標準ヘッダーでもあり、標準ヘッダーへの手動の変更は無視されるためです。

言及されたスレッドで提案された「修正」は、指定された範囲の実際のユニットではなく、ユニット名のみを変更します。そのままでは使用できないため、バイトとして解釈されます。

Range の値を 2 回使用する - content-range と content-legth が問題のようです。

ヘッダーを手動でオーバーライドする、または dojo 互換にする新しい方法はありますか?

ServerAdapter によって呼び出される HeaderUtils で手動の変更がブロックされ、「警告: 標準ヘッダーの追加 [...] は許可されていません...」という警告が発生します。

4

1 に答える 1