4

一般的な「accept-ranges」ヘッダーはバイトです。ただし、他にも数十種類の範囲が存在する可能性があることは理にかなっています。

日付範囲を取る API リソースを作成しています。accept-ranges ヘッダーで日付を指定し、クライアントからの範囲ヘッダーを期待することは理にかなっていますか?

4

1 に答える 1

4

私は Accept-Ranges & Range ヘッダーがページング データを渡すための良い候補のように思われるのと同じ主題を研究してきました。

HTTP1.1 仕様には次のように記載されています。

範囲単位 = バイト単位 | その他の範囲ユニット

これは、独自のユニットタイプを使用できることを示唆していますが、続けて言います

HTTP/1.1 で定義されている唯一の範囲単位はバイトです。HTTP/1.1 実装は、他の単位を使用して指定された範囲を無視する場合があります。

サポートされている唯一の範囲単位はバイトですが、このステートメントは、HTTP 1.1 が他の単位の範囲を無視してもよい (すべきではない) ことを強調しています。

ただし、HTTP ヘッダーには、メッセージ本文が表すものではなく、メッセージ本文に関連するデータが含まれます。そのため、バイト範囲はそれが表すリソースに関係なくメッセージ本文に適用できるため、バイト単位のサポートのみが意味を持ちます。一方、日付範囲はコンテキスト ベースの範囲であり、特定の状況でのみ適用されます。

質問で述べたように、日付範囲を実装する方法は、その URL の HEAD または OPTIONS リクエストへの応答でカスタムAccept-Rangesヘッダーを提供し、同じ URL への GET リクエストでRangeヘッダーを渡すことです。

このように使用するかどうかは開発者次第だと思いますが、私にはこの四角いペグには穴が少し丸すぎます! クエリ文字列で値を渡します。

参照:

3.12 Range Units

HTTP/1.1 allows a client to request that only part (a range of) the response entity be included within the response. HTTP/1.1 uses range units in the Range (section 14.35) and Content-Range (section 14.16) header fields. An entity can be broken down into subranges according to various structural units.

      range-unit       = bytes-unit | *other-range-unit*
      bytes-unit       = "bytes"
      other-range-unit = token

The only range unit defined by HTTP/1.1 is "bytes". HTTP/1.1 implementations MAY ignore ranges specified using other units.

HTTP/1.1 has been designed to allow implementations of applications that do not depend on knowledge of ranges.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.12

于 2012-10-23T12:49:44.750 に答える