CGI欄

CGI欄

[10] CGIスクリプトが出力する頭欄のうち、によって解釈されるものが CGI (-field) です。その欄は、たとえ同名の欄が HTTP などのプロトコルで規定されていたとしても、 CGI での仕様に従って解釈されます。

仕様書

構文

[1] CGI スクリプトの出力は HTTPSIPメッセージの出力同様に頭部本体部から成り、 両者は空行で区切られます。

しかし、非解析頭 (nph) 出力の場合を除いて、 これが直接応答として使われるわけではありません。 サーバーがそれをみて欄を補ったり値を適切に修正したりして応答となります。

[12] NPHスクリプトではCGI欄ではなく、すべて HTTP頭欄とみなされます。 詳しくはNPH応答の項を参照してください。

[2] 頭の部分は、やはり HTTP や SIP 同様に頭欄を並べるのですが、 この頭欄にはプロトコルの頭欄と CGI の頭欄の2種類があります。 どちらも構文的には同じで、 欄の名前によってのみ区別できます。 (順番もごちゃ混ぜで構いません。) (あ、でも、 SIP CGI の頭欄は名前が必ず CGI- で始まるので分かります。)

CGI の頭欄はサーバーでの処理に使われ、 直接は応答としてクライアントに送られません。 プロトコルの頭欄は >>1 で述べたように編集されることはあるもののそのまま応答に使われます。 これが最大の違いです。

[3] たとえば、 HTTP CGI では Status: という欄があり、これを使って HTTP の応答符号を指定できます。 しかし、この欄はサーバーでの処理が終わると捨てられ、 クライアントには送られません。

[4] CGI 欄として定義されているもの以外は、 すべてプロトコルの頭欄として扱われます。

[13] 詳しくはCGI応答の項を参照してください。

[14] CGI欄は、応答の中にそれぞれ一度だけ使うことができます。 >>11 また、それぞれの種類に応じた制約があります。

CGI 欄の一覧

1.1SIP欄名
CGI-Remove:
CGI-Request-Token:
Content-Type:
Location:
Status:
Variable-*:[FastCGI]
w3m-control:[w3m]
X-CGI-*:

[6] HTTP CGI の頭欄である Content-Type: 欄や Location: 欄は、 HTTP でも同じ名前の欄が規定されていますが、 やや振る舞いが違うとか、 CGI における重要性とかから特別に扱われます。

[7] HTTP CGI の頭欄であっても SIP CGI の頭欄ではないものは、 SIP の頭欄として扱われます。 (それに意味があるかどうかは SIP の規定によります。) 逆も同様です。 頭欄の具体的なことについては HTTP CGI と SIP CGI とでまったく互換性がないといってよいでしょう。

[5] CGI 頭は、本体と空行で区切られます。継続行は認められていません。 CGI 頭欄と HTTP 頭欄は混在 (順番が) していても構いませんが、 CGI 頭欄を極力先に出力することが推奨されています。

CGI 頭欄はそれぞれ1回だけ使えます。一つの CGI 頭には、 最低1つの CGI 頭欄が必要です。つまり、上記の内1つは必ず 出力されるということです。

本体を出力する時は、Content-Type:領域 を出力しなければなりませんLocation:領域 を出力する時は、 HTTP 欄を出力してはいけません

拡張 CGI 欄

[15] 実装定義で標準の3種類以外の CGI欄に対応しても構いません。 その場合、頭欄の名前は X-CGI- で始まるべきです>>11

[16] 実装は、未対応の X-CGI-*: 欄を受け取った時、これを無視したり、 削除したりして構いません>>11

[17] 実際にこの種のヘッダーがどれだけ存在し使われているのかは不明です。