Monday, October 12, 2009

HTTP POST Method - Reading Track (3)

今日の課題

POSTの内容はどうなっているのか?誰がPOSTの内容をXML文書に成形しているのか?


<request><login>username</login><password>abc123<password></request>

POSTリクエストを送信したときのパケットをキャプチャしてみた。TCP payloadの内容を以下に記す(passwordの箇所は"password"でマスクした)。


POST /login HTTP/1.1
Host: 192.168.1.101:3000
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20091007 Ubuntu/9.10 (karmic) Firefox/3.5.3 GTB5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-2022-JP,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://192.168.1.101:3000/login
Cookie: preferred_auth=database; tracks_login=admin; _tracks_session_id=e22a17f51266e7fa3b30fb6cd3def1fb
Content-Type: application/x-www-form-urlencoded
Content-Length: 139

authenticity_token=2fc78f9b3f11d9447cdc5719f19742bdfe9b531f&user_login=admin&user_password=password&user_noexpiry=on&login=Sign+In+%C2%BB

Studying HTTPは,HTTP/1.1 Post Methodについて解説していただいている。そこを参照すると,Content-Type: application/x-www-form-urlencoded はエンテティボディのメディアタイプとして一般的に利用されているタイプの一つで,今回のUser-Agent (Firefox 3.5.3) は,この方式でエンティティを送信しているものと考えられる。このように,規格があるのならば,このようなRequestパケットを受信したRailsアプリケーションがurlencodedなデータから,validなXML-documentを生成するのは簡単だろう。他のブラウザではどのような形式で送信するかわからないが,そこのところはRailsでwrapperしているものと考えればいいのだろう。

No comments: