2003年度 データベース論

HTTPプロトコル
J2EE I
第7回 / 2005-06-23
1
ここでの内容


URLを理解する。
HTTPの仕組みを知る。





要求 (request) と 応答 (response)
ブラウザの動作がイメージできる。
HTTPの動作をのぞいてみる。
HTMLのフォームから入力したデータと、
HTTP の要求 (request) の関係。
JSP と HTTPの要求・応答との関係。
2
ホスト名とポート番号

インターネットでの通信に必要なもの



ホスト名 (= IPアドレス)
ポート番号
HTTPだって例外ではない
3
URL
http://ホスト名:ポート番号/パス?クエリー




ホスト名(= IPアドレス)
ポート番号が 80 なら省略できる。
パスは「Webサーバ上のファイルのあり
か」
クエリーは、動的なページ作成に使う
4
URL の例
http://www.wakhok.ac.jp/
 www.wakhok.ac.jp という「ホスト (=コンピュータ)」
に接続
 ポートは 80番なので省略している

http://www.wakhok.ac.jp:80/ と書いてもよい。
http://localhost:8080/
 localhost の 8080 番に接続
5
HTTP というプロトコル




インターネットでの通信方法 (= プロトコ
ル) は、RFC というもので規定されている。
HTTP は、WebブラウザとWebサーバの通
信方法について定めている。
HTTP は RFC2616 で規定されている。
HyperText Transfer Protocol (= HTTP)
6
HTTP



最初に、ホスト名とポート番号を使って接
続を確立
「要求」を出して「応答」がくる。
ブラウザが応答の中身を表示する。
7
http://localhost:8080/example
s/jsp/index.html を見る場合





URL を解釈する
localhost の 8080 番に接続
「/examples/jsp/index.html をくれ!」 (要求)
「はい、お渡しします」と index.html を渡す
(応答)
index.html を表示
8
Webブラウザからの要求(request)
概要
GET /examples/jsp/index.html HTTP/1.1
Host: localhost
User-Agent: ……
……
……
(リクエスト行)
(ヘッダ)
(ヘッダ)
(ヘッダ)
(ヘッダ)
(空行)
(本文)
9
Webブラウザからの要求(request)
リクエスト行
GET /examples/jsp/index.html HTTP/1.1

「GET」 がメソッド



メソッドとは、要求の種類の指定
「/examples/jsp/index.html」が対象となる
URI
「HTTP/1.1」が HTTP のバージョン
10
Webブラウザからの要求(request)
いろいろなメソッド

GET


POST


URI に情報を送信する
HEAD


URI の内容を取得する
URI に関するヘッダ部分のみを取得する
などなど
11
Webブラウザからの要求(request)
ヘッダ

要求 (request) に必要な関連する情報


Host


どの名前のホストにアクセスするか。
User-Agent


フィールド名: 値
どんなブラウザを使っているか
Referer

どのページからやってきたかわかる。(どこからリンク
が貼られているかわかる)
12
Webブラウザからの要求(request)
本文


GET では使わない
POST で使う
13
HTTP
14
Webサーバからの応答
概要
HTTP/1.1 200 OK
Etag: ….
Last-Modified: …
Content-Type: text/html
Content-Length: 7487
<html>
….
</html>
(response)
ステータス行
ヘッダ
ヘッダ
ヘッダ
ヘッダ
空行
本文
15
Webサーバからの応答
ステータス行
(response)
HTTP/1.1 200 OK


「HTTP/1.1」は、HTTPのバージョン
「200」はステータスコード


サーバからの応答がどのような種類のものか
「OK」は説明文

ステータスコードについての説明
16
Webサーバからの応答
ステータスコード

200 番台 -- 要求が正常に処理された


200
OK
成功
400 番台 – クライアント側に問題がある



(response)
403
404
Forbidden アクセスを拒否
Not Found 該当するものがない
500 番台 – サーバ側に問題がある

500
Internal Server Error
エラー発生
17
Webサーバからの応答
ヘッダ

応答 (response) に必要な関連する情報


本文に書かれているものがどういった種類の
ものか
Content-Length


フィールド名: 値
Content-Type


(response)
本文に書かれているもののサイズ
Last-Modified

このURIが最後に更新されたのはいつか
18
Webサーバからの応答
Content-Type


(response)
MIME 型で本文の種類を示す
代表的な MIME型






