[1] 【[[CGI]]】[[要求]]に答える
(そして[[関門]]を走らせる)
情報サーバー・ソフトウェアの名前と版が与えられる[[環境変数]]/[[メタ変数]]です。

[[CGI/1.1]] では、すべての要求に対してこの値が設定されることになっています。

* 仕様書
[REFS[
- [7] [CITE@en[[[RFC 3875]] - The Common Gateway Interface (CGI) Version 1.1]] ([TIME[2011-11-20 06:09:05 +09:00]] 版) <http://tools.ietf.org/html/rfc3875#section-4.1.17>
- [6] [CITE[RFC Errata Report » RFC Editor]], [TIME[2021-06-10T07:17:45.000Z]] <https://www.rfc-editor.org/errata_search.php?rfc=3875&rec_status=0>
]REFS]

* 値

[9] 値の構文は次のように定義されています [SRC[>>7]]。
[PRE(ABNF code)[
      SERVER_SOFTWARE = 1*( [[product]] | [[comment]] )
      product         = [[token]] [ "/" product-version ]
      product-version = [[token]]
]PRE]

[12] [[HTTP]] 仕様同様に [[product]] や [[comment]] の前後には[[LWFS]]
を挿入して良いはずで、実際そうされていることがよくありますが、 [[CGI]] の [[RFC]]
ではそれが明記されていません。

[10] [[鯖]]はその名前と版を [CODE(CGI)@en[[[SERVER_SOFTWARE]]]] に設定しなければ[['''なりません''']]。
[[クライアント]]に返す名前と版があれば、それと同じである[['''べきです''']]。 [SRC[>>7]]

[11] 具体的には [[HTTP]] [[応答]]の [CODE(HTTP)@en[[[Server:]]]] [[頭欄]]のことを言っているようです。
これは[[鯖]]の設定により意図的に含めないようにすることもできるのですが、
その場合 [CODE(CGI)@en[[[SERVER_SOFTWARE]]]] を設定しないことも認められているのかは不明瞭です。

* 歴史

[2] 形式は [NCSA] では
「name/version」と簡単にしか説明されていませんが、
すなわち [CODE(HTTP)[[[Server:]]]]
欄の値と考えてよいでしょう。

- [3] [COAR 03] には [CODE(ABNF)[SERVER_SOFTWARE = 1*[[product]]]] とあります。これは HTTP と同じ定義です。
- [4] [[Apache]] では、 [CODE(HTTP)[Server:]] 欄に入る値そのものが入ります。 >>3 では HTTP と同じ定義とかきましたが、よく見ると CGI では [CODE[[[comment]]]] が使えません。だから Apache は [COAR 03] に適合しないというか、 [COAR 03] が現状に則していないというか。
- [5] よく見ると [CODE(ABNF)[1product]] にあたる [NCSA] の定義と >>3 の定義ですでに異なっているわけです。もっとも、 [NCSA] が作られたのは HTTP の仕様がまとまる前だったと思いますから、それが現状に則してないということで無理にこだわる必要もないでしょうがね。

[8] 現在の定義では[[注釈]]も認められています。