<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="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <dfn><code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bytes</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>です。</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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</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-2.1">https://tools.ietf.org/html/rfc7233#section-2.1</anchor-external></strong></li><li><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> <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.2">https://tools.ietf.org/html/rfc7233#section-4.2</anchor-external></li></ul></refs></section><section><h1>意味</h1><p><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> <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:">bytes</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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src>。</p></section><section><h1><code class="HTTP" xml:lang="en">Range:</code> ヘッダーにおける範囲の指定</h1><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> <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>の値は、
<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>
(<code class="HTTP">#</code>) を記述して指定します <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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src>。</p><figure class="railroad"><ol><li><code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bytes</anchor></code></li><li><code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">=</anchor></code></li><li>範囲</li><li>*<ol><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OWS</anchor></li><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">,</anchor></code></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OWS</anchor></li><li>範囲</li></ol></li></ol></figure><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> 範囲は、先頭の位置と末尾の位置で指定するか、先頭の位置のみで指定するか、
長さのみで指定するかのいずれかの方法で記述します <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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src>。</p><figure class="railroad"><ol><li>|<ol><li>=<ol><li>位置</li><li><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code></li><li>位置</li></ol></li><li>=<ol><li>位置</li><li><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code></li></ol></li><li>=<ol><li><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code></li><li>長さ</li></ol></li></ol></li></ol></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> 位置や長さは1文字以上の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII数字</anchor>の列で<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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src>。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><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>に注意しなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor> <src><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></src>。</comment-p><figure class="railroad"><ol><li>+<ol><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII数字</anchor></li></ol></li></ol></figure><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> 位置の指定は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイト列</anchor>の先頭を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">0</anchor> とした時の位置 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">offset</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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src></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> 最後のバイトが指定されていない場合や、実際のデータの最後のバイトより後を指している時は、
残りすべてを表します。 <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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>が実際の長さを知らなくても取得する最大のデータ長を指定したい時に、
適当に大きな値を指定することができます。</comment-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> 先頭と最後が明記されていて、先頭より最後のバイトの方が小さな値の範囲は、
<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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src>。</p><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 xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非妥当</anchor>とはならないようですが、
データのどの部分も表しません。</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="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <code class="HTTP" xml:lang="en">bytes=0-499</code> は、先頭500バイトを表します <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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src>。</p><p xmlns="http://www.w3.org/1999/xhtml"><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> <code class="HTTP" xml:lang="en">bytes=500-999</code> は、その後に続く500バイトを表します <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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src>。</p></example><p><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> 長さによる範囲の指定は、データの最後から指定された数の<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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><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 xmlns="http://www.w3.org/1999/xhtml" class="HTTP">bytes=-0</code> も禁止されていないようです。</comment-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="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> 長さが10000のデータに対して <code class="HTTP" xml:lang="en">bytes=-500</code> は
<code class="HTTP" xml:lang="en">bytes=9500-9999</code> や <code class="HTTP" xml:lang="en">bytes=9500-</code>
と同じ意味になります <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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src>。</p></example><p><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> 範囲のリストは、それぞれの範囲によって表されるバイト列のリストを表しています。
各範囲は重複していることもあります。</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="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <code class="HTTP" xml:lang="en">bytes=0-0,-1</code> は先頭バイトと末尾バイトを表しています <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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src>。</p></example><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="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <code class="HTTP" xml:lang="en">bytes=500-600,601-999</code> や
<code class="HTTP" xml:lang="en">bytes=500-700,601-999</code> は、
<code class="HTTP" xml:lang="en">bytes=500-999</code> と同じ範囲を表していますが冗長です <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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src>。</p></example><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> 範囲のリストにおいて、範囲の先頭の位置がデータの長さより小さな値か、
長さが0でないものが最低1つでもあれば、これは<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">満足可能<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">satisfiable</rt></rubyb>です。
そうでなければ<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">満足不能<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">unsatisfiable</rt></rubyb>です。 <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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src></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> 妥当性や満足可能性は、<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>の処理で使われます。</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> 範囲のリストにおける範囲の順序や重複、個数などについては、
<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>の項を参照してください。</p></section><section><h1><code class="HTTP" xml:lang="en">Content-Range:</code> ヘッダーでの範囲の指定</h1><p><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:">Content-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>と <code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SP</anchor></code> の後に、範囲を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="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;27</anchor-internal></src></p><figure class="railroad"><ol><li><code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bytes</anchor></code></li><li><code class="charname"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SP</anchor></code></li><li>範囲</li></ol></figure><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> 範囲は、先頭の位置、<code>-</code>、最後の位置、<code>/</code>、全体の長さの順に指定します。
ただし、 <code>/</code> の前後どちらか一方は <code>*</code> とすることができます。 <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="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;27</anchor-internal></src></p><figure class="railroad"><ol><li>|<ol><li>=<ol><li>位置</li><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code></li><li>位置</li><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">/</anchor></code></li><li>|<ol><li>長さ</li><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">*</anchor></code></li></ol></li></ol></li><li>=<ol><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">*</anchor></code></li><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">/</anchor></code></li><li>長さ</li></ol></li></ol></li></ol></figure><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> 位置や長さは、1文字以上の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII数字</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="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;27</anchor-internal></src>。
これは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">十進数</anchor>として解釈されます。</p><figure class="railroad"><ol><li>+<ol><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII数字</anchor></li></ol></li></ol></figure><section><h1>バイト範囲の構文</h1><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> <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">206</anchor></code> <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="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> 先頭の位置と最後の位置は、全体の先頭を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">0</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="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> 先頭の位置より最後の位置の方が小さい場合、<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="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;27</anchor-internal></src>。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><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> <code xmlns="http://www.w3.org/1999/xhtml" class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-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>は無視しないといけません
(<code xmlns="http://www.w3.org/1999/xhtml" class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Range:</anchor></code> 参照)。</comment-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> 全体の長さのかわりの <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="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;27</anchor-internal></src>。</p><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> <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="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;27</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="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end> 次の例 <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="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;27</anchor-internal></src> は、1234バイトのデータのうち、43個目のバイト以降が含まれることを表しています。</p><pre xmlns="http://www.w3.org/1999/xhtml" class="HTTP code">Content-Range: bytes 42-1233/1234</pre><p xmlns="http://www.w3.org/1999/xhtml"><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> 次の例 <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="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;27</anchor-internal></src> は、長さ不明のデータのうち、43個目のバイトから1234個目のバイトまでが含まれることを表しています。<pre class="HTTP code">Content-Range: bytes 42-1233/*</pre></p></example></section><section><h1>長さの構文</h1><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:">鯖</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>に対して <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>を返す場合、
前半が <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">*</anchor></code> の構文を使った <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-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:"><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="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;27</anchor-internal></src>。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><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> こちらの構文では、長さ不明にはできません。長さ不明の時は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>自体を送るべきではないと思われます。</comment-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="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> 次の例 <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="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;27</anchor-internal></src> は、適用対象のデータの長さが1234バイトであることを表しています。<pre class="HTTP code">Content-Range: bytes */1234</pre></p></example></section><section><h1><code class="HTTP">*/*</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 723x</anchor> は認めていませんが、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Google BigQuery</anchor> は
<code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Range:</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bytes</anchor> */*</code> という指定を認めています <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="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;45</anchor-internal></src>。</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="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end> <cite xml:lang="ja">Loading Data with a POST Request - Google BigQuery — Google Cloud Platform</cite> (<time>2014-12-18 02:33:03 +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://cloud.google.com/bigquery/loading-data-post-request#resume-upload">https://cloud.google.com/bigquery/loading-data-post-request#resume-upload</anchor-external></li></ul></refs></section></section><section><h1>歴史</h1><figure class="quote"><figcaption><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> RFC 2068・2616 (HTTP/1.1) 3.12 Range Units</p></figcaption><blockquote><p>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 <del>14.36</del> <ins>14.35</ins>) and Content-Range (section <del>14.17</del> <ins>14.16</ins>)
header fields. An entity <del>may</del> <ins>can</ins> be broken down into subranges according
to various structural units.</p></blockquote><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP/1.1</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:">クライアント</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>することを認めます。
HTTP/1.1 は、範囲単位を <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Range</anchor></code> 頭欄と 
<code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Range</anchor></code> 頭欄で使います。
実体は種々の構造単位に基づいて小範囲に分割できます。</p><blockquote><ul><li>range-unit       = bytes-unit | other-range-unit</li><li>bytes-unit       = &quot;bytes&quot;</li><li>other-range-unit = token</li></ul></blockquote><blockquote><p>The only range unit defined by HTTP/1.1 is &quot;bytes&quot;. HTTP/1.1
implementations <del>may</del> <ins>MAY</ins> ignore ranges specified using other units.</p></blockquote><p>HTTP/1.1 で定義する範囲単位は <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bytes</anchor></code> だけです。
HTTP/1.1 実装は他の単位を使って指定されている範囲を無視しても<strong>構いません</strong>。</p><blockquote><p>HTTP/1.1 has been designed to allow implementations of applications
that do not depend on knowledge of ranges.</p></blockquote><p>HTTP/1.1 は範囲の知識に依存しない応用の実装を認めるように設計されています。</p></figure></section><section><h1>実装</h1><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> 汎用の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>や <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:">bytes</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>に関しては) 対応しているのが普通です。 <time>2014-11-07T10:02:03.200Z</time></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> <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" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bytes</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></section><section><h1>関連</h1><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> <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:">Accept-Ranges:</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bytes</anchor></code> によって<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイト範囲</anchor>に対応していることを明示できます。</p></section><section><h1>メモ</h1><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> HTTP では他の単位が使われてるのって見たことないですね。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</anchor-end> <cite xml:lang="en">draft-luotonen-http-url-byterange-01 - Byte Ranges With HTTP URLs</cite>
(<time>2015-01-29 04:38:34 +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/draft-luotonen-http-url-byterange-01">https://tools.ietf.org/html/draft-luotonen-http-url-byterange-01</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[47]</anchor-end> <cite>IRC logs: freenode / #whatwg / 20150403</cite>
(<time>2015-04-04 11:15:53 +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://krijnhoetmer.nl/irc-logs/whatwg/20150403">http://krijnhoetmer.nl/irc-logs/whatwg/20150403</anchor-external></p></section></body></html>