<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="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:">CGI</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メタ変数</anchor> <dfn><code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">REQUEST_METHOD</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><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="415" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[415]</anchor-end> <cite xml:lang="en">RFC 3875 - The Common Gateway Interface (CGI) Version 1.1</cite><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="407" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[407]</anchor-end> <strong><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/rfc3875#section-4.1.12">http://tools.ietf.org/html/rfc3875#section-4.1.12</anchor-external></strong></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="416" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[416]</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://tools.ietf.org/html/rfc3875#section-4.3">http://tools.ietf.org/html/rfc3875#section-4.3</anchor-external></li></ul></li></ul></refs></section><section><h1>値</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="410" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[410]</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="407" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;407</anchor-internal></src>。<figure class="list"><pre class="ABNF code">      REQUEST_METHOD   = method
      method           = &quot;GET&quot; | &quot;POST&quot; | &quot;HEAD&quot; | extension-method
      extension-method = &quot;PUT&quot; | &quot;DELETE&quot; | <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">token</anchor></pre></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="411" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[411]</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="407" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;407</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="412" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[412]</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>は区別します <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="407" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;407</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="413" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[413]</anchor-end> 実際には区別する<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>を使う<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="417" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[417]</anchor-end> <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>だけ実装することにしてもよく、その場合未対応の<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="416" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;416</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="414" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[414]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIスクリプト</anchor>の実装はナイーブなものが多く、 <code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">REQUEST_METHOD</anchor></code>
を無視したり、特定のものと等しいかどうかしかチェックしていなかったりします。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">本来は知らないものは <code xmlns="http://www.w3.org/1999/xhtml"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">405</anchor></code> を返すべきなのでしょうが。</comment-p></section><section><h1>歴史</h1><figure class="quote"><figcaption><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="406" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[406]</anchor-end> CGI/1.1 draft-3 6.1.13. REQUEST_METHOD</p></figcaption><blockquote><p>The REQUEST_METHOD metavariable is set to the method with which the request was made, as described in section 5.1.1 of the HTTP/1.0 specification [3] and section 5.1.1 of the HTTP/1.1 specification [8].</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> <code class="CGI">REQUEST_METHOD</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>    REQUEST_METHOD   = http-method</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>    http-method      = &quot;GET&quot; | &quot;HEAD&quot; | &quot;POST&quot; | &quot;PUT&quot; | &quot;DELETE&quot; | &quot;OPTIONS&quot; | &quot;TRACE&quot; | extension-method</li><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>    extension-method = token<pre>  
&gt;The method is case sensitive. CGI/1.1 servers MAY choose to process some methods directly rather than passing them to scripts.</pre></li></ul><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> 方式は大文字・小文字を区別します。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor>
サーバーは幾つかの方式をスクリプトに渡さずに直接処理することを選んでも<strong>構いません</strong>。</p><blockquote><p>This variable is specific to requests made with HTTP.</p></blockquote><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> この変数は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> の要求で特有のものです。</p><blockquote><p>Servers MUST provide this metavariable to scripts. </p></blockquote><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> サーバーはこのメタ変数をスクリプトに提供しなければ<strong>なりません</strong>。</p></figure><figure class="quote"><figcaption><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="408" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[408]</anchor-end> RFC 3050 (SIP-CGI/1.1) 5.5.1.11 REQUEST_METHOD</p></figcaption><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></p><blockquote><p>If the message triggering the script was a request, the
REQUEST_METHOD metavariable is set to the method with which the
request was made, as described in section 4.2 of the SIP/2.0
specification [2]; otherwise not defined.</p></blockquote><p>スクリプトの引き金となったメッセージが要求であるなら、
<code class="CGI">REQUEST_METHOD</code>
メタ変数は要求が作られた method
を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SIP/2.0</anchor> 仕様書の
4,2節に説明された通りに設定しなければなりません。
そうでなければ定義されません。</p><blockquote><ul><li>REQUEST_METHOD    =  sip-method</li><li>sip-method        =  &quot;INVITE&quot; | &quot;BYE&quot; | &quot;OPTIONS&quot; | &quot;CANCEL&quot;                             | &quot;REGISTER&quot; | &quot;ACK&quot;                             | extension-method</li><li>extension-method  =  token</li></ul></blockquote><blockquote><p>Note that ACK is usually not appropriate for the SIP CGI 1.1
environment; however, see section 5.11.  The implications of REGISTER
in the CGI context are discussed in section 5.9, and CANCEL is
discussed in section 5.10.  A SIP CGI 1.1 server MAY choose to
process some methods directly rather than passing them to scripts.</p></blockquote><p>なお、 <code class="SIP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ACK</anchor></code>
は通常 SIP CGI 1.1
環境には適当ではありません。しかし、
5.11節をみて下さい。
CGI の文脈における <code class="SIP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">REGISTER</anchor></code>
の暗示については5.9章で、
<code class="SIP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CANCEL</anchor></code>
については5.10章で扱っています。
SIP CGI 1.1 サーバーは幾つかの method をスクリプトに渡さずに直接処理することを選んでも<strong>構いません</strong>。</p><blockquote><p>Servers MUST provide this metavariable to scripts if the triggering
message was a request.</p></blockquote><p>サーバーは、引き金となったメッセージが要求であればこのメタ変数を提供し<strong>なければなりません</strong>。</p></figure></section><section><h1>メモ</h1><ul><li><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-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;6</anchor-internal> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> では方式名は大文字・小文字区別しませんよねぇ。</li><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> 比較する前に正規化しておかないといけないということですか。</li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="409" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[409]</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:">HTTP</anchor> も仕様上は区別することになっているようです。</p><ul><li><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 xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> では(一般目的の<em>サーバー</em>に)最低限 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GET</anchor> と <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HEAD</anchor> に対応するように義務付けています。また、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Apache</anchor> などでは CGI script は <code class="HTTP">GET</code> を実装しておけば <code class="HTTP">HEAD</code> は適当に処理してくれます。</li><li><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="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;11</anchor-internal> CGI script, 特に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">form要素</anchor>からの入力を扱うものでは更に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">POST</anchor> にも対応するのが普通です。他の方式に対応した CGI script は見たことがありません。</li><li><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> [NCSA] では、 HTTP の場合は <code class="HTTP">GET</code> などが〜という表現になっている一方、 [COAR 03] では上記のように、この変数は HTTP 特有と述べています。それでも <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;8</anchor-internal> で必ず提供するよう要求していますから、 HTTP 以外では空の値になるのでしょうか?</li><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Apache</anchor> の実装では、 <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OPTIONS</anchor></code> と <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TRACE</anchor></code> は自前で処理しますが、それ以外の値はチェックせずに CGI Script に渡します。</li><li><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-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> だから、未知の method が与えられたときには <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">405</anchor></code> Metehod Not Available を返すように CGI Script を実装しておかないと、不正な応答を返してしまう恐れがあります。</li><li><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> Apache では、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SSI</anchor> の場合、未知の method は 403 をちゃんと返してしまうので、環境変数 <code class="SSI">REQUEST_METHOD</code> や SSI から呼ばれた CGI での同メタ変数が任意の method について得られるかは不明です。</li></ul></section></body></html>