Webアプリケーションの 通信メカニズム WEBアプリ研究プロジェクト 第2回
今日の目標 Webアプリケーションがどのような通信メカニズムの上に成り立っているのか説明できる クライアント・サーバシステムの仕組みを説明できる HTTPプロトコルの仕組みを説明できる
SFCのトップページを表示する ここって何だろう? ①ブラウザを使って情報を要求する ②対応する情報が送られてくる http://www.sfc.keio.ac.jp/ http://www.sfc.keio.ac.jp/ ③送られてきた結果を表示する hogehogehgoehgoe hogehoehgoehgoeh hgeoheohgoehgoeg gehoghoeghoehgoe http://www.sfc.keio.ac.jp/ image ②対応する情報が送られてくる ここって何だろう?
クライアント・サーバシステム サーバ クライアント 他の端末が利用する機能をネットワーク上に公開しているプログラムのこと サーバに対して要求をだし、サーバの機能を利用するプログラムのこと クライアントがサーバの提供する機能を利用するには、 クライアントプログラムとサーバプログラムの間で 通信する必要がある
サーバの機能を使うためには どのサーバのアプリケーションを 使うのかを特定しなければならない どのサーバと通信するのか ccz00.sfc.keio.ac.jp ホスト名 web.sfc.keio.ac.jp www.crew.sfc.keio.ac.jp ポート番号は1~65535 mail.sfc.keio.ac.jp www.yahoo.co.jp サーバの機能を使うためには どのサーバのアプリケーションを 使うのかを特定しなければならない
サーバ上で動いているプログラムの中で どのプログラムを 使うのかを特定しなければならない どのプログラムと通信するのか SSH WEB データベース メール ポート番号は1~65535 サーバ上で動いているプログラムの中で どのプログラムを 使うのかを特定しなければならない
ポート ・・・ POP:110 SMTP:25 TELNET:23 WEB:80 TOMCAT:8080 ・・・ Port:1 ・・・ Port:79 POP:110 SMTP:25 TELNET:23 WEB:80 TOMCAT:8080 Port:80 Port:81 Port:82 ・・・ Port:65535 多くのOSにはポートと呼ばれるネットワークの出入り口が定義されてる。OS上で動くプログラムにはそれぞれどのポートへの要求がそのプログラムへのものなのかが割り振られている
ポートを使った通信 1、接続要求 サーバ: web.sfc.keio.ac.jp クライアント: xxx.xxx.xxx Port:79 Port:xxxx Port:80 Webサーバ Port:xx Port:xx 2、データの送信
情報をサーバに伝える それではどのような形式で今まで挙げたような情報を サーバに伝えているのでしょう? みんなが使う統一の規格が必要 通信には プロトコル
HTTPプロトコル Hyper Text Transfer Protocol 現在HTTP1.1(RFC2616) ハイパーテキストの転送を行うプロトコル HTML、画像、音声ファイルなど ハイパーテキストとは リンク、マルチメディアコンテンツを含むことのできるデジタル文書フォーマット 現在HTTP1.1(RFC2616) 実際は1.0と共存している状態 リソースの送受信だけを行うことを目的としている シンプル:複雑な処理がない ステートレス:接続状態を保たない
HTTPによる通信 メッセージ交換 クライアントからサーバへの「リクエスト・メッセージ」 サーバからクライアントへの「レスポンス・メッセージ」 ※ 原則として1リソースごとに1往復のメッセージ交換 WEBブラウザ Hoge.html (1) HTMLファイルの取得 画像1 (2) 画像1ファイルの取得 画像2 (3) 画像2ファイルの取得
HTTPメッセージの構造(1) リクエスト・メッセージ レスポンス・メッセージ GET /index.html HTTP/1.1 Accept: */* Accept-Language: ja Accept-Encoding: gzip, deflate Referer:http://www.sfc.keio.ac.jp/~kobataka/ User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: www.sfc.keio.ac.jp HTTP/1.1 200 OK Server: Apache/1.3.12 (TurboLinux) mod_perl/1.24 ApacheJServ/1.1 Date: Sun, 11 Feb 2001 07:57:02 GMT Connection: close Content-Type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML lang="ja"> <HEAD> <META HTTP-EQUIV="Content-Type" content="text/html;charset=SHIFT_JIS"> (略) </BODY></HTML>
HTTPメッセージの構造(2) リクエスト・メッセージ レスポンス・メッセージ 命令 結果 報告 引数 内容 リクエスト・ライン ・ヘッダ リクエスト・ライン メッセージ ・ヘッダ ステータス・ライン 命令 結果 報告 各種ヘッダフィールド (リクエスト・ヘッダ 一般ヘッダ エンティティヘッダ) 各種ヘッダフィールド (リクエスト・ヘッダ 一般ヘッダ エンティティヘッダ) 空行(CR+LF) 空行(CR+LF) メッセージボディ (フォームのパラメータなど) メッセージボディ (HTMLファイル、 マルチメディアデータなど) 引数 内容
HTTPリクエスト リクエスト・ラインの書式 メソッド一覧 メソッド [空白] リクエストURL [空白] HTTPバージョン ※リクエストURLは、WEBサーバのドキュメントルートからの相対パス メソッド HTTPバージョン 機能 HEAD 1.0/1.1共通 指定したURL取得の結果レスポンスのヘッダーのみ取得する。 GET 1.0/1.1共通 指定したURLが示すリソースを取得する。 POST 1.0/1.1共通 指定したURLが示すサーバーに対してデータを転送する。 PUT 1.0/1.1共通 指定したURLが示すリソースに対して、データを転送して置き換える。 DELETE 1.0/1.1共通 指定したURLが示すリソースを削除する TRACE 1.1より追加 サーバーやプロキシの動作を診断するための情報を返答する OPTIONS 1.1より追加 使用できるメソッドやオプションの一覧を取得する CONNECT 1.1より追加 プロキシでのトンネリング接続を行う
HTTPバージョン [空白] ステータスコード [空白] 結果フレーズ HTTPレスポンス ステータスラインの書式 ステータスコード一覧(有名どころ) HTTPバージョン [空白] ステータスコード [空白] 結果フレーズ ステータス・コード HTTPバージョン 結果フレーズ 200 1.0/1.1共通 OK 301 1.0/1.1共通 Moved Permanently 302 1.0/1.1共通 Moved Temporarily 400 1.0/1.1共通 Bad Request 401 1.0/1.1共通 Unauthorized 403 1.0/1.1共通 Forbidden 404 1.0/1.1共通 Not Found 500 1.0/1.1共通 Internal Server Error
ブラウザを使ったHTTPによる通信 ブラウザはURLが示す場所のファイルを取得する URL(Uniform Resource Locator) リソースの場所を指定する 全世界で一意 書式: http://www.sfc.keio.ac.jp:80/~taka/index.html 相対URLでは、ドキュメントルートをサーバが自分で補って解釈してくれている スキーム: リソースにアクセスする手段。 他にも、mailto、ftp、file、telnetなんかがある。デフォルトはHTTP。 WEBサーバ名: IPアドレスを使用することも可能 ポート: アクセスするサーバのポート番号。デフォルトはHTTP標準の80番。 パス: WEBサーバの ドキュメントルートからのパス
リクエスト・メッセージを送り、結果を受け取る TelnetによるHTTP実習 Telnetを使って、WEBサーバに リクエスト・メッセージを送り、結果を受け取る やること 学校の端末(ccz01など)にSSHでログインする telnetでSFCのWEBサーバに接続します HTTPリクエストのGETメソッドを試してみよう! % telnet www.sfc.keio.ac.jp 80 Trying 133.27.4.212... Connected to www. Escape character is '^]'.
GETメソッド % telnet www.sfc.keio.ac.jp 80 Trying 133.27.4.212... Connected to www. Escape character is '^]'. GET /~kobataka/index.html 1.1 [+改行2回] --------------------------------------------- GET /~kobataka/cgi-bin/httptry.cgi?name=hoge&age=22 1.1 [+改行2回]