12-7. WWWプログラミング
(1) HTTP のプロトコル
* HTTP( HyperText Transfer Protocol ) の仕組み
詳しくは HTTP の RFC ドキュメントをどうぞといいたいが、 実際ちょっと見たぐらいで
理解できるものでない。いわば仕様書なので文字ばかりである。HTTP 1.0 の RFC につい
ては日本語訳も出ている。HTTP 1.0 では通信するのに GET, POST, HEAD という3つのメ
ソッドを定義している。GET と POST は超基本なので説明記事はよく見かける。HTTP 1.1
は97年1月に出た RFC 2068 がもとになっていて、PUT とか DELETE というメソッドを
追加したことになっている。Apache はバ−ジョン 1.2 から HTTP 1.1 に対応し、これら
PUT, DELETE, TRACE をサポ−トしたとある。 Netscape Enterprise Server は 3.0 から
HTTP 1.1 条件付きで対応し、PUT のみサポ−トしている。
下に telnet でWWWアクセスしたところを示す。WWWブラウザがやっているのと同じ
ことをシュミレ−トしているわけである。cgi-bin プログラムにアクセスする場合の GET
と POST を示している。ただファイルをとってくるような場合も GET で、POST より簡単
に使える。プログラム名の後に ? で区切って、 WWWサ−バに渡す引き数を記入してい
るだけである。GET, HEAD, POST などのメソッドを発行すると、WWWサ−バから結果が
かえってくる。成功なら 200 である。他 300 がコンテンツ移動、400 がクライアントの
エラ−、500 がサ−バのエラ−という具合である。実際はもっと細分化されていて403 が
Forbiddn というように種々ある。
% telnet localhost 80
GET /cgi-bin/test.cgi?name=v1&name2=v2 HTTP/1.0 << リタ−ン。
<< リタ−ン。
% telnet localhost 80
POST /cgi-bin/test.cgi HTTP/1.0
Content-Length:16 << リタ−ン。
<< リタ−ン。ここ1個空行を開けること、ポイントです。
name=v1&name2=v2 << リタ−ン。ここに送りたい内容を記述する。
[ URL と URI ]
両者だいぶ混乱しているようである。URL が http://www.tcp-ip.or.jp/~ikken/int.html
なら URI は /~ikken/int.html と解釈していいかと思う。 URI はWWWサ−バ上のリソ
−スを特定する。下記は PHP3 のパラメ−タで URI を出してみたところである。
URL : Uniform Resource Locator
URI : Universal Resource Identifier
/usr/local/apache/htdocs/put.php3 これを telnet で "GET /put.php3 HTTP/1.0" と
--------------------------------- アクセスすると、
|
|echo "$DOCUMENT_ROOT\n"; /usr/local/apache/htdocs
|echo "$REQUEST_URI\n"; /put.php3
|// copy("kero.doc","katou.doc");
|?> と出て来る。
* HTTP 1.1 の場合の注意
$ telnet indy2 8080
GET / HTTP/1.1 << リタ−ン。デフォルトで index.html をゲットしにいく。
HOST: indy2 << リタ−ン。またはIPアドレスを入れる。ここも入れること。
<< リタ−ン。
HTTP/1.1 200 OK
Date: Wed, 17 May 2000 07:39:26 GMT
Server: Apache/1.3.9 (Unix)
Last-Modified: Fri, 12 May 2000 07:24:23 GMT
ETag: "2aaa3-8b8-391bb1a7"
Accept-Ranges: bytes
Content-Length: 2232 << ファイルのバイト数がでている。
Content-Type: text/html
|
しばらくして、5秒ぐらいでコネクションが切れる。
Connection closed by foreign host.
* PUT と DELETE について
HTTP でWWWサ−バにあるファイルのリストをとる。プロテクションを変更する。 消去
する。ファイル名を変更する。ファイルをアップロ−ドする。NFS の代わりに HTTP でや
れないものだろうか。HTTP 1.1 はサ−バにコンテンツを送る PUT、 それにファイル消去
の DELETE をサポ−トしているとある。それなら telnet で、 とりあえず Apache 1.3.9
にアクセスして "DELETE /test.html HTTP/1.1" とかやったら消えるはずだ。それが消え
ない。DELETE 自体認識してないようだ。それなら PUT はどうだ。Netscape Composer か
ら HTML ファイルをアップロ−ドしてみる。これもできない。一体どうなっているのか?。
1) mode_put という Apache のモジュ−ルが PUT と DELETE をサポ−トする。デフォ
ルトでは Apache には入ってない。CERN にも同様 PUT プログラムがある。
2) POST メソッドでファイルを送り込む。PHP3 を使った例がある。そりゃ POST を使
えば標準入力から送り込める。今は PUT と言うメソッドがどうか知りたいのだ。
3) httpd.conf に Script PUT /cgi-bin/put.exe というように追加する。よく分から
なかった。意味がないのではないかと思う。
いろいろ検討の結果、mode_put の方法でファイルのアップロ−ドと消去ができた。 これ
だけでは NFS の代わりにはならない。プロテクションやファイル名の変更は cgi-bin 経
由ということになるか。あるいは PHP3 にはそのような関数もあるから、それでもいいか
も知れない。SSI( Server Side Include ) を使う手もある。
[ POST メソッドを使う ]
PHP3 のマニュアルの Chapter 15.Handling file uploads、"POST method uploads" に一
応やり方が書いてある。「UNIX MAGAZINE」'97/11、P.104 にも記事があった。 まとめる
とテキストでもバイナリでもいける、ファイルは相手先のテンポラリ・ディレクトリにで
きるということだ。こんなような記述。
ppp.php3
-------------------------------------------------------------------
|
|
|
|Send this file:
|
|
|?>
[ Script 宣言ではどうか ]
httpd.conf で "Script PUT /put.php3" とするところを PUT2 としてみた。Apache を起
動しようとすると、httpd.conf の構文がおかしい、Script 用の知らないメソッドあると
エラ−が出た。一応 PUT と DELETE というメソッドが、Apache 1.3.9 の HTTP 1.1 には
有るみたいだ。しかし、この Script の記述は変だ。何もこんな風にするならただの GET
で cgi-bin を使ってもいっしょじゃないか。何か意味があるのかな。
/usr/local/apache/cgi-bin/dell << 中身は何でも構わないということだよね。
------------------------------
|#!/bin/sh
|echo Content-type: text/plain
|echo
|echo $PATH_INFO
/usr/local/apache/conf/httpd.conf
---------------------------------------
|
|Script DELETE /cgi-bin/dell << PUT も入れたければ同様記述する。
| |
% telnet localhost 8080
DELETE /kero.doc HTTP/1.1 << HTTP 1.0 と書いてもOKだった。WWWサ−バか
host: indy2 らの応答は同じく HTTP/1.1 200 OK だった。
HTTP/1.1 200 OK
|
(2) HTTP 経由ファイルのアップロ−ド
* Apache に mod_put モジュ−ルを追加する
Apache の標準モジュ−ルの中には、この mod_put モジュ−ルは入ってない。次のとこに
行って mod_put.tar.gz を取ってくる。展開するとカレントディレクトリに mod_put-1.3
というディレクトリができて、mod_put.c と mod_put.html というファイルができる。先
ずmod_put.html を見てみる。大きなセキュリティホ−ルができる可能性があるので、 注
意されたしといった英文が読める。 この mod_put.c モジュ−ルは Apache 1.2.x、1.3.x
に対応していることも読める。Apache は5章で DSO 対応、それに PHP3 + PostgreSQL +
XML を加えた。更に mod_put.c モジュ−ルを追加することにする。
http://hpwww.ec-lyon.fr/~vincent/apache/mod_put.html
% cd /usr/local/source/apache_1.3.9
% ./configure --enable-module=so --enable-module=proxy --add-module=mod_put.c
% make
% make install
ちゃんと追加されたか /usr/local/apache/bin/httpd -l で、mod_put.c が最後に加わっ
ているか確認しておく。 make install の際 /usr/local/apache/conf に httpd.conf が
あると上書きされない。しかしあらたにできる httpd.conf は特に変わりがないので、前
のを使ってもよさそうである。
/usr/local/apache/conf/httpd.conf PHP3 + PostgreSQL + XML で
------------------------------------------ 追加したようなところも示す。
| |
|LoadFile /usr/local/pgsql/lib/libpq.so
|LoadModule php3_module libexec/libphp3.so
|Port 8080
|User katou
|Group user
| |
|
| Options Indexes FollowSymLinks << Indexes は index.html など頭のファイルが
| AllowOverride None ない場合、 そのディレクトリを一覧表示する。
| Order allow,deny
| Allow from all
| EnablePut On << この2つ追加
| EnableDelete On << すること。
|
| AuthType Basic \
| AuthName "Web publishing" |こんなようにしてアクセスできるユ−ザを制限す
| AuthUserFile /www/etc/passwd |べしと mod_put.html には書いてあった。
| AuthGroupFile /www/etc/group |
| |アップロ−ドしたファイルのモ−ドは、umask で
| require valid-user |指定できるようだ。デフォルトは 007 である。
| /
|
| |
|AddType application/x-httpd-php3 .php3
|AddType application/x-httpd-php3-source .phps
|AddType application/x-tar .tgz
|AddType text/html .shtml << この2つ SSI 用のファイル拡張子。こんなん
|AddHandler server-parsed .shtml << を実行する。 | -----------------
| -------------------------------- | | ファイルの | 送信 |
|開く:| http://192.9.10.1:443/dav |▼| | アイコンを | 切り取り |
| -------------------------------- | 右クリック | コピ− |
| 〆 Webフォルダとして開く | した画面 | ショ−トカット|
| | | 削除 |
| [OK] [キャンセル] [参照] | | 名前の変更 |
----------------------------------------- | プロパティ |
-----------------
Windows の画面に出ているアイコンの "マイコンピュ−タ" に "Web フォルダ" ができて
いた。"ネットワ−クコンピュ−タ" にも "192.9.10.1 上の dav" とできていた。これら
クリックすると、上の IE ででてきた画面と同じだった。 もう一つ "マイコンピュ−タ"
画面を出し、ファイルを dav にドラッグしたらコピ−もできた。しかし、WebDAV ディレ
クトリの中でファイルのコピ−/貼り付けはできなかった。
* 参考
「UNIX MAGAZINE」 2002/03, P.128〜133, "UNIX便利帖 WebDAV", Apache ヘの組込み。
> 2002/04, P.103〜108, "WebDAVクライアント", cadaver と DAV Explorer 使い方など。
「Software Design」 2001/12, P.103〜123, "WebDAV を使いこなす"。
> http://www.atmarkit.co.jp/ の記事とほぼ同じ。筆者も同じ。
http://webdav.todo.gr.jp/ WebDAV Resources JP
> http://www.webdav.org/ の日本の公式サイトというべきところ。
「NETWORK MAGAZINE」2003/11, P.180〜183, Microsoft のフリ−メ−ルサ−ビス Hotmail
が、Outlook や Outlook Express で送受信できるのは WebDAV と XML を使っているから。