本文とサイドメニューへジャンプするためのナビゲーションスキップです。

スタートアップガイド

J-Net21 中小企業ビジネス支援サイト

  • J-Net21とは
  • スタートアップガイド
中小機構
  • メルマガ登録
  • RSS一覧
  • お問い合わせ

HOME > 製品・技術を開発する > デジ・ステーション

デジ・ステーション


初級ネットワーク講座
第13回 HTTPの仕組みとブラウザ

「インターネットする」という言葉はもはや一般用語としてすっかり定着した。日々の「インターネット」の主な用途は、「Webページの閲覧」と「電子メールのやりとり」である。そこで今回は、「Webページの閲覧」のためのプロトコルであるHTTPについて説明する。あわせてセッション維持や利用者情報の収集などに使われるクッキーと、その安全な使い方についても説明する。

1 HTTPを徹底理解!

1-1 HTTPとは

HTTPは、HyperText Transfer Protocolの略で、HTML(HyperText Markup Language)で記述されたハイパーテキストをはじめ、XML(eXtensible Markup Language)で記述されたデータ、JavaとXMLで動作するアプリケーション、画像・動画・音声・表計算データ・ワープロデータ・プログラムなどのバイナリデータが転送可能なプロトコルである。RFC4616で定義されており、通常はポート番号80のTCPコネクションを利用する。
 HTTPのサーバのことを一般的にWebサーバ、またはWWWサーバと呼ぶ。クライアントでは、HTTPから送られてきたWebページを閲覧するためにブラウザを用いる。
 HTTPというプロトコルは、1度クライアントがサーバに要求を出してサーバが応答すると、サーバはすべてのデータを一方的にクライアントに送信して、コネクションを切断する。サーバはクライアントの状態を保持していない。例えば、ブラウザで、あるWebページを途中まで読み込んでいたとしよう。いったん「中止」ボタンをクリックして「再読み込み」、または「更新」ボタンをクリックすると、Web画面の最初から表示しなおす。これを「ステートレスなプロトコル」と呼ぶ。
 一方メールの場合、例えば5通メールが届いていて3通目まで読み込んだとする。いったん「中止」ボタンをクリックして「受信」ボタンをクリックすると、4通目から読み込み始める。つまり、メールサーバはクライアントが3通目まで読み込んだことを確認しているのである。これを「ステートフルなプロトコル」と呼ぶ。
 そのため、ネットショッピングのようにWebサーバとクライアントの間で、何度もデータのやりとりが必要な場合、Webサーバはクライアントとのやりとりの状態を管理しなければならない。HTTPというプロトコルは、「ステートレスなプロトコル」なので、1つのコネクションで、クライアント→Webサーバ→クライアント、という一往復の会話しかできない。そこで一連のやりとりを管理するための「セッション管理」の概念が必要となる。
 人間の会話に例えると「◎◎さんと、いつ、どこまで話をしたか」をメモに残し、次の会話に備える。「セッション管理」の1つの手法として、後で詳しく説明する「クッキー」が用いられる。

1-2 HTTPとは

まずは、実際にWebページを閲覧する際のパケットの流れを見てみよう。ブラウザを開いてアドレスにURL「http://j-net21.smrj.go.jp/develop/digital/entry/002-20090204-01.html」を入力し、「初級ネットワーク講座 第12回」の画面を表示させたところで、パケットキャプチャツールを使ってパケットを取得する(図1)。


図1 パケットキャプチャの結果


IPアドレス192.168.0.101はPC(クライアント)、133.194.234.20は、www.keyman.or.jp(Webサーバ)である。パケット1からパケット3までで、クライアント(ポート番号:1778)とWebサーバ(ポート番号:80、HTTP)間のTCPのコネクションを確立している。その次のパケット4から、データのやり取りが始まる。
 TCP/IPを利用するアプリケーション層プロトコルで、クライアントとサーバとの間でやり取りをする場合(※注1)、多くの場合、やり取りするデータの中身や意味にかかわらず、クライアントからサーバに向かうデータを「コマンド」とよび、サーバからクライアントに向かうデータを「レスポンス」または「応答メッセージ」と呼ぶ。
 またデータはASCII文字列となっており、1つのデータには、複数の制御情報が含まれている。制御情報は「CR」(16進数で"0D")「LF」(16進数で"0A")で区切られている。

 (※注1)他にサーバ対サーバ、クライアント対クライアントの通信もある。

1-3 コマンド

図2 パケット4の詳細

パケット4 192.168.0.101(クライアント)
    →133.194.234.20(Webサーバ)

このパケットを詳しく見てみると(図2)、データ部があり、クライアントからWebサーバに向かっているので、これは「コマンド」である。
 制御情報ごとに分けてみると図3の通りになる。


図3 パケット4の内容詳細


 1行目はリクエストライン、2行目以降は、メッセージヘッダまたはMIMEヘッダと呼ばれる。
  リクエストライン「GET /3w/prd/82/30002782/ HTTP/1.1」を分割すると以下の通りになる。

[メソッド] GET
[URI(注2)] /3w/prd/82/30002782/
[HTTP バージョン] HTTP/1.1

(※注2) URL(Uniform Resource Locator)、URI(Uniform Resource Identifier)のいずれも、インターネットにおける位置情報である。
今回の例では以下の通りとなる。
 URL: http://www.keyman.or.jp/3w/prd/82/30002782/
 URI: /3w/prd/82/30002782/
