システム・プログラム 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/syspro-2000/2000-05-08
/http.html
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/
http://www.is.tsukuba.ac.jp/~yas/index-j.html
表2に、HTTP で定義されている命令(メソッド)の例を示す。これらの命令 に対して、サーバは、表3に定義されたような応答を行う。
表3 HTTPで定義されている状態コードの例
-------------------------------------------------------------------- 状態コード 説明 -------------------------------------------------------------------- 200 OK(エラーなし) 301 要求されたデータが移動した 400 要求の形式にエラーがある。 404 要求されたデータが見つからない。 --------------------------------------------------------------------
たとえば、次のような URL を持つデータをアクセスすることを考える。
http://www.aaa.bbb.ac.jp:80/index.html
Mosaic などのクライアントは、まずホスト名 www.aaa.bbb.ac.jp とポート 番号 80 を使ってサーバとの間に TCP/IP の通信路を開設する。そして、クラ イアントは、開設した通信路を使って、サーバに次のような文字列を送る。
-------------------------------------------------------------------- GET /index.html HTTP/1.0←↓ ←↓ --------------------------------------------------------------------
ここで、"GET" が命令の種類、"/index.html" は、GETの引数の、要求してい るデータを表わす URL (ファイル名)、"HTTP/1.0" は、使っているプロトコル のバージョンである。次の空行は、命令のヘッダ部分の終りを意味するもので あり、必要である。「←」は、キャリッジ・リターンのコード(0x0d,C言語で' \r')、「↓」は、ニューラインのコード(0x0a,C言語で'\n')である。HTTP の ヘッダでは、行末に「←↓」を付けるように規定されている。(サーバを構築 する場合には、「←」か「↓」のどちらか1つしかこない場合でもきちんと動 作することが求められている。)
すると、サーバは、クライアントに対して次のようなデータを送り返す。(注 意:データは、常に更新されるので、必ずしもこの通りのデータが返されると は限らない。)
-------------------------------------------------------------------- HTTP/1.0 200 OK←↓ Date: Friday, 05-Jul-96 04:45:58 GMT←↓ Server: NCSA/1.3←↓ MIME-version: 1.0←↓ Content-type: text/html←↓ Last-modified: Wednesday, 14-Feb-96 04:08:21 GMT←↓ Content-length: 699←↓ ←↓
<title>Welcome to IISE WWW server</title> <IMG ALIGN=top SRC="/images/ISE.gif"> <P> <h1> 筑波大学電子・情報工学系へようこそ! </H1> <P> <A HREF="English/index.html">English Version here.</A> <hr> ここは筑波大学 電子・情報工学系のホームページです。 <H1> <UL> <LI><A HREF="http:IISE-general.html">電子・情報工学系の紹介</A> <P> <LI><A HREF="http:IISE-profs.html">学系教官</A> <P> <LI><A HREF="http:IISE-labs.html">学系内研究室</A> <P> <LI>大学院案内 <UL> <LI><A HREF="http:KOUGAKU/index-j.html">工学研究科</A> <LI><A HREF="http:RIKOUGAKU/index-j.html">理工学研究科</A> </UL> </UL> </H1> <hr> 本ページに関するお問い合わせは以下のアドレスにお願いします。 <address>www@is.tsukuba.ac.jp</address> --------------------------------------------------------------------
最初の行が、状態行(status line)と呼ばれる、要求が成功したか失敗した かわ表わしている行である。"200" とは、成功したという意味である(表3参 照)。2行目から最初の空行(「←↓」だけの行)までは、これから送るデー タのメタ情報である。具体的には、データの型や、サーバのバージョン、デー タが更新された日付と時刻、バイト数などが記録されている。
最初の空行の次が、データの本体である。この例では、HTMLで記述されたデー タが返されている。サーバは、データ転送が完了すると、TCP/IP の通信路を 切断する。
クライアントは、受け取ったデータを整形して利用者に対して表示する。たと えば、インライン・イメージとして指定されたデータを続けてサーバに要求し て展開したり、フォントを変えたりして表示する。
HTTPサーバ(httpd, WWWサーバ)からデータを得るプログラムを作りなさい。そ のプログラムの名前を、wcat とする。
wcat コマンドは、次のように3つの引数を与えて利用するものとする。
ここで、host は、ホスト名、port は、TCP/IP のポート番号、file は、得る べきファイル名である。これは、URL の文法で記述すると、次のようになる。-------------------------------------------------------------------- % ./wcat host port file--------------------------------------------------------------------
http://host:port/file
なお、wcat では、ポート番号の引数を省略しないものとする(省略可能なよ うに工夫してもよい)。HTTP プロトコルで用いられる標準のポート番号は、 80である。
プログラムをつくる時には、行末の扱い(CR-LF)に注意し ないさい。 余裕があれば、受け取ったデータを画面に表示する前に、Unix に合わせて行 末のキャリッジ・リターンのコードを削除するようにしなさい。