text/html
text/xml
text/plain
image/gif
image/jpeg
video/mpeg
HTML文書
XML文書
テキスト
GIF画像
JPEG画像
MPEG
19
Webサーバからの応答
本文


(response)
HTML を取得するのなら HTML
JPEG 画像を取得するのなら JPEG
20
HTTP
21
Webブラウザの働き

HTTP は要求と応答がペア


たいていのWebページは、複数のファイルを含む



1回の要求につき、1つのファイルを取得
画像がいっぱいのWebページ
フレームを使ったページ
ブラウザは、HTMLを解析する

途中で取得しなければならない画像などのファイルを
見つけたら、改めて要求を出す
22
HTTP
23
HTMLのフォーム (1)
画面イメージ

Webブラウザから何かを入力してもらうた
めに使う。
24
HTMLのフォーム (2)
HTMLのソース
<p>姓名を入力してください:</p>
<form method=“get” action=“name.jsp”>
<p>姓: <input type=“text” name=“familyName”
/></p>
<p>名: <input type=“text” name=“givenName”
/></p> <input type=“submit” value=“実行” />
<input type=“reset” value=“キャンセル” />
</form>
25
フォームとプログラム


「実行」ボタンが押されると、HTTPの要求
を用いて、フォームに入力したデータがプ
ログラムに渡される。
プログラムに渡すときは、次のメソッドを使
う。


GET
POST
26
POSTメソッドによる処理 (1)
HTMLのソース
<p>姓名を入力してください:</p>
<form method=“post” action=“name.jsp”>
<p>姓: <input type=“text” name=“familyName”
/></p>
<p>名: <input type=“text” name=“givenName”
/></p> <input type=“submit” value=“実行” />
<input type=“reset” value=“キャンセル” />
</form>
27
POSTメソッドによる処理 (2)
要求の内容
POST /test/name.jsp HTTP/1.1
……
……
Content-Length: 35
(←空行)
familyName=maruyama&givenName=fujio
(←本文の内容が「クエリー」)
28
POSTメソッドによる処理 (3)
クエリーの内容
familyName=maruyama&givenName=fuji
o




familyName の値が “maruyama”
givenName の値が “fujio”
パラメータと値の間を “=” でつなぐ
パラメータと値の組み合わせを “&” でつな
ぐ
29
POSTメソッドによる処理 (4)
プログラムの処理後の画面

name.jsp を呼び出している
30
GETメソッドによる処理 (1)
HTMLのソース
<p>姓名を入力してください:</p>
<form method=“get” action=“name.jsp”>
<p>姓: <input type=“text” name=“familyName”
/></p>
<p>名: <input type=“text” name=“givenName”
/></p> <input type=“submit” value=“実行” />
<input type=“reset” value=“キャンセル” />
</form>
31
GETメソッドによる処理 (2)
要求の内容
GET /test/name.jsp?familyName=maruyama&
givenName=fujio HTTP/1.1
……
……
If-Modified-Since: Sun, 19 Jan 2003 00:39:50
GMT
32
GETメソッドによる処理 (3)
リクエスト行とクエリーの内容
GET
/test/name.jsp?familyName=maruyama&
givenName=fujio HTTP/1.1


リクエスト行にクエリーが置かれている。
プログラム名 “name.jsp” の後に “?” があり、
その後にクエリーが続く。
33
GETメソッドによる処理 (4)
プログラムの処理後の画面

URL に クエリーが含まれる。
34
POSTとGETの使い分け (1)
POSTを使う場合

POST




通常はPOSTを使う。
GETメソッドでは、送るデータ量に制限がある。
GETメソッドでは、改行を渡せない (=掲示板
のようなサイトでは使えない)
GETメソッドでは、パスワードは送れない (=
見えてしまうから)
35
POSTとGETの使い分け (2)
GETを使う場合

GET



クエリーがURLにでているので、ブックマーク
に保存したり、リンクをはったりできる。
例えば、Google の実行結果にリンクを貼った
りする。
POSTメソッドだとこうはいかない。
36
JSPと要求・応答

要求の処理には、request という変数を使う。





request.getMethod()
request.getRequstURI()
request.getProtocol()
request.getRemoteAddr()
応答の処理には、response という変数を使う。
37
JSPを使ったパラメータの処理
<%=
request.getParameter("familyName") %>


getParameter というメソッドを使って、
familyName パラメータの値を取得する。
GET でも POST でも利用できる。
38