<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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">多部分実体</anchor> (<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/<var xmlns="http://www.w3.org/1999/xhtml">*</var></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つにまとめて扱うことができます。
各実体は境界文字列によって区切ります。
その境界文字列は実体を構成する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>が定められた構文的制限内で自由に決定できます。
その境界文字列を指定するのが <dfn><code class="MIME">boundary</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor></dfn>です。</p><p><code class="MIME">boundary</code> 引数はすべての <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/<var xmlns="http://www.w3.org/1999/xhtml">*</var></anchor></code>
実体で<strong>必須</strong>です。</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="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <cite xml:lang="en">RFC 2046 - Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</cite> (<time>2015-03-22 13:14:46 +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://tools.ietf.org/html/rfc2046#section-5.1">http://tools.ietf.org/html/rfc2046#section-5.1</anchor-external><ul><li><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> <strong><cite xml:lang="en">RFC 2046 - Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</cite> (<time>2015-03-22 13:14:46 +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://tools.ietf.org/html/rfc2046#section-5.1.1">http://tools.ietf.org/html/rfc2046#section-5.1.1</anchor-external></strong></li></ul></li><li><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> <cite xml:lang="en">RFC 7578 - Returning Values from Forms: multipart/form-data</cite> (<time>2015-07-19 23:17:07 +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/rfc7578#section-4.1">https://tools.ietf.org/html/rfc7578#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="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boundary</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="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> <dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">境界区切子<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">boundary delimiter</rt></rubyb></dfn>は、次の<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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>。<figure class="short list"><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII英数字</anchor></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">'</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">)</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">+</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">,</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">.</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">/</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">:</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">=</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">?</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+0020</anchor></code></li></ul></figure></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="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>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">関門</anchor>に対して<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">頑健</anchor>である <src><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src> とされています。</comment-p><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>の最後は <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+0020</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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>。</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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">境界区切子</anchor>は、1文字<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">以上</anchor>70文字<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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</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="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> 行頭の <code xmlns="http://www.w3.org/1999/xhtml">--</code> は<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="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>境界区切子行</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">boundary delimiter line</rt></rubyb></dfn>は、
<code>--</code> から始まり、 <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boundary</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:">CRLF</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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</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="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> <code xmlns="http://www.w3.org/1999/xhtml">--</code> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 934</anchor> との大まかな互換性のためと、
実装方法によっては探しやすいためにあります <src><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>。 (しかし <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 934</anchor>
と完全に互換なわけではありません。)</comment-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> <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/*</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><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CRLF</anchor></code> が必要です。この <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CRLF</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>の一部ではありません。 <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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src></p><figure class="railroad"><ol><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CRLF</anchor></li><li><code>--</code></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">境界区切子</anchor></li><li>*<ol><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">線形空白</anchor></li></ol></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CRLF</anchor></li></ol></figure><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:">境界区切子行</anchor>の <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CRLF</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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>。</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:">本体部分</anchor>の後には<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">閉じ境界区切子行<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">close boundary delimiter line</rt></rubyb>を置きます。これは、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">境界区切子</anchor>の後に <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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>。</p><figure class="railroad"><ol><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CRLF</anchor></li><li><code>--</code></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">境界区切子</anchor></li><li><code>--</code></li><li>*<ol><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">線形空白</anchor></li></ol></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CRLF</anchor></li></ol></figure><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:">CRLF</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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>。</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> 行末の<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:">LWSP-char</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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>。
生成しては<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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>。</p><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="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type</anchor>:</code> 欄などにおいて
<code class="MIME">boundary</code> 引数の値として指定しますが、その際に引数値は
<code class="ABNF"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">quoted-string</anchor></code> を使って指定する方法 (つまり引用符で括る方法)
と <code class="ABNF"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">token</anchor></code> を使って指定する方法 (つまり括らない方法) 
があります。しかし、いろいろな場面での使用を考えると引用符なしの方が安全です。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(例えば <code xmlns="http://www.w3.org/1999/xhtml" class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/byteranges</anchor></code> で引用符付きだと扱えない古い <anchor>HTTP</anchor> <anchor>UA</anchor> が存在します<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2616</anchor></src>。)</weak></p><p>そうなると、 <code class="ABNF">token</code> で使用できない文字、すなわち
<code class="ABNF">&quot;(&quot; / &quot;)&quot; / &quot;,&quot; / &quot;/&quot; / &quot;:&quot; / &quot;=&quot; / &quot;?&quot; / &quot; &quot;</code> 
は使う<strong>べきではない</strong>ということになります。</p><p>特に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">間隔</anchor>は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">822</anchor> メッセージでは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">折返し</anchor>など種々の問題がありますから、
極力使わない<strong>べきです</strong> (でも現実には意外とよく使われていたりします
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(そしてたまに問題を起こします)</weak>)。<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コロン</anchor>も腐った <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MTA</anchor>・<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MSA</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>を分けるコロンと誤認されて破壊される問題があることが知られていますから、
使う<strong>べきではありません</strong>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="827" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[827]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI.pm</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">quoted-string</anchor> であったとしても <code class="char"><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>で使うことを認めていません。
これはおそらく、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</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>
で連結されることから、 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(複数 <code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type:</anchor></code> 欄が存在する<anchor>要求</anchor>は非妥当とはいえ)</weak>
<code class="char"><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>に現れると解釈が曖昧になるという判断なのでしょう。</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="828" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[828]</anchor-end> と思いましたが同じような構文でそうなっていないところもあるので、
本当の意図はわかりません。</comment-p><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> まとめると、境界文字列 <code class="MIME">boundary</code> は
<code class="ABNF"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DIGIT</anchor> / <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ALPHA</anchor> / &quot;'&quot; / &quot;+&quot; / &quot;_&quot; / &quot;-&quot; / &quot;.&quot;</code>
から1文字以上70文字で選ぶのがよさそうだということになります。</p><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:">822</anchor> 
メッセージ本体の行末に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空白</anchor>を補うことがあることが知られていたからです
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">RFC 2046 5.1.1</src>。</p></section><section><h1>文脈</h1><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> <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boundary</anchor></code> <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/*</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME型</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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>。</p></section><section><h1>処理</h1><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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</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> <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>に含めることが禁止されています。</comment-p></section><section><h1>境界文字列の選び方</h1><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="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal> の構文に反しない限りで自由に境界文字列を選ぶことができます。
ただし、境界文字列が多部分実体の中に含まれる<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="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>を選ぶことにしても構いません <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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</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="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:">MIME</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>を選んでも構いません。その場合は衝突により注意が必要です。 <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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src></p></example><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> 実際の MIME 利用者エージェントでよく使われている境界文字列は、
無作為に選んだ文字列と日付など規則的に生成した (本体部分に含まれそうにない)
文字列です。また、稀に定型メッセージなどで中身が分かりきっている場合には、
<samp class="MIME">-</samp> などの簡単な文字列で済ませることもあります。</p><p>どの方法を選ぶにせよ、
生成した境界文字列が本体部分の中身に混じってしまうことがないように注意しなければなりません。
絶対に中身と衝突し得ない文字列を生成する方法はありませんが、
実際に中身を検査すれば含まれているかいないかは簡単に分かりますから、
何度か生成して確認してみれば実用的には十分です
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(うまい生成方法を選べば普通は1度で衝突しない文字列が得られます)</weak>。</p><p>ただし、 MIME 実体の生成方法や効率上の理由で中身の検査ができないこともあります。
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/x-mixed-replace</anchor></code> のように、
その性質上あらかじめ絶対に衝突しない境界文字列を選ぶことが不可能なものまであります。
このような場合には、使用する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">媒体型</anchor>などの知識に基づき衝突しそうにない文字列を生成するように努力するしかありません。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(本来そのような状況では、 <code xmlns="http://www.w3.org/1999/xhtml" class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/vnd.pwg-multiplexed</anchor></code> のような別の方法を採用するべきです。)</weak></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> なお、 <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/<var xmlns="http://www.w3.org/1999/xhtml">*</var></anchor></code> は何重にも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">入れ子</anchor>にできます。
当然、内側と外側では別の境界文字列を選ばなければなりません。
日付などに基づき生成する方法を選んだ場合は同時に同じ境界文字列を生成してしまわないように注意しなければなりません。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>多部分実体の境界文字列</h1><p><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> 多部分実体は次のような構文と規定されています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">RFC 2046 5.1.1</src>。<ul><li><code class="ABNF"><dfn>dash-boundary</dfn> := &quot;--&quot; boundary</code></li><li><code class="ABNF"><dfn>multipart-body</dfn> := [preamble CRLF] dash-boundary transport-padding CRLF body-part *encapsulation close-delimiter transport-padding [CRLF epilogue] </code></li><li><code class="ABNF"><dfn>transport-padding</dfn> := *LWSP-char</code></li><li><code class="ABNF"><dfn>encapsulation</dfn> := delimiter transport-padding CRLF body-part</code></li><li><code class="ABNF"><dfn>delimiter</dfn> := CRLF dash-boundary</code></li><li><code class="ABNF"><dfn>close-delimiter</dfn> := delimiter &quot;--&quot;</code></li><li><code class="ABNF"><dfn>preamble</dfn> := discard-text</code></li><li><code class="ABNF"><dfn>epilogue</dfn> := discard-text</code></li><li><code class="ABNF"><dfn>discard-text</dfn> := *(*text CRLF) *text</code></li><li><code class="ABNF"><dfn>body-part</dfn> := MIME-part-headers [CRLF *OCTET] </code></li></ul></p><p>(詳細は <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/<var xmlns="http://www.w3.org/1999/xhtml">*</var></anchor></code> の項や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2046</anchor> を見てください。)</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>
境界文字列に関係する部分をまとめると、次のようになります。<ul><li>一番最初の本体部分の前には、 <samp class="MIME">--<var>boundary</var></samp>
と <code class="ABNF">CRLF</code> からなる境界文字列を入れます。</li><li>本体部分と本体部分の間には、 <code class="ABNF">CRLF</code> と
<samp class="MIME">--<var>boundary</var></samp> と <code class="ABNF">CRLF</code>
からなる境界文字列を入れます。</li><li>一番最後の本体部分の後には、 <code class="ABNF">CRLF</code> と 
<samp class="MIME">--<var>boundary</var>--</samp> と <code class="ABNF">CRLF</code> からなる境界文字列を入れます。</li></ul></p><p>ただし、 <code class="MIME"><var>boundary</var></code> というのは <code class="MIME">boundary</code>
引数で指定した文字列です。
最後の境界文字列は <code class="MIME"><var>boundary</var></code> の後にも
<code class="MIME">--</code> が付くことと、最初の境界文字列<em>以外</em>では
<samp class="MIME">--<var>boundary</var></samp> の直前の <code class="ABNF">CRLF</code>
も境界の一部である (本体部分の一部ではない) ことに注意してください。</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-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;9</anchor-internal> のような腐った関門が勝手に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空白</anchor>を追加しても受信側が理解できるように、
受信した側の MIME 利用者エージェントは <samp class="MIME">--<var>boundary</var></samp> や
<samp class="MIME">--<var>boundary</var>--</samp> の後に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空白</anchor>があっても無視することになっています
(構文の <code class="ABNF">transport-padding</code>)。 
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(だからといって、送信側が意図的に空白をつけることは禁止されています)</weak></p><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> なお、古い版の MIME では一番最初の本体部分の前の境界でも
<samp class="MIME">--<var>boundary</var></samp> の前の <code class="ABNF">CRLF</code>
が必須とされていましたが、今日では不具合であったと考えられています。</p></section><section><h1><code class="MIME" xml:lang="en">multipart/form-data</code> 境界文字列</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="824" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[824]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム提出算法</anchor>において、 
<dfn><code class="MIME" xml:lang="en">multipart/form-data</code> <rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">境界文字列<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">boundary string</rt></rubyb></dfn>とは、
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> の<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:">boundary</anchor></code> の文字列のことをいいます。</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-x-hixie">HTML Standard</cite> (<time>2012-03-19 22:29:46 +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.whatwg.org/specs/web-apps/current-work/#multipart/form-data-boundary-string">http://www.whatwg.org/specs/web-apps/current-work/#multipart/form-data-boundary-string</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="826" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[826]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en">multipart/form-data</code>境界文字列</anchor>は、 <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type:</anchor></code>
欄の値の生成に使われます。</p></section><section><h1>本体部分における制約</h1><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>は、<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="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal></src>。</p></section><section><h1>歴史</h1><section><h1>MIME 以前</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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 934</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:">RFC 934</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>を <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">encapsulation boundary</anchor></dfn>
(<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EB</anchor></dfn>) と呼び、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メッセージ</anchor>本文中の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EB</anchor> をどう処理するかを定義していました。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> とは違って何が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EB</anchor> であるかをメタデータとして保持しているわけではないので、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUA</anchor> が本文を走査して解釈しなければなりません。</comment-p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">詳しくは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 934</anchor> を参照。</comment-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="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> この方法はそれ以前からの慣習を規定したものである <src><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src> ようです。</comment-p><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:">PEM</anchor> は暗号化や署名が施された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メッセージ</anchor>を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 822</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:">RFC 934</anchor> に添って
<code>-----PRIVACY-ENHANCED MESSAGE BOUNDARY-----</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="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</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:">EB</anchor> を <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pre-EB</anchor></dfn>、
後にある <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EB</anchor> を <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">post-EB</anchor></dfn> と呼んでいました。</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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PEM</anchor> の第4世代では、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pre-EB</anchor> は
<code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-----BEGIN PRIVACY-ENHANCED MESSAGE-----</anchor></code>、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">post-EB</anchor> は
<code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-----END PRIVACY-ENHANCED MESSAGE-----</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="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;23</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="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <cite xml:lang="en">RFC 989 - Privacy enhancement for Internet electronic mail: Part I: Message encipherment and authentication procedures</cite> (<time>2015-02-22 16:43:49 +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/rfc989#section-4.4">https://tools.ietf.org/html/rfc989#section-4.4</anchor-external></li><li><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> <cite xml:lang="en">RFC 1421 - Privacy Enhancement for Internet Electronic Mail: Part I: Message Encryption and Authentication Procedures</cite> (<time>2015-02-22 14:28:36 +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/rfc1421#section-4.4">https://tools.ietf.org/html/rfc1421#section-4.4</anchor-external></li></ul></refs></section><section><h1>MIME</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 1341</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 1521</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2046</anchor></li></ul></refs></section></section><section><h1>例</h1><p><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:">MIME</anchor> の <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type</anchor>:</code> 欄で
<code class="MIME">boundary</code> 引数を指定する例 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">RFC 2046</src>:<pre class="MIME example">Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08j34c0p</pre></p><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>
間違った例 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">RFC 2046</src>:<pre class="MIME illegal example">Content-Type: multipart/mixed; boundary=gc0pJq0M:08jU534c0p</pre></p><p><code class="MIME">boundary</code> 引数の値に <code class="char">:</code>
が含まれていますが、この文字は <code class="ABNF"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">tspecials</anchor></code>
に含まれているので、 <code class="ABNF"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">quoted-string</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="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/alternative</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:">RFC 2046, 改</src>:<pre class="MIME example">From: Nathaniel Borenstein &lt;nsb@bellcore.com&gt;
To: Ned Freed &lt;ned@innosoft.com&gt;
Date: Mon, 22 Mar 1993 09:41:09 -0800 (PST)
Subject: Formatted text mail
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary=boundary42
--boundary42
Content-Type: text/plain; charset=us-ascii
<var>  ... plain text version of message goes here ...</var>
--boundary42
Content-Type: text/enriched; charset=us-ascii
<var>  ... RFC 1896 text/enriched version of same message goes here ...</var>
--boundary42
Content-Type: application/x-whatever
<var>  ... fanciest version of same message goes here ...</var>
--boundary42--</pre></p></section><section><h1>メモ</h1><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>
<cite><strong>[</strong>mew-dist 27367<strong>]</strong> Re: &lt; &gt; を含むバウンダリでエラー</cite> (<code>2007-02-07 15:22:41 +09:00</code> 版) <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.mew.org/pipermail/mew-dist/2006-October/027053.html">http://www.mew.org/pipermail/mew-dist/2006-October/027053.html</anchor-external></p><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>
<cite><strong></strong>[<strong></strong>mew-dist 27666<strong></strong>]<strong></strong> MIME decoding error: No boundary parameter for	multipart</cite> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pegacorn</anchor> 著, <time>2007-05-16 02:47:58 +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://permalink.gmane.org/gmane.mail.mew.general.japanese/6020">http://permalink.gmane.org/gmane.mail.mew.general.japanese/6020</anchor-external></p><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>Apache HTTP Server Project</cite>
( (<time>2011-05-28 00:58: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="http://httpd.apache.org/docs/1.3/misc/known_client_problems.html#boundary-string">http://httpd.apache.org/docs/1.3/misc/known_client_problems.html#boundary-string</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="829" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[829]</anchor-end> 境界文字列はその複数部分実体内に含まれる実体に含まれるものであってはなりません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="830" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[830]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="829" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;829</anchor-internal> でもこの(必然的な)規制って、 <code>multipart/x-mixed-replace</code>
のように複数部分が動的に生成される場合であって <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type:</anchor>
欄を生成する時点で完全に内容を把握できない場合に満たすことを保証するのが難しい気がします。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="831" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[831]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="830" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;830</anchor-internal> そうでなくても、常に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">binary</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CTE</anchor> である HTTP での転送の時なんかに、内容と一致しない境界文字列を生成出来ない可能性がある気がします。確率はとっても低くて無視できるかもしれませんが...</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="832" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[832]</anchor-end> <cite>RFC Errata Report</cite>
( (<time>2014-07-01 07:55:00 +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.rfc-editor.org/errata_search.php?rfc=2388&amp;eid=4030">http://www.rfc-editor.org/errata_search.php?rfc=2388&amp;eid=4030</anchor-external></p></section></body></html>