Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから
公開日:2013年2月23日
最終更新日:2013年2月27日

HTTP の基本

Webアプリケーションは、HTTP(Hypertext Transfer Protocol)というプロトコル上で動作します。

プロトコルとは、規約であり約束事です。ブラウザと Webサーバーが、お互いに決まった約束事で通信するので問題なく Webアプリケーションが動作するようになります。

HTTP は平文(ひらぶん、人間が読めるテキスト形式)でデータのやり取りをします。ブラウザから Web サーバーへ処理を要求することをリクエスト、Web サーバーからブラウザへの応答をレスポンスと呼びます。

pic02

理解を深めるために、ブラウザと Web サーバー間のデータのやり取りを Fiddler というツールで見てみましょう。Fiddler の詳細については、以下の記事をご覧ください。

Fiddler を起動して、ブラウザでこのサイトのアドレスである https://www.websec-room.com/ にアクセスしてみましょう。すると、HTTP のリクエストとレスポンスの内容が表示されます。

pic01

リクエストメッセージヘッダーの内容は以下のようになっています(Cookie部分は編集)。

GET https://www.websec-room.com/ HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: ja-JP
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Accept-Encoding: gzip, deflate
Host: www.websec-room.com
DNT: 1
Connection: Keep-Alive
Cookie: XXXXX

1行目はリクエストラインと呼ばれ、以下の形式になっています。

メソッド リクエストURL プロトコルバージョン

HTTP のメソッドは Web サーバーに対する命令です。ここでは以下の2つを覚えておきましょう。

GET Webサーバーのリソースを取得
POST Webサーバーに処理を依頼

リクエスト URL は、Webサーバーのアドレスを指定します。Fiddler を経由しているので通常のアドレス形式になっていますが、本来であればここは / になります。

プロトコルバージョンは HTTP のバージョン1.1になっています。

6行目の Host はリクエストの送信先 Web サーバーになります。

今回は GET メソッドだったためメッセージボディがありませんが、POST メソッドの場合はヘッダーの最終行から1行空けて POST リクエストの内容がメッセージボディに指定されます。

 

レスポンスヘッダーは以下のようになります(ヘッダー部のみ)。

HTTP/1.1 200 OK
Date: Sat, 23 Feb 2013 04:01:17 GMT
Server: Apache
X-Frame-Options: DENY
X-Pingback: https://www.websec-room.com/xmlrpc.php
Connection: close
Content-Type: text/html; charset=UTF-8
Content-Length: 12087

1行目はステータスラインと呼ばれ以下の形式になっています。

プロトコルバージョン ステータスコード テキストフレーズ

ステータスコードは100の位で意味が分かれます。

1xx 処理継続中
2xx 正常終了
3xx リダイレクト
4xx クライアントエラー
5xx サーバーエラー

7行目の Content-Type は MIME(マイム) タイプという形式でリソースの種類と、文字コードを表しています。ここでは、HTML形式で文字コードが UTF-8 であることを示しています。

レスポンスヘッダーの最終行から1行空けてレスポンスボディが表示されます。ここでは HTML が表示されます。

  • HTTP はリクエストとレスポンスがセットになる
  • HTTP はテキスト形式で情報をやり取りする

スポンサーリンク




カテゴリー:Webアプリケーションセキュリティ

Twitter でも、いろんな情報を発信しています。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA