この章では、アプリケーションの引数envの中身についてもう少し説明します。たとえば、ローカルのサーバの http://localhost:4242/sns/member?id=3 のようなURLにアクセスしたとき、envの中身は以下のようになっています。
(:request-method :GET :script-name "" :path-info "/sns/member" :query-string "id=3" :server-name "localhost" :server-port 4242 :request-uri "/sns/member?id=3" :server-protocol :HTTP/1.1 :http-user-agent "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) ..." :remote-addr "127.0.0.1" :remote-port 26077 :http-referer nil :http-host "localhost:4242" :http-cookies nil)
そして、以下が各値の説明です。ほとんどの場合これらすべてを暗記する必要はありません (もしClack Handlerを作ろうとしているのでない限りは)。あまり気張らず情報程度に考えてください。
:request-method(必須, キーワード)- HTTPリクエストメソッドです。
:GET、:HEAD、:OPTIONS、:PUT、:POST、:DELETEのいずれか1つが入っています。 :script-name(必須, 文字列)- リクエストURLパスの最初の部分です。アプリケーションのサーバルート(/)のときは空文字列が入ります。空でないときは必ずスラッシュ(/)で始まる文字列です。
:path-info(必須, 文字列)- リクエストURLパスの残りの部分です。アプリケーションルートのときは空文字列になります。
:query-string(任意, 文字列)- リクエストURLの
?以下の部分です。このキーは空の可能性もありますが、キー自体は存在する必要があります。 :server-name(必須, 文字列)- サーバ名かサーバのIPアドレスが入っています。
:server-port(必須, 整数)- サーバのポート番号です。
:server-protocol(必須, キーワード)- クライアントがリクエストを投げるのに使ったプロトコルのバージョンです。典型的なものは
:HTTP/1.0や:HTTP/1.1です。 :request-uri(必須, 文字列)- リクエストURI全体です。"/"から始まります。
:server-protocol(必須, キーワード):raw-body(任意, ストリーム):http-user-agent(任意, 文字列):http-referer(任意, 文字列):remote-addr(必須, 文字列):remote-port(必須, 整数):http-server(必須, キーワード)- Clack Handlerの名前です。
:hunchentootや:apacheが入ります。