位置情報を表す場合、URIが正式名称であり、URLが俗称である。


HTTPメソッド

HTTPを用いてWebサーバと情報の送信・取得を行う場合、いくつかの種類の方法があり、それをHTTPメソッドという。下記に、HTTPメソッドの一覧をあげる。バージョンによる違いがあり、○は仕様として定義されていること、△は補遺であることを示す。

図4 HTTPメソッドとその意味


一般的には、GETとPOSTが多く利用される。


パケット5 133.194.234.20(Webサーバ)→192.168.0.101(クライアント)
    データ部をもっていないため、単なる確認応答である。

レスポンス

図5 パケット6の詳細

パケット6 133.194.234.20(Webサーバ)
    →192.168.0.101(クライアント)

  パケット6を詳しく見てみると(図5)、データ部があり、Webサーバからクライアントに向かっているので、これは「レスポンス」である。


制御情報ごとに分けてみると図6の通りになる。


図6 パケット6の内容詳細


1行目は、ステータスライン、2〜13行目は、メッセージヘッダまたはMIMEヘッダと呼ばれる。
  14行目は空行で、15行目以降が、本文(上記例ではHTML形式の記述文書)となっている。


ステータスラインには、次のように、動作の結果を3桁の数値で示すステータスコードとレスポンスフレーズが記載されている。

「HTTP/1.0 200 OK」
[ステータスコード] 200
[レスポンスフレーズ] OK

ステータスコードの主な意味は以下の通りである。
  100番台 情報の提供
  200番台 肯定的な応答
  300番台 転送要求(リダイレクション)
  400番台 クライアントからの要求内容のエラー
  500番台 サーバのエラー

クッキー

先にみてきたパケット4とパケット6には、Cookie(クッキー)に関する情報があったのにお気づきだろうか。ここでは、ユーザを識別するためにクッキーが用いられている。
 クッキーは、セッション維持や利用者の訪問記録などの情報の収集などに利用されるもので、Webサーバで生成され、HTTPでクライアント(ブラウザ)に送信される。クライアント(ブラウザ)は、受け取ったクッキーを格納しておき、同じURIにアクセスした際、またはWebサーバからクッキーの要求があった場合には、そのクッキーをWebサーバに送信する(図7)。

図7 クッキーの仕組み


クッキーは、大きく2つに分類できる。

セッションクッキー:クライアントのコンピュータのメモリに格納され、ブラウザを閉じると同時に消去される一時的なクッキー。

固定クッキー:クライアントのコンピュータのハードディスクに格納され、ブラウザを閉じても、電源を落としても消去されない永続的なクッキー。

【セッションクッキー】
 例えば、ショッピングサイトで買い物をすることを考えてみよう。商品一覧を見たり、商品を買い物カゴに入れたり、配送先の住所や決済情報の入力など、何度もWebサーバとのやりとりをしなければならず、そのたびにTCPコネクションの確立が必要である。
 しかし、多くのショッピングサイトは信頼性およびパフォーマンス向上のため、複数のWebサーバで構成されている。一度、ログインのためTCPコネクション確立した後、次のTCPコネクション確立で、同じWebサーバに接続される保証はない。
そこでWebサーバは、ユーザを識別するために、Webサーバやユーザ情報などを書き込んだセッションクッキーを生成してクライアントに送る。
 これによって、次のTCPコネクション確立要求の際には、ユーザが前回と同じWebサーバに振り分けられるようになる。


【固定クッキー】
 次のような経験をお持ちではないだろうか。
  ○あるポータルサイトを閲覧した際に「こんにちは、○○さん」と表示される。
  ○1回目はログインのためにID、パスワードを入力したのに、2回目以降はIDとパスワード欄が自動的に入力されログインされている。
 このキーマンズネットも、2回目の閲覧以降はID、パスワードの入力は不要である。これは、固定クッキーを利用しているからだ。
 固定クッキーは住所や決済情報などを含む場合が多いので、モバイルPCをうっかり紛失したり、盗難にあったりした場合、個人情報漏洩や悪用などのリスクが高い。このリスクは、クッキーをコントロールすることで回避できるが、その方法は「3-2.ブラウザのセキュアな使い方」で後述する。

コラム:クッキーの語源
 クッキーといえば、誰でも真っ先にお菓子のクッキーを連想するだろう。Webの閲覧で使われる「クッキー」は、お菓子のクッキーが語源と言われる。
 アメリカの子ども向けテレビ番組『セサミストリート』に、クッキーモンスターというキャラクターが出てくる。彼はクッキーが大好物で、大量のクッキーをいつもバリバリ食べてしまう。Webサーバがそのようにクッキーを食べてしまうことから命名されたという説もある。
【次回予告】
 次回は、インターネットの主な用途である「電子メールのやりとり」について説明する。メールを転送するプロトコルであるSMTP、メールサーバのメールボックスに届いたメールを取りにいく、POP3やIMAP4などのプロトコルについて説明する。

取材協力 :株式会社アイテック

掲載日:2009年2月 4日

キーマンズネット

出典元:株式会社リクルート キーマンズネット 2008年11月11日掲載分

検索

このページの先頭へ