[11] [DFN[[CODE(HTTP)@en[[[Accept-Ranges:]]]]]] [[ヘッダー]]は、
[[対象資源]]が対応している[[範囲単位]]を表します。

;; [12] 似た名前の [CODE(HTTP)@en[[[Accept:]]]] などの[[ヘッダー]]とは異なり、
この[[ヘッダー]]は[[応答メッセージ]]で使われます。

* 仕様書

[REFS[
- [1] '''[CITE@en[RFC 7233 - Hypertext Transfer Protocol (HTTP/1.1): Range Requests]] ([TIME[2014-09-11 09:57:55 +09:00]] 版) <https://tools.ietf.org/html/rfc7233#section-2.3>'''
- [13] [CITE['''['''MS-XWDSEARCH''']''': Web Distributed Authoring and Versioning (WebDAV) Extensions for Search]] ([TIME[2014-09-17 03:14:12 +09:00]] 版) <http://webcache.googleusercontent.com/search?q=cache:JudZmDtQJ7gJ:download.microsoft.com/download/5/0/1/501ED102-E53F-4CE0-AA6B-B0F93629DDC6/Exchange/%5BMS-XWDSEARCH%5D.pdf#19>
]REFS]

* 意味

[3] [CODE(HTTP)@en[[[Accept-Ranges:]]]] [[ヘッダー]]は、
[[鯖]]が[[対象資源]]について[[範囲要求]]に対応していることを表します [SRC[>>1]]。

* 構文

[4] 1つ[[以上]]の[[範囲単位]]の[[リスト]] ([CODE(HTTP)[#]]) か、
[CODE(HTTP)@en[[[none]]]] の値を指定できます [SRC[>>1]]。

[FIG(railroad)[
= |
== =
=== [[範囲単位]]
=== *
==== [[OWS]]
==== [CODE(HTTP)[[[,]]]]
==== [[OWS]]
==== [[範囲単位]]
== [CODE(HTTP)@en[[[none]]]]
]FIG]

[8] [[範囲単位]]は、[[対象資源]]がその[[範囲単位]]を使った[[範囲要求]]に対応していることを表します。

[9] [DFN[[CODE(HTTP)@en[[[none]]]]]] は、[[対象資源]]が[[範囲要求]]に対応していないことを表します。

* 文脈

[5] [[対象資源]]への[[バイト範囲]]の[[範囲要求]]に対応している[[起源鯖]]は、
[CODE(HTTP)@en[[[Accept-Ranges:]] [[bytes]]]] を送信して構いません [SRC[>>3]]。

;; [6] しかし[[クライアント]]は必ずしもこれを確認しなくても[[範囲要求]]を送信して構いません
[SRC[>>3]]。

[7] [[対象資源]]への[[範囲要求]]に対応していない[[鯖]]は、
[CODE(HTTP)@en[[[Accept-Ranges:]] [[none]]]] を送信して構いません [SRC[>>3]]。

[14] >>13 は[[範囲単位]] [CODE(HTTP)@en[[[rows]]]] を使う前に
[CODE(HTTP)@en[[[OPTIONS]]]] [[要求]]を送信して [CODE(HTTP)@en[[[Accept-Ranges:]]]]
を確認することを求めています。

* 実装

[17] [[Apache]] も [[nginx]] も、[[静的ページ]]での [CODE(HTTP)[[[200]]]]
[[応答]]で [CODE(HTTP)@en[[[Accept-Ranges:]] [[bytes]]]]
を送信するようです。 [TIME[2014-11-07T10:00:48.00Z]]

* 歴史

[FIG(quote)[
[FIGCAPTION[
[2] RFC 2068・2616 (HTTP/1.1)  14.5 Accept-Ranges
]FIGCAPTION]

> The Accept-Ranges response-header field allows the server to
indicate its acceptance of range requests for a resource:

[CODE(HTTP)[Accept-Range]] 応答頭欄では、
サーバーが資源に対する範囲要求の受入れを示すことができます。


>
- Accept-Ranges     = "Accept-Ranges" ":" acceptable-ranges
- acceptable-ranges = 1#range-unit | "none"

> Origin servers that accept byte-range requests MAY send

[[byte-range]] 要求を受け入れる[[起源サーバー]]は、

>
- Accept-Ranges: bytes
 
>but are not required to do so. Clients MAY generate byte-range
requests without having received this header for the resource
involved. [INS[Range units are defined in section 3.12.]]

を送信しても'''構いません'''が、
必ずしもそうする必要はありません。
クライアントは含まれる資源についてこの頭を受信していなくても
byte-range 要求を生成しても'''構いません'''。 [INS[範囲単位は 3.12 節で定義しています。]]

> Servers that do not accept any kind of range request for a
resource MAY send

資源に対してどの種類の単位も受け入れないサーバーは、

>
-           Accept-Ranges: none
 
> to advise the client not to attempt a range request.

を送信してクライアントに範囲要求の試行を行わないよう助言しても'''構いません'''。
]FIG]

* メモ

[10] [[HTTP]] では [CODE(HTTP)@en[[[bytes]]]] のみしか事実上使われておらず、
また[[クライアント]]は別の[[要求]]と[[応答]]を予め当該[[対象資源]]について実行していない限り
[CODE(HTTP)@en[[[Accept-Ranges:]]]] を受け取る方法がありませんから、
[[クライアント]]にとっては敢えてこの[[ヘッダー]]を確認する手段も意味もあまりありません。
[[範囲要求]]に対応していない場合は無視して通常の[[要求]]として処理することになっていますから、
[[範囲要求]]を使う[[クライアント]]は普通ははじめから[[範囲要求]]を送信します。

[15] [CITE@en-us[Protocol for Media Fragments 1.0 Resolution in HTTP]]
( ([TIME[2011-12-01 08:49:26 +09:00]] 版))
<http://www.w3.org/TR/media-frags-recipes/#contentrangemappingheaderdef>

[16] ( ([TIME[2012-02-01 17:56:32 +09:00]] 版))
<http://www.qtc.jp/3GPP/Specs/26234-a30.pdf>