データベースシステム特論
HTTP
プロトコル
• Web
サーバと
Web
クライアント間のプロトコル
–
RFC2616
で
HTTP/1.1
が規定されている
• Web
サーバシステム
–
Apache
–
Tomcat (Servlet
コンテナ
)
•
ここでは,
XML
データベースの
Xindice
を用いるた
め,
Tomcat
を利用する.
HTTP
プロトコル
(
続き
)
•
リクエスト
(
クライアントからサーバへの要求
)
–
メソッド
(GET, POST
等
)
–
リクエストヘッダ
(Host
等
)
–
どのようなリクエストヘッダを送っているのかは,
Tomcat
の
Servlet Examples / Request Headers
のページで確認できる
•
レスポンス
(
サーバからクライアントへの応答
)
–
ステータスコード
(200, 404
等
)
Web
プログラミング
•
サーバサイド
–
CGI : Perl
等の言語.リクエスト毎に新しいプロ
セス.
–
Servlet : Java
言語.リクエスト毎に新しいスレ
ッド.
•
クライアントサイド
–
JavaScript, Java Applet, Flash
•
サーバ・クライアント連携
–
Ajax
HTTP
プロトコルの詳細
Tomcat
を用いた,
HTTP
プロトコルの詳細につい
ての実習
• GET
メソッド
• POST
メソッド
• HTTP/1.1
プロトコル
• Cookie
•
アクセス制限
•
ユーザ認証
GET
メソッド
Servlet Examples / Hello World
へのアクセス
$ telnet localhost 8080 GET /servlets-examples/servlet/HelloWorldExample HTTP/1.0 HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/html;charset=ISO-8859-1 Content-Length: 359
Date: Tue, 10 May 2005 15:17:23 GMT Connection: close <html> <head> <title>Hello World!</title> </head> <body bgcolor="white"> ... <h1>Hello World!</h1> </body> </html>
GET
メソッド
(
続き
)
JSP Examples / JSP 2.0 Examples / Functions
への
アクセス
• ?
以降の
foo=JSP+2.0
がサーバに渡すパラメータ部分
$ telnet localhost 8080 GET /jsp-examples/jsp2/el/functions.jsp?foo=JSP+2.0 HTTP/1.0 HTTP/1.1 200 OK Server: Apache-Coyote/1.1Set-Cookie: JSESSIONID=B80F0DBAA37E4A36A4BB043C3B0A69D8; Path=/jsp-examples Content-Type: text/html;charset=ISO-8859-1
Content-Length: 1803
Date: Tue, 10 May 2005 15:33:48 GMT Connection: close
.... <html>
<head>
<title>JSP 2.0 Expression Language - Functions</title> ...
POST
メソッド
Servlet Examples / Request Parameters
へのアクセス
• Content-Type, Content-Length
でサーバに渡すパラ
メータの情報を指定し,改行の後にパラメータを記述
$ telnet localhost 8080 POST /servlets-examples/servlet/RequestParamExample HTTP/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 24 firstname=ab&lastname=cd HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/html;charset=ISO-8859-1 Content-Length: 675Date: Tue, 10 May 2005 14:53:00 GMT Connection: close
<html> ... </html>
HTTP/1.1
プロトコル
$ telnet localhost 8080
GET /servlets-examples/servlet/HelloWorldExample HTTP/1.1
Host: localhost:8080 <-- アクセス先のサーバ名を指定 (HTTP/1.1 で必須)
Connection: close <-- 接続を維持せずにすぐに切断 (通常は Keep-Alive) HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=ISO-8859-1 Content-Length: 359
Date: Tue, 10 May 2005 15:17:23 GMT Connection: close <html> <head> <title>Hello World!</title> </head> <body bgcolor="white"> ... <h1>Hello World!</h1> </body> </html>
GET
メソッドのフォーム
<form method="GET"
action="http://localhost:8080/jsp-examples/jsp2/el/functions.jsp"> foo <input type="text" name="foo">
<input type="submit" value="Submit"> </form>
上のフォームを
Web
ブラウザで表示し,テキストフィー
ルドに
“JSP 2.0”
を入力して
Submit
ボタンを押すと以
下のようなリクエストが送られる
GET /jsp-examples/jsp2/el/functions.jsp?foo=JSP+2.0 HTTP/1.1 Host: localhost:8080 ...POST
メソッドのフォーム
<form method="POST"
action="http://localhost:8080/servlets-examples/servlet/RequestParamExample"> firstname <input type="text" name="firstname">
lastname <input type="text" name="lastname"> <input type="submit" value="Submit">
</form>
上のフォームを
Web
ブラウザで表示し,テキストフィー
ルドに
“ab”, “cd”
を入力して
Submit
ボタンを押すと以
下のようなリクエストが送られる
POST /servlets-examples/servlet/RequestParamExample HTTP/1.1 Host: localhost:8080 ... Content-Type: application/x-www-form-urlencoded Content-Length: 24 firstname=ab&lastname=cd ...Cookie
• Web
サーバの生成した情報を
Web
ブラウザに一時的
に保存させる仕組
(RFC2109, RFC2965
で規定
)
–
Cookie
毎に最大
4KB
のデータ,サーバ毎に最大
20
個の
Cookie
を保存できる
• Cookie
処理の流れ
(1)
ブラウザからサーバにアクセス要求
(2)
サーバは,レスポンスヘッダ中に
Set-Cookie
ヘッ
ダとして
Cookie
情報を送信
(3)
ブラウザは
Cookie
情報を保存
(
ブラウザの設定等
により保存しないことも可能
)
(4)
ブラウザから同一サーバ
(
あるいは同一ドメイン
)
へ
の再アクセス時に,保存した
Cookie
情報を
Cookie
ヘッダとしてリクエストヘッダに含めて送信
Cookie (
続き
)
• Set-Cookie
レスポンスヘッダ
–
NAME=VALUE : Cookie
名と値
–
expires : Cookie
の有効期限
(
指定がない場合は,そのセッション中,すなわち
ブラウザを閉じるまで
)
–
domain : Cookie
を利用するドメインの指定
–
path : Cookie
を利用するパスの指定
–
secure : https
利用時のみの利用かどうか
• Cookie
リクエストヘッダ
–
NAME=VALUE :
これまで保存してある
Cookie
情報
アクセス制限
• Apache
では,
httpd.conf
設定ファイルや各ディレク
トリ中の
.htaccess
ファイル等でホスト名や
IP
アドレ
スによるアクセス制限が可能
Order deny,allow Deny from all
Allow from 133.30 Allow from 150.84
• Tomcat
では,
server.xml
設定ファイルや各サーブレッ
トの
context.xml
ファイルでホスト名や
IP
アドレス
によるアクセス制限が可能
<Context path="/xindice" docBase="xindice" debug="0" reloadable="true"> <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="^127\.0\.0\.1$"/> </Context>