共通科目情報処理(講義)、体育専門学群対象、2002年02月01日 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/ipe/taiiku-kougi-2001/2002-02-01
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/ipe/
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html
http://www.ipe.tsukuba.ac.jp/~yshinjo/
この時使われる通信プロトコルをHTTP ( Hyper Text Transfer Protocol ) という。
WWW サーバには何種類もある。筑波大学教育用計算機システムで使っている WWWサーバのプログラムの名前は、Apache 。
クライアントは、URL のうちのホスト部分を抜きだし、これと標準の 80ポート番号(80)を使って、TCP/IP のコネクションを張る。http://www.domain/dir1/file1.html
クライアントは、HTTP で次のような要求を送る。
(GET /dir1/file1.html HTTP/1.0![]()
![]()
上の GET 要求に相当するファイルは、次のファイルになります。/usr/local/apache/share/htdocs/
/usr/local/apache/share/htdocs/dir1/file1.html
---------------------------------------------------------------------- HTTP/1.1 200 OK Date: Mon, 04 Jan 2002 12:53:07 GMT Server: Apache/1.3.3 Last-Modified: Sun, 31 May 2002 05:35:29 GMT Content-Length: 1234 Content-Type: text/html <HTML> <HEAD> <TITLE>Univ of Tsukuba</TITLE> </HEAD> <BODY> <H1>Welcome</H1> .... </BODY> </HTML> ----------------------------------------------------------------------
200
は、エラーがなく成功したという意味。
アクセスされた日付、データの日付、データの型と長さが現れる。
Content-Type:
が text/html
ならば、
HTML で書かれたページの意味。
インラインイメージなら、
なら image/gif
や image/jpeg
になる。
このような情報は、情報そのものではなくて、情報に関する情報という意味で メタ情報(メタデータ)という。
空行の後に、実際のデータが続く。
例:テキストしか受け付けられない。
GET /dir1/file1.html HTTP/1.0Accept: text/*
![]()
例:指定した時刻に作成した キャッシュ が無効な時にだけデータの転送を要求
GET /dir1/file1.html HTTP/1.0If-Modified-Since: Mon, 07 Jan 2002 12:53:07 GMT
![]()
192.168.10.20 - - [05/Jan/2002:01:08:11 +0900] "GET /dir1/file.html HTTP/1.0" 200 1622このように、ホストの IP アドレス、日付、要求行、ステータス、転送された バイト数などが記録される。
エラーが起きた時や起動・終了の情報は、 エラー・ログ(error log) に記録される。
エラー・ログの例:
[Tue Jan 5 00:47:26 2002] [notice] Apache/1.3.3 (Unix) configured -- resuming normal operations [Tue Jan 5 01:27:52 2002] [notice] httpd: caught SIGTERM, shutting down [Tue Jan 5 05:57:11 2002] [error] [client 127.0.0.1] File does not exist: /usr/local/apache/share/htdocs/printenv [Tue Jan 5 05:57:55 2002] [error] [client 127.0.0.1] Options ExecCGI is off in this directory: /usr/local/apache/share/htdocs/printenv.cgiトラブルが起きた時には、このログを見て原因を探る
Gateway とは、WWW で使われている HTTP というプロトコルへの入り口という 意味。 プログラムの実行結果は、普通は、HTML にすることが多いが、普通のテキス トであることもイメージであることもある。
図? CGIの仕組み
CGI の利用例
CGI になるファイル名のパタン
/cgi-bin/name /dir/name.cgi
筑波大学教育用計算機システムでは、主サーバ(www.ipe.tsukuba.ac.jp)では CGI は使えない。CGI を使うためには、 申請して副サーバ (www2.ipe.tsukuba.ac.jp)を使う。
<FORM ACTION="http://www.u-ust.ac.jp/cgi-bin/adduser" method="post"> <P> 姓: <INPUT type="text" name="lastname"> 名: <INPUT type="text" name="firstname"><BR> <INPUT type="radio" name="sex" value="Male"> 男 <BR> <INPUT type="radio" name="sex" value="Female"> 女 <BR> 電子メール: <INPUT type="text" name="email"><BR> <INPUT type="submit" value="send"> <INPUT type="reset"> </P> </FORM>表示例:
<FORM>
と
</FORM>
で括られた部分が1つのフォームになる。
<INPUT>
の部分が、ブラウザからサーバに送られるデー
タを表わす。
send
ボタンが押されると、ブラウザは、
HTTPの
POST メソッドを使って、サーバにデータを送る。
サーバは、それを受け取ると、指定されたプログラムを実行する。 実行されたプログラムは、 環境変数と標準入力 (ともに、プログラムにデータを与える方法の種類) から データを受け取ることができる。
環境変数
REQUEST_METHOD データを送るのに使われたメソッド。POST か GET。 GET は、普通のページを得るものと同じ方法で、長いデータは送れない。 SCRIPT_NAME プログラムの名前。 QUERY_STRING URLの指定で「?」以下に指定された文字列メソッドとして
POST
が使われた時、標準入力からは、
<FORM></FORM>
で指定されたパラメタを受け取ることが
でる。
このデータは、「&
」で区切られた
「フィールド名=値
」の並びになっている。
例:
lastname=姓&firstname=名&sex=Male&email=who@u-ust.ac.jp
環境変数 CONTENT_LENGTH
からは、データの長さが得られる。
メソッドとして、GET
が使われた時には、
環境変数 QUERY_STRING
に
「&
」で区切られた「フィール
ド名=値
」の並びが含まれている。
送られてくるパラメタの中に漢字など含まれていた場合、
URLで使えない文字
と同様に
「%hh
(2桁の16進数)」
という形になっている。
これを元にもどすには
cgiparse
というプログラムや
perl
の命令 hex() が使われる。
SSI が使えるシステムでは、
file.html
の変わりに
file.shtml
とすると、
SSI の機能が働くようになります。
例1: ファイルの内容の読込み
<!--#include file="filename"-->例2: プログラム
/bin/cal
の実行結果の埋め込み
<PRE> <!--#exec cmd="/bin/cal"--> </PRE>例3:ファイル
file.shtml
の更新時刻の表示
最終に変更されたのは、 <!--#config timefmt="%Y/%m/%d %H:%M:%S"--> <!--#flastmod file="file.shtml"--> です。
`#include'
や
`#exec'
で、大事なファイルが盗まれないように、細心の注意を払ながら利用する必要
がる。
筑波大学教育用計算機システムでは、SSI は使えないような設定になっている。
画面に何かを表示する機能があり、WWWブラウザ上で動く。 Javaアプレットを使うと、アニメーションを作ったり、 CGI を使わずにユーザとの対話できる。
CGI では、プログラムは、WWWサーバが走っているコンピュータで動くが、 Javaアプレットは、プログラムはブラウザの上で動く。
<APPLET></APPLET>
。
HTML記述:
<APPLET CODE="rctext.class" WIDTH="500" HEIGHT="50"> <PARAM NAME="message" VALUE="hello,world"> 与えたメッセージが動き回るJavaアプレット。 </APPLET>表示例:
CODE
属性で、Javaアプレットを保存している
ファイルのURL(ただし、同一ホスト内)、
WIDTH
属性で、幅、
HEIGHT
属性で、高さを指定する。
<PARAM>
タグを使えば、アプレットに
オプションを渡すことがでる。
<APPLET>
と
</APPLET>
の間には、
Java Applet に対応していないブラウザのためのテキストを書く。
Java言語については、 共通科目では別の講義がある。
アクセス制御(access control) ユーザ(アクセスの主体) が、ファイルやWWWページなどの資源をアクセスする時、どんな アクセスの仕方なら正しいということを定義して、それがきちんと守られてい ることをということを保証すること。
WWW ページのアクセス制御は、次のような情報がよく使われる。
アクセス制御は、基本的には、
WWWサーバの管理者の仕事。
WWWサーバ (httpd) の設定ファイル
(
/usr/local/etc/httpd/conf/httpd.conf
,
/usr/local/etc/httpd/conf/access.conf
)
に記述される。
個人のページについては、
.htaccess
というファイルを作れば、個人で変更できるようになっている場合がある。
.htaccess: ---------------------------------------------------------------------- order deny,allow deny from all allow from 130.158.0.0/16 192.50.17.0/24 ----------------------------------------------------------------------
例:パスワード・ファイル
/home1/yshinjo/etc/passwd-doc1
に登録されているユーザだけが、
.htaccess
があるディレクトリ以下にあるファイルをアクセスできる。
.htaccess: ---------------------------------------------------------------------- AuthType Basic AuthName restricted stuff AuthUserFile /home1/yshinjo/etc/passwd-doc1 require valid-user ----------------------------------------------------------------------このパスワード・ファイルは、 サーバ上で htpasswd というプログラムで作。
一番最初は、---------------------------------------------------------------------- % /usr/local/apache/bin/htpasswd -c /home1/yshinjo/etc/passwd-doc1 user1Adding password for user1. New password:user1のパスワードを打ち込む
Re-type new password:user1のパスワードを打ち込む
% /usr/local/apache/bin/htpasswd /home1/yshinjo/etc/passwd-doc1 user2
Adding user user2 New password:user2のパスワードを打ち込む
Re-type new password:user2のパスワードを打ち込む
%
----------------------------------------------------------------------
-c
オプション付で実行する。passwd
コマ
ンドと同様に、打ち込んだパスワードは、画面には表示されず、また、確
認のために2回打つ必要がある。
htpasswd コマンドの結果、次のようなファイルが作られる。
ユーザ名と暗号化されたパスワードから構成される。---------------------------------------------------------------------- user1:1fjr1tHIgoG7U user2:qXaeA9Zge7Yqc ----------------------------------------------------------------------
パスワードによるアクセス制御の例:
設定ファイル .htaccess
---------------------------------------------------------------------- AuthType Basic AuthName restricted stuff AuthUserFile /home1/yshinjo/etc/passwd-doc1 require valid-user ----------------------------------------------------------------------このアクセス制御が有効なファイルを GET したとする。
次のようなエラーが返る。GET /dir1/file1.html HTTP/1.1![]()
![]()
HTTP/1.1 401 Authorization Required WWW-Authenticate: Basic realm="restricted stuff" Content-Type: text/html401 Authorization Required ...
.htaccess
の AuthType
と AuthName
の内容が、HTTP の応答の WWW-Authenticate:
に現れる。
このペー ジをアクセスするには、クライアント(WWWブラウザ)は、 ウインドウを開いて ユーザにユーザ名とパスワードを要求する。 そして、次のような YHM_GET() 要求をもう一度送る。
GET /dir1/file1.html HTTP/1.1Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
![]()
![]()
Authorization:
には、ユーザが打ち込んだユーザ名とパスワードが
Base64 (64進数)で符合化されて含まれている。
これを受け取ったサーバは、
AuthUserFile
で指定されたファイルを開いて、ユーザ名とパスワー
ドパスワードを照合して、正しければアクセスを許する。
Base64 は、暗号ではないので、簡単に元にもどせる。このアクセス制御の方 法では、パスワードがそのままネットワークを流れてしまう。盗聴に弱い。
% exit![]()
% less /usr/local/WWW/htdocs/index.html![]()
http://www.ipe.tsukuba.ac.jp/
を開く。
/usr/local/apache/logs/access_log
というファイルにためられる。
次のようにして観察する。
htttp://www.ipe.tsukuba.ac.jp/ のページは、サーバ (icho) 上の
/usr/local/WWW/htdocs/ 以下にある。次のようにして観察する。
% exit![]()
% tail -f /usr/local/apache/logs/access_log![]()
http://www.ipe.tsukuba.ac.jp/
を開く。
% exit![]()
% telnet www.ipe.tsukuba.ac.jp 80![]()
(GET /index.html HTTP/1.0![]()
![]()
Windows 2000 のコマンドプロンプトの中で telnet コマンドを使う方法。
set local_echoset codeset Japanese EUC
![]()
open www.ipe.tsukuba.ac.jp 80![]()
(GET /index.html HTTP/1.0![]()
![]()