Livingdeadの日記: HTTP/0.9にハマル 1
ライブドア・データホテル・パトロールというサービスを使っている.これはなかなかのすぐれもので,ウェブサーバの監視をはじめ証明書の期限切れ検知などにも使えるのだが,最近lighttpdを使っているウェブサービスの死活監視に使ってみてHTTP/0.9のリクエストになっているのかなと思った.
というのはlighttpdにtelnetで接続して「GET / 」と打つと400 Bad Requestになるのだが,データホテル・パトロールでも確かに400を検出して異常が検知されたことになる.実際にウェブブラウザで閲覧してみると問題無い.「GET / HTTP/1.0」とすると200でページを取得することができる.おそらく世の中で使われているのはサーバ,ブラウザ共にHTTP/1.1対応のものがほとんどで,自分も気にしてなかったのだが,GET / 等というリクエストはどの頃からダメ扱いになったのかなと思って調べてみた.で,結局単に HTTP/0.9 では不要,HTTP/1.0 以降では必須というだけのことらしい.こんなことすら知らずにウェブサービスをしていたとは…
5. Request
A request message from a client to a server includes, within the
first line of that message, the method to be applied to the resource,
the identifier of the resource, and the protocol version in use. For
backwards compatibility with the more limited HTTP/0.9 protocol,
there are two valid formats for an HTTP request:Request = Simple-Request | Full-Request
Simple-Request = "GET" SP Request-URI CRLF
Full-Request = Request-Line ; Section 5.1
*( General-Header ; Section 4.3
| Request-Header ; Section 5.2
| Entity-Header ) ; Section 7.1
CRLF
[ Entity-Body ] ; Section 7.2If an HTTP/1.0 server receives a Simple-Request, it must respond with
an HTTP/0.9 Simple-Response. An HTTP/1.0 client capable of receiving
a Full-Response should never generate a Simple-Request.
手抜き? (スコア:2)
lighttpd は使った事がないので、ナニですが。
てことは、GET / に対して / のコンテンツを返さないといけないわけですが、lighttpd では、エラーにしちゃうんですね。ちなみに Apache だと、
#大文字のMUSTじゃないから、どうでもいいってか。