Server

Server: ヘッダー (HTTP)

[1] Server: ヘッダーは、 要求を処理して応答生成した起源鯖ソフトウェアの名前や版を表します。

[24] 要求メッセージ利用者エージェントを表す User-Agent: ヘッダーに相当するもので、構文も同じです。

仕様書

意味

[10] Server: ヘッダーは、 起源鯖要求を処理するために使ったソフトウェアの情報を含みます >>9

[11] このヘッダーは、クライアント相互運用性の問題の範囲を特定するのを補助したり、 特定のの制限に対処するために使ったりすることがあります >>9

[18] モジュール化されたでは、起源鯖本体だけでなく、 モジュールの情報も値に含まれることがあります。

[19] 例えば Apache

Server: Apache/2.2.6 (Unix) mod_ssl/2.2.6  PHP/5.3.6
... のような Server: ヘッダー生成することがあります。

[17] 起源鯖は、必要以上の詳細を含む Server: ヘッダー生成するべきではなく、 第三者の部分製品が値を追加することを制限するべきです。 長すぎると応答遅延を増大させてしまいますし、 攻撃者が既知のセキュリティーホールを探すのを容易にしてしまいます。 >>9

[26] ただし実際にはソフトウェアの版情報がなくとも攻撃者はセキュリティーホールを探していることも指摘されています >>25

[20] 例えば、

Server: Apache/2.4.10 (Unix) OpenSSL/1.0.1i
... のような Server: ヘッダーが実際に使われていますが、 OpenSSLHTTP 起源鯖のソフトウェア名の一部として記述するのが妥当なのかは怪しいところです。

構文

[14] 1つ以上の product または comment を、 RWS 区切りで並べたものとされています。ただし、最初の1つは product でなければなりません。 >>9

  1. product
  2. *
    1. RWS
    2. |
      1. product
      2. comment

[15] ここで product は、起源鯖のソフトウェアと主要な部分製品を識別上の重要なものから順番に並べたもの >>9 とされています。

[16] この構文は User-Agent: ヘッダーと同じです。 User-Agent: と同じく、必ずしもこの構文は守られていません。 ただ利用者エージェントの多様性に比べ起源鯖の種類は多くないので、 この構文に適合する Server: ヘッダーはかなり多い印象です。

[27] セキュリティーのために、詳細な情報を記述することは好ましくないと考える人もいます。 実際にどの程度詳細な情報が指定されるかは、の実装や設定によって様々です。 ソフトウェアによっては、著者の設定によって詳細度を数段階制御できたり、 追加モジュール等の API によって追加モジュール等の製作者が自由に情報を追加できたりすることもあります。

[29] SSDP では更に詳しく構文が決められていて、 UPnP の版などを入れることになっています >>28

文脈

[12] 起源鯖Server: ヘッダー生成して構いません >>9

[13] 多くの生成するようですが、必須ではないようです。

[30] プロキシサーバー転送時に応答Server: ヘッダーが存在していない場合に生成して良いかどうか、 明記されていません。一般的には明記されていないことは認められないと解釈するべきと思われます。

[31] プロキシサーバーに関する情報は Via: ヘッダーに記述できます。

歴史

[3] RFC 1945 (HTTP/1.0) 10.14; RFC 2068 (HTTP/1.1) 14.39; RFC 2616 (HTTP/1.1) 14.38 Server

The Server response-header field contains information about the software used by the origin server to handle the request. The field can contain multiple product tokens (Section {1945} 3.7 3.8) and comments identifying the server and any significant subproducts. {1945} By convention, the The product tokens are listed in order of their significance for identifying the application.

Server 応答頭欄は、起源鯖要求を取り扱うために使われているソフトウェアについての情報を含めます。 この欄は、複数の product 字句およびサーバーと重要な部分製品を識別する注釈を含めることができます。 product 字句は、その応用を識別するのに有意な順に列挙します。

  • Server = "Server" ":" 1*( product | comment )

Example:

  • Server: CERN/3.0 libwww/2.17

If the response is being forwarded through a proxy, the proxy application {1945} must not add its data to the product list {2068,2616} MUST NOT modify the Server response-header. Instead, it {2068,2616} SHOULD {Errata} MUST include a Via field (as described in section {2068} 14.44 {2616} 14.45).

応答がを通じて転送される時には、串応用は Server 応答頭を修正してはなりません。 代わりに、 Via 欄を含めなければなりません

Note: Revealing the specific software version of the server may {2616} might allow the server machine to become more vulnerable to attacks against software that is known to contain security holes. Server implementers are encouraged to make this field a configurable option.

注意: 鯖の特定ソフトウェアの版を晒すと、既知の安全上の穴があるソフトウェアへの攻撃に関してより脆弱になってしまうかもしれません。 鯖実装者はこの欄を設定可能な選択肢とすることを推奨します。

{1945} Note: Some existing servers fail to restrict themselves to the product token syntax within the Server field.

注意: 既存の鯖の中には Server 欄の product 字句構文に反しているものもあります。

[2] RFC 3507 - Internet Content Adaptation Protocol (ICAP) ( ( 版)) <http://tools.ietf.org/html/rfc3507#section-4.3.3>

関連

[7] CGI ではほぼ相当するメタ変数 SERVER_SOFTWARE があります。

[21] 要求メッセージには利用者エージェントを表す User-Agent: ヘッダーがあります。

[22] Via: ヘッダーにソフトウェア名を記述できます。

[23] の裏側で実際に処理を行うアプリケーションサーバーの類の情報は、 Server: には記述せず、 X-Powered-By:X-Framework: のようなヘッダーに記述するのが一般的です。 のモジュールとして動作する PHPmod_perl などは Server: に現れる場合と X-Powered-By: などに現れる場合、両方に現れる場合があります。いずれにせよアプリケーションサーバー上で実際に動く (言語フレームワークの類ではない) 実際のアプリケーションの名前が記載されることはあまりないようです。

メモ

[8] Kazuho@Cybozu Labs: サーバシグニチャは隠さないのが当たり前 ( 版) <http://labs.cybozu.co.jp/blog/kazuho/archives/2007/09/re_server_sig.php>

[32] GitHub () <https://github.com/>

Server: GitHub.com

[33] <https://www.facebook.com/>Server: を送信しないようです。

[34] Configuration • Akka HTTP () <https://doc.akka.io/docs/akka-http/current/configuration.html>

# The default value of the `Server` header to produce if no

# explicit `Server`-header was included in a response.

# If this value is the empty string and no header was included in

# the request, no `Server` header will be rendered at all.

server-header = akka-http/${akka.http.version}

[35] 国土交通省 () <http://www.mlit.go.jp/>

Server: Secret

Webサーバー国家機密のようですw