HTTPヘッダ情報
|
|
ヘッダ情報とは要求のHTTPメッセージのパケットのヘッダ部分の情報のことを云う。ヘッダ部分は複数のヘッダ行で構成されている。先頭の行のヘッダは次のようである。
GET / HTTP/1.1
GETはメソッドと呼び、コマンドの種別を示す。10個ほどのメソッドが定義されているが、皆さんが利用するメソッドはGET、POSTの二つであろう。HTTP/1.1は使われているプロトコルとそのバージョンである。現在のバージョンは1.1だが、古い1.0のバージョンのクライアントも存在している(NetscapeのNavigatorもそうである)ので注意が必要である。付属資料(HTTPメソッド一覧)はメソッドの一覧である。ひととおり目を通しておいて頂きたい。
2行目からのヘッダ行には多種のものが存在するが、そのうち主要なものを付属資料(HTTPヘッダ一覧)に示す。詳細はhttp://www.w3.org/Protocols/にある仕様書(RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1)を参照されたい。
こんなに多くのヘッダがあると一体どうなるのだろうかと心配する人も出よう。しかしながら通常のアプリケーションではこれらの一部しか使われない。必要としないヘッダがついてきても通常これを無視すればよい。ただし大事なヘッダ情報を無視しないよう注意が必要である。
皆さんが良く利用するヘッダは次のようなものであろう:
Accept |
クライアントが受理可能なMIMEタイプ |
Accept-Charset |
ISO-8859-1などクライアントが処理可能な文字セット |
Connection |
TCPソケットを接続したままにするか否か(keep-aliveまたはclose) |
From |
要求者のe-mailアドレス(Spiderが使う) |
Host |
元のURLにあるホストとポート(HTTP/1.1では必須) |
If-Modified-Since |
これより新しいバージョンのコンテントを送信要求 |
Pragma |
no-cacheという値はプロキシにキャッシュしないでいつも要求を転送するよう指示 |
Referer |
参照しているウェブ・ページのURL |
User-Agent |
ブラウザまたはクライアント |
HttpServletRequestインターフェイスには初期要求行を除くヘッダ行情報の取得用に以下のメソッドが定義されている。
getHeader |
名前を指定して値を取得 |
getHeaders |
列挙型でヘッダの全てを取得 |
getHeaderNames |
列挙型でヘッダ名の全てを取得 |
更にヘッダにはint型あるいはDate型オブジェクトで返したほうが便利なものもある。その為にHttpServletRequestインターフェイスには次のようなメソッドも用意されている。
getIntHeader |
名前を指定してint値で整数型ヘッダを取得 |
getDateHeader |
名前を指定してlong値で日付型ヘッダを取得 |
初期要求行の内容を知るにはどうしたらよいのであろうか?それには以下のメソッドを使用する:
getMethod |
String型でHTTPメソッドを取得 |
getServerName |
String型でサーバ名を取得 |
getServerPort |
intでサーバのTCPポート番号を取得 |
getRequestURI |
String型で要求URIを取得 |
getQueryString |
String型でクエリ文字列を取得(例えば”http://localhost:8080/HttpRequestDump ?MyName=Terry&Yesterday=Wednesday”というURLの場合は”MyName=Terry&Yesterday=Wednesday”なる文字列が返される) |
とりあえず次のHttpRequestDumpというサーブレットで、要求情報をダンプしてクライアントのブラウザ画面に表示してみよう。上記のメソッド以外にも、HttpServletRequestクラスや、そのスーパークラスであるServletRequestで定義されている大部分のメソッドが、このサーブレットで使われている。