<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <dfn><code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Range:</anchor></code></dfn> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">資源</anchor>の一部分だけを<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>に含めるべきことを指定するものです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> HTTP では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイト</anchor>単位で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体</anchor>の一部を取得する方法が、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RTSP</anchor> では時刻を指定する方法が標準化されています。
大きなファイルの転送を分割して行ったり、
分割再生可能に設計された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">音声</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">動画</anchor>を途中から取得して再生するなどの実装が可能になります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> では <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Range:</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>は
<code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GET</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>でのみ使えます。</p><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <strong><cite xml:lang="en">RFC 7233 - Hypertext Transfer Protocol (HTTP/1.1): Range Requests</cite> (<time>2014-09-11 09:57:55 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7233#section-3.1">https://tools.ietf.org/html/rfc7233#section-3.1</anchor-external></strong></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end> <cite xml:lang="en">RFC 7233 - Hypertext Transfer Protocol (HTTP/1.1): Range Requests</cite> (<time>2014-09-11 09:57:55 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7233#section-4.1">https://tools.ietf.org/html/rfc7233#section-4.1</anchor-external></li></ul></refs></section><section><h1>意味</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GET</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>における <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Range:</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">選択された表現</anchor>のデータの1つ以上の部分範囲のみを転送することを求めるものです
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;14</anchor-internal></src>。</p></section><section><h1>構文</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> 値は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">範囲単位</anchor>、<code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">=</anchor></code>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">範囲単位</anchor>依存の値を並べたものです <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;14</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">範囲単位</anchor>依存の値の構文はそれぞれの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">範囲単位</anchor>の仕様によります。
ただし <code class="ABNF" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">VCHAR</anchor></code> (<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+0021</anchor></code>-<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+007E</anchor></code>)
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>の1つ以上の列とされています。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;14</anchor-internal></src></p><figure class="railroad"><ol><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">範囲単位</anchor></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">=</anchor></code></li><li>+<ol><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+0021</anchor></code>-<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+007E</anchor></code></li></ol></li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>は、対象となるデータを含む部分全体を1つの範囲とした場合よりも処理や転送が非効率な形の複数の範囲の要求を送信する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">べきではありません</strong></anchor>
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;14</anchor-internal></src>。</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> 例えば <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bytes</anchor>=10-12,50-55,30-40</code> のような指定よりは、
<code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bytes</anchor>=10-55</code> の方が適切と思われます。</p></example><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>は特に事情がない限り<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">昇順</anchor>に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">範囲</anchor>を並べる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">べきです</strong></anchor>
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;14</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>は、 <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/byteranges</anchor></code> に対応していない場合、
複数の範囲を指定しては<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;38</anchor-internal></src>。</p></section><section><h1>処理モデル</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">範囲要求</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">不完全メッセージ</anchor>を参照。</p></section><section><h1>歴史</h1><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> RFC 2068 (HTTP/1.1) 14.36・RFC 2616 (HTTP/1.1) 14.35 Range</figcaption><section><h1>RFC 2068 14.36.1・RFC 2616 14.35.1 Byte Ranges</h1><blockquote><p>Since all HTTP entities are represented in HTTP messages as sequences
of bytes, the concept of a byte range is meaningful for any HTTP
entity. (However, not all clients and servers need to support byte-range operations.)</p></blockquote><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体</anchor>は HTTP <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メッセージ</anchor>中ではすべて<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイト列</anchor>として表現されますから、
任意の HTTP 実体に対してバイト範囲という概念が意味を持ちます。
(しかし、すべてのクライアントと鯖がバイト範囲操作に対応する必要はありません。)</p><blockquote><p>Byte range specifications in HTTP apply to the sequence of bytes in
the entity-body (not necessarily the same as the message-body).</p></blockquote><p>HTTP でのバイト範囲指定は、 <code class="ABNF"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entity-body</anchor></code>
(必ずしも <code class="ABNF"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">message-body</anchor></code> と同じではない。) のバイト列に適用します。</p><blockquote><p>A byte range operation <del>may</del> <ins>MAY</ins> specify a single range of bytes, or a set
of ranges within a single entity.</p></blockquote><p>バイト範囲操作は単一の範囲か、または単一の実体内の範囲の集合を指定して<strong>構いません</strong>。</p><blockquote><ul><li>ranges-specifier = byte-ranges-specifier</li><li>byte-ranges-specifier = bytes-unit &quot;=&quot; byte-range-set</li><li>byte-range-set  = 1#( byte-range-spec | suffix-byte-range-spec )</li><li>byte-range-spec = first-byte-pos &quot;-&quot; [last-byte-pos]</li><li>first-byte-pos  = 1*DIGIT</li><li>last-byte-pos   = 1*DIGIT</li></ul></blockquote><blockquote><p>The first-byte-pos value in a byte-range-spec gives the byte-offset
of the first byte in a range. The last-byte-pos value gives the
byte-offset of the last byte in the range; that is, the byte
positions specified are inclusive. Byte offsets start at zero.</p></blockquote><p><code class="ABNF">byte-range-spec</code> の <code class="ABNF">first-byte-pos</code>
値は、範囲中の最初のバイトのバイト offset
を与えます。 <code class="ABNF">last-byte-pos</code> 値は範囲中の最後のバイトのバイト
offset を与えます。つまり、指定されたバイト位置は範囲に含まれます。
バイト offset は零から始めます。</p><blockquote><p>If the last-byte-pos value is present, it <del>must</del> <ins>MUST</ins> be greater than or
equal to the first-byte-pos in that byte-range-spec, or the byte-range-spec
is <ins>syntactically</ins> invalid. The recipient of <ins>a byte-range-set that includes one or more syntactically</ins> <del>an</del> invalid byte-range-spec <ins>values MUST</ins> <del>must</del> ignore <del>it</del> <ins>the header field that includes that byte-range-set</ins>.</p></blockquote><p><code class="ABNF">last-byte-pos</code> 値が示されるときは、その <code class="ABNF">byte-range-spec</code>
の <code class="ABNF">first-byte-pos</code> 以上でなければ<strong>なりません</strong>。
そうでなければ<ins>構文的に</ins>不当です。<ins>一つ以上の構文的に</ins>不正な 
<code class="ABNF">byte-range-spec</code> <ins>値を含む <code class="ABNF">byte-range-set</code></ins>
の受信者は、<ins>その <code class="ABNF">byte-range-set</code> を含む頭欄を</ins>無視しなければ<strong>なりません</strong>。</p><blockquote><p>If the last-byte-pos value is absent, or if the value is greater than
or equal to the current length of the entity-body, last-byte-pos is
taken to be equal to one less than the current length of the entity-body in bytes.</p></blockquote><p><code class="ABNF">last-byte-pos</code> が欠けている場合、あるいは <code class="ABNF">entity-body</code>
の現在の長さ以上のときは、 <code class="ABNF">last-byte-pos</code> は現在の
<code class="ABNF">entity-body</code> のバイト長より一小さいものと取ります。</p><blockquote><p>By its choice of last-byte-pos, a client can limit the number of
bytes retrieved without knowing the size of the entity.</p></blockquote><p><code class="ABNF">last-byte-pos</code> を選ぶことにより、クライアントは実体の寸法を知らなくても取り出すバイト数を制限できます。</p><blockquote><ul><li>suffix-byte-range-spec = &quot;-&quot; suffix-length</li><li>suffix-length = 1*DIGIT</li></ul></blockquote><blockquote><p>A suffix-byte-range-spec is used to specify the suffix of the
entity-body, of a length given by the suffix-length value. (That is,
this form specifies the last N bytes of an entity-body.) If the
entity is shorter than the specified suffix-length, the entire
entity-body is used.</p></blockquote><p><code class="ABNF">suffix-byte-range-spec</code> は、 <code class="ABNF">entity-body</code>
の接尾部を <code class="ABNF">suffix-length</code> 値で与えた長さ分指定するのに使います。
(つまり、この書式は <code class="ABNF">entity-body</code> の最後の <var>N</var>
バイトを指定します。) <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体</anchor>が指定された <code class="ABNF">suffix-length</code>
よりも短い場合には、 <code class="ABNF">entity-body</code> 全体を使います。</p><insert xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><blockquote xmlns="http://www.w3.org/1999/xhtml"><p>If a syntactically valid byte-range-set includes at least one byte-range-spec whose first-byte-pos is less than the current length of
the entity-body, or at least one suffix-byte-range-spec with a non-zero suffix-length, then the byte-range-set is satisfiable.
Otherwise, the byte-range-set is unsatisfiable. If the byte-range-set
is unsatisfiable, the server SHOULD return a response with a status
of 416 (Requested range not satisfiable). Otherwise, the server
SHOULD return a response with a status of 206 (Partial Content)
containing the satisfiable ranges of the entity-body.</p></blockquote><p xmlns="http://www.w3.org/1999/xhtml">構文的に妥当な <code class="ABNF">byte-range-set</code> が <code class="ABNF">entity-body</code>
の現在の長さより小さい <code class="ABNF">first-byte-pos</code> の
<code class="ABNF">byte-range-spec</code> を最低一つ含んでいる場合や、
非零 <code class="ABNF">suffix-length</code> の <code class="ABNF">suffix-byte-range-spec</code>
を最低一つ含んでいる場合には、 <code class="ABNF">byte-range-set</code> は満足可能です。
そうでなければ、 <code class="ABNF">byte-range-set</code> は満足不能です。
<code class="ABNF">byte-range-set</code> が満足不能であれば、鯖は状態
<code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">416</anchor></code> (要求範囲満足不能) で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>を返す<strong>べきです</strong>。
そうでなければ、鯖は満足可能範囲の <code class="ABNF">entity-body</code>
を含んだ <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">206</anchor></code> (部分内容) 状態で応答を返す<strong>べきです</strong>。</p></insert><blockquote><p>Examples of byte-ranges-specifier values (assuming an entity-body of length 10000):</p></blockquote><p><code class="ABNF">byte-ranges-specifier</code> 値の例
(長さ 10000 の <code class="ABNF">entity-body</code> を仮定):</p><blockquote><ul><li><del>o</del> <ins>-</ins> The first 500 bytes (byte offsets 0-499, inclusive): bytes=0-499</li><li><del>o</del> <ins>-</ins> The second 500 bytes (byte offsets 500-999, inclusive):
bytes=500-999</li><li><del>o</del> <ins>-</ins> The final 500 bytes (byte offsets 9500-9999, inclusive):
bytes=-500</li><li><del>o</del> <ins>-</ins> Or bytes=9500-</li><li><del>o</del> <ins>-</ins> The first and last bytes only (bytes 0 and 9999):  bytes=0-0,-1</li><li><del>o</del> <ins>-</ins> Several legal but not canonical specifications of the second 500
bytes (byte offsets 500-999, inclusive):<ul><li>bytes=500-600,601-999</li><li>bytes=500-700,601-999</li></ul></li></ul></blockquote></section><section><h1>RFC 2068 14.36.2・RFC 2616 14.35.2 Range Retrieval Requests</h1><blockquote><p>HTTP retrieval requests using conditional or unconditional GET
methods <del>may</del> <ins>MAY</ins> request one or more sub-ranges of the entity, instead of
the entire entity, using the Range request header, which applies to
the entity returned as the result of the request:</p></blockquote><p>条件付または条件付でない <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GET</anchor></code> 方式の HTTP 取り出し要求は、
要求の結果として返される実体に適用されるものである <code class="HTTP">Range</code> 要求頭を使って、
実体全体ではなく、実体の一つ以上の部分範囲を要求して<strong>構いません</strong>。</p><blockquote><ul><li>Range = &quot;Range&quot; &quot;:&quot; ranges-specifier</li></ul></blockquote><blockquote><p>A server MAY ignore the Range header. However, HTTP/1.1 origin
servers and intermediate caches <del>SHOULD</del> <ins>ought to</ins> support byte ranges when
possible, since Range supports efficient recovery from partially
failed transfers, and supports efficient partial retrieval of large
entities.</p></blockquote><p>鯖は、 <code class="HTTP">Range</code> 頭を無視しても<strong>構いません</strong>。
しかし、 HTTP/1.1 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">起点鯖</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">中間キャッシュ</anchor>は、
可能な時にはバイト範囲に対応するべきです。なぜなら、
<code class="HTTP">Range</code> は部分的に失敗した転送から効率よく回復することや大きな実体の部分を効率的に取り出すことを支援するからです。</p><blockquote><p>If the server supports the Range header and the specified range or
ranges are appropriate for the entity:<ul><li><del>o</del> <ins>-</ins> The presence of a Range header in an unconditional GET modifies
what is returned if the GET is otherwise successful. In other
words, the response carries a status code of 206 (Partial
Content) instead of 200 (OK).</li><li><del>o</del> <ins>-</ins> The presence of a Range header in a conditional GET (a request
using one or both of If-Modified-Since and If-None-Match, or
one or both of If-Unmodified-Since and If-Match) modifies what
is returned if the GET is otherwise successful and the condition
is true. It does not affect the 304 (Not Modified) response
returned if the conditional is false.</li></ul></p></blockquote><p>鯖が <code class="HTTP">Range</code> 頭に対応し、指定された範囲(群)がその実体について適当であるなら、<ul><li>条件付きでない <code class="HTTP">GET</code> での <code class="HTTP">Range</code> 頭の存在は、
<code class="HTTP">GET</code> が本来成功であるなら返されるものを修飾します。
言い換えれば、応答は状態符号 <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">200</anchor></code> (了解) 
の代わりに <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">206</anchor></code> (部分内容) となります。</li><li>条件付き <code class="HTTP">GET</code>
(<code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">If-Modified-Since</anchor></code> と
<code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">If-None-Match</anchor></code> の一方又は両方、もしくは
<code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">If-Unmodified-Since</anchor></code> と
<code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">If-Match</anchor></code> の一方又は両方を使った要求) での
<code class="HTTP">Range</code> 頭の存在は、 <code class="HTTP">GET</code>
が本来成功であって、条件が真であるなら返されるものを修飾します。
条件が偽であるときに返される <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">304</anchor></code> (未修正)
応答には影響しません。</li></ul></p><blockquote><p>In some cases, it <del>may</del> <ins>might</ins> be more appropriate to use the If-Range
header (see section 14.27) in addition to the Range header.</p></blockquote><p>場合によっては、 <code class="HTTP">Range</code> 頭に加えて <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">If-Range</anchor></code>
頭もあわせて使ったほうがより適切かもしれません。</p><blockquote><p>If a proxy that supports ranges receives a Range request, forwards
the request to an inbound server, and receives an entire entity in
reply, it SHOULD only return the requested range to its client. It
SHOULD store the entire received response in its cache<del>,</del> if that is
consistent with its cache allocation policies.</p></blockquote><p>範囲に対応した<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">串</anchor>が <code class="HTTP">Range</code> 要求を受信し、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">上り</anchor>サーバーに要求を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">転送</anchor>し、返事の実体全体を受信したら、
クライアントには要求された範囲だけを返す<strong>べきです</strong>。
受信した応答が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">キャッシュ</anchor>割当て方針に沿っているなら、
受信した応答全体をキャッシュに蓄積する<strong>べきです</strong>。</p></section></figure><section><h1>地理的座標を指定する実装例</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <samp class="HTTP">Range: lats=; lons=100-120 &quot;10.0N 20.0S 100.1E 120W&quot;</samp> : <em>Met-cast HTTP</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://zowie.metnet.navy.mil/~spawar/JMV-TNG/Met-Cast-HTTP.html#req.header.accept">http://zowie.metnet.navy.mil/~spawar/JMV-TNG/Met-Cast-HTTP.html#req.header.accept</anchor-external>。データを要求する地域を表すらしい。 HTTP/1.1 の一応用なんだけど、これじゃあ不適合じゃないのかね?</p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <cite>Met-cast HTTP</cite> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">oleg-at-pobox.com</anchor> 著, <time>2003-10-07 04:24:02 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://okmij.org/JMV-TNG/Met-Cast-HTTP.html">http://okmij.org/JMV-TNG/Met-Cast-HTTP.html</anchor-external></figcaption><blockquote><p>This header will be mandatory in version 2.0. It should tell the bounding box for an area on the globe for which data are requested.</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;7</anchor-internal> 最後の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引用文字列</anchor>の部分が引数にしてあれば、
「HTTP/1.1 には不適合だけど RTSP を考慮しても整合性のある拡張だ」
とかなんとか好意的に評価することも可能だけど。。。</p></section><section><h1>XPointer や RDQL を指定する実装例</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://web.archive.org/web/20050306041708/http://www.mindswap.org/papers/swrp-iswc04.pdf">http://web.archive.org/web/20050306041708/http://www.mindswap.org/papers/swrp-iswc04.pdf</anchor-external><ul><li><cite>A Semantic Web Resource Protocol: XPointer and HTTP</cite>
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.mindswap.org/papers/swrp-iswc04.pdf">http://www.mindswap.org/papers/swrp-iswc04.pdf</anchor-external></li></ul></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;10</anchor-internal> この論文では <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPointer</anchor> を使って資源の一部分を取り出す方法を提案しています。</p><pre class="HTTP example">Range: xpointer=element(a12)</pre><p>結果は <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code>
で複数の XML 実体として返します。</p><p>XPointer scheme として <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RDF</anchor>
のグラフに照会するようなものを使う場合には単一の
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/rdf+xml</anchor></code>
実体として返す使い方もできます。</p><p>大変面白いアイデアですが、技術的問題点を指摘しておくなら、<ul><li>もっと <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">822</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> の全体と整合的であるように細かいところを詰める必要がある。</li><li>HTTP 頭欄では実質 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">US-ASCII</anchor> しか安全に転送できない。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPointer</anchor> は <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+0000</anchor></code>〜<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+10FFFF</anchor></code> の任意の文字を扱えるので、
どう折り合いをつけるのか。</li></ul></p><p>などの問題を解決する必要があります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end>
<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;10</anchor-internal> の論文の別の例は <q>xpointer=</q> が抜けた構文になっていて、 HTTP 的には最悪な状況になっています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end>
<cite>search.cpan.org: Apache::XPointer - mod_perl handler to address XML fragments.</cite> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://search.cpan.org/~ascope/Apache-XPointer-1.1/lib/Apache/XPointer.pm">http://search.cpan.org/~ascope/Apache-XPointer-1.1/lib/Apache/XPointer.pm</anchor-external></p><p>これは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mod_perl</anchor> を使った <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;10</anchor-internal>-11 の実装です。 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(まさに <anchor-internal a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;11</anchor-internal> を使った最悪な。)</weak></p><p><code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Apache::XPointer::XPath</anchor></code>
は <code class="XPointerScheme"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">xpointer</anchor>()</code>
を使って <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML実体</anchor>の一部を <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code> で送ったり、独自の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">封筒</anchor>でまとめて一つの
XML 実体として送ったりできます。</p><p><code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Apache::XPointer::RDQL</anchor></code>
は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RDF</anchor> のデータベースから <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RDQL</anchor>
による照会を使って <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RDF/XML</anchor>
実体を取り出すことができます。
(<code class="HTTP">Range</code> の構文は更にひどくて、 XPointer ですらなく、単なる RDQL
直書きになってしまっています。)
結果は複数の <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/rdf+xml</anchor></code>
の <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code>
にしたり、一つにまとめて順序情報の RDF 文付きで得たりできます。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end>
<cite>Index of /javascript/xpointerhttprequest</cite> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://aaronland.info/javascript/xpointerhttprequest/">http://aaronland.info/javascript/xpointerhttprequest/</anchor-external></p><p>こちらは <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;12</anchor-internal> に対応する <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JavaScript</anchor> の実装。</p></section><section><h1>媒体向け</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RTSP</anchor> では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">媒体</anchor>の時間を指定することになっています。</p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> RFC 2326 (RTSP/1.0) 12.29 Range</figcaption><blockquote><p>This request and response header field specifies a range of time.
The range can be specified in a number of units. This specification
defines the smpte (Section 3.5), npt (Section 3.6), and clock
(Section 3.7) range units. Within RTSP, byte ranges [H14.36.1] are
not meaningful and MUST NOT be used. The header may also contain a
time parameter in UTC, specifying the time at which the operation is
to be made effective. Servers supporting the Range header MUST
understand the NPT range format and SHOULD understand the SMPTE range
format. The Range response header indicates what range of time is
actually being played or recorded. If the Range header is given in a
time format that is not understood, the recipient should return &quot;501
Not Implemented&quot;.</p></blockquote><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> この要求・応答頭欄は時刻の範囲を指定します。
範囲は単位の数で指定出来ます。
この仕様書は smpte, npt, clock 範囲単位を定義します。 RTSP
では、 byte 範囲には意味がなく、使用しては<strong>いけません</strong>。
この頭には time パラメーターも含めて、操作が有効となる UTC 
での時刻を指定しても構いません。
Range 頭に対応したサーバーは NPT 範囲形式を理解し<strong>なければならず</strong>、
SMPTE 範囲形式を理解<strong>するのが良いです</strong>。 Range
応答頭は実際に演奏又は録音されている時刻の範囲を示します。 Range
頭が理解不能な時刻形式で与えられている場合は、受信者は
「501 未実装」を返すのが良いです。</p><blockquote><p>Ranges are half-open intervals, including the lower point, but
excluding the upper point. In other words, a range of a-b starts
exactly at time a, but stops just before b. Only the start time of a
media unit such as a video or audio frame is relevant. As an example,
assume that video frames are generated every 40 ms. A range of 
10.0-10.1 would include a video frame starting at 10.0 or later time and
would include a video frame starting at 10.08, even though it lasted
beyond the interval. A range of 10.0-10.08, on the other hand, would
exclude the frame at 10.08.</p></blockquote><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 範囲は半分開間隔で、低位置は含んで高位置を含まないものです。
つまり、範囲<em><var>甲</var>-<var>乙</var></em>は丁度時刻<var>甲</var>に始まりますが、時刻<var>乙</var>の丁度前に止まります。
動画や音声の<ruby>枠<rt>frame</rt></ruby>のような媒体単位の開始時刻だけが適切です。
例として、動画枠が 40 ms 毎に生成されるとします。範囲 <samp>10.0-10.1</samp>
は <code>10.0</code> かそれ以降の時刻に始まる動画枠を含み、
<code>10.08</code> に始まる動画枠も (終わるのは間隔を超えますが) 含みます。
一方範囲 <samp>10.0-10.08</samp> は <code>10.08</code> の枠を除きます。</p><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> Range = &quot;Range&quot; &quot;:&quot; 1<del>\</del>#ranges-specifier [ &quot;;&quot; &quot;time&quot; &quot;=&quot; utc-time ]</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> ranges-specifier = npt-range | utc-range | smpte-range</li></ul><insert xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml">訳注: <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal> にはゴミが入ってます。注意。
<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal>-4 の時刻の定義については <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2326の日付形式</anchor>, 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2326の時刻形式</anchor>を参照。</p></insert><blockquote><p>Example:<ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end>     Range: clock=19960213T143205Z-;time=19970123T143720Z</li></ul></p></blockquote><blockquote><p>The notation is similar to that used for the HTTP/1.1 [2] 
byte-range header. It allows clients to select an excerpt from the media
object, and to play from a given point to the end as well as from
the current location to a given point. The start of playback can be
scheduled for any time in the future, although a server may refuse
to keep server resources for extended idle periods.</p></blockquote><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> この記法は HTTP/1.1 の <code>byte</code> 
範囲頭に使われているものと似ています。
これによりクライアントが媒体物体からの除外を選択出来、指定点から演奏して指定点で終えることや現在位置から指定点まで演奏することが出来ます。
録音再生の開始は将来のどの時刻にも予定出来ますが、サーバーは待機期間を延ばすためのサーバー資源の確保を拒むかもしれません。</p></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> でも同様の指定を使う提案がありました。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="825" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[825]</anchor-end> <cite xml:lang="en-us">Protocol for Media Fragments 1.0 Resolution in HTTP</cite>
( (<time>2011-12-01 08:49:26 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/media-frags-recipes/#rangerequestheaderdef">http://www.w3.org/TR/media-frags-recipes/#rangerequestheaderdef</anchor-external></li></ul></refs></section></section><section><h1>実装</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="823" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[823]</anchor-end> <cite xml:lang="ja">RangeつきリクエストによるApacheのDoSとApache Killerの実力 | 水無月ばけらのえび日記</cite> (<time>2012-03-11 16:19:14 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://bakera.jp/ebi/topic/4512">http://bakera.jp/ebi/topic/4512</anchor-external></p></section><section><h1>関連</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">If-Range:</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>を使って<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">範囲要求</anchor>に関する事前条件を指定できます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> <cite xml:lang="en">Issue 620386 - chromium - Range header vanishing when passed to fetch() - Monorail</cite>
( (<time>2016-06-16 20:11:38 +09:00</time>))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://bugs.chromium.org/p/chromium/issues/detail?id=620386">https://bugs.chromium.org/p/chromium/issues/detail?id=620386</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> <cite xml:lang="en">Allow Range header to be set by APIs</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">jakearchibald</anchor>著, <time>2018-05-30 02:00:06 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/commit/819d8c9d6617986a831ecd9cf21c34ba9589a890">https://github.com/whatwg/fetch/commit/819d8c9d6617986a831ecd9cf21c34ba9589a890</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> <cite xml:lang="en">Allow Range header to be set by APIs</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">jakearchibald</anchor>著, <time>2018-05-30 02:00:06 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/commit/819d8c9d6617986a831ecd9cf21c34ba9589a890">https://github.com/whatwg/fetch/commit/819d8c9d6617986a831ecd9cf21c34ba9589a890</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end> <cite xml:lang="en">Handling Partial Content / 206 · Issue #144 · whatwg/fetch</cite>
(<time>2018-06-01 21:52:15 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/issues/144">https://github.com/whatwg/fetch/issues/144</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> <cite xml:lang="en">Allow range header to be set by APIs by jakearchibald · Pull Request #560 · whatwg/fetch</cite>
(<time>2018-06-01 21:53:21 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/pull/560">https://github.com/whatwg/fetch/pull/560</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> <cite xml:lang="en">Specify identity encoding for range requests</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">jakearchibald</anchor>著, <time>2018-06-06 16:26:21 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/commit/2f3d04d3713f6cd0f89d491217175b55911927be">https://github.com/whatwg/fetch/commit/2f3d04d3713f6cd0f89d491217175b55911927be</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> <cite xml:lang="en">Specify identity encoding for range requests</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">jakearchibald</anchor>著, <time>2018-06-06 16:26:21 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/commit/2f3d04d3713f6cd0f89d491217175b55911927be">https://github.com/whatwg/fetch/commit/2f3d04d3713f6cd0f89d491217175b55911927be</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end> <cite xml:lang="en">Some servers seem to expect 'Accept-Encoding : identity' to serve Range requests · Issue #747 · whatwg/fetch</cite>
(<time>2018-06-08 18:51:56 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/issues/747">https://github.com/whatwg/fetch/issues/747</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> <cite xml:lang="en">jakearchibald/accept-encoding-range-test</cite>
(<time>2018-06-08 18:54:10 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/jakearchibald/accept-encoding-range-test">https://github.com/jakearchibald/accept-encoding-range-test</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[42]</anchor-end> <cite xml:lang="en">Specify identity encoding for range requests. Fixes #747. by jakearchibald · Pull Request #751 · whatwg/fetch</cite>
(<time>2018-06-08 18:55:05 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/pull/751">https://github.com/whatwg/fetch/pull/751</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[43]</anchor-end> <cite xml:lang="en">Additional reasoning for sending Accept-Encoding: identity by jakearchibald · Pull Request #764 · whatwg/fetch</cite>
(<time>2018-06-16 14:29:30 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/pull/764">https://github.com/whatwg/fetch/pull/764</anchor-external></p></section></body></html>