history | TOP |
2003/08/05:作成
reference | TOP |
C/C++300の技(以下テキストと呼称する)
overview | TOP |
無謀にもWEBサーバです。しかも第2話。第1話はWEBサーバを作ろう-001になっています。
P50:082 WEBサーバが送信するデータとは? | TOP |
前回作成したプログラム(多分どれでもよいのですがたとえば20030731client057.zip)は、クライアントモードでは
'GET /index.html HTTP/1.0'#13#10#13#10 ※「#13#10」は「CRLF」ですを指定したサーバに向けて送信し、応答を受信します。
www.ntt.com
HTTP/1.1 200 OK Server: Netscape-Enterprise/3.6 SP3 Date: Tue, 05 Aug 2003 13:08:11 GMT RequestStartSec: 1060088892 RequestStartUsec: 492613 Content-type: text/html Set-Cookie: AnalysisUserId=220.16.209.78:47841060088892; EXPIRES=Friday, 31-Dec-2010 23:59:59 GMT; PATH=/ Last-modified: Fri, 01 Aug 2003 18:00:14 GMT Content-length: 22772 Accept-ranges: bytes Connection: close <html>...
provider.bb.yahoo.co.jp
HTTP/1.1 200 OK Date: Tue, 05 Aug 2003 13:09:34 GMT Cache-Control: private Expires: Thu, 05 Jan 1995 22:00:00 GMT Pragma: no-cache Connection: close Content-Type: text/html;charset=euc-jp Set-Cookie: B=1uitkqcvivb4e&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp <html>...
www.eonet.ne.jp
HTTP/1.0 200 OK Server: Netscape-Enterprise/4.1 Date: Tue, 05 Aug 2003 13:10:02 GMT Content-type: text/html Last-modified: Mon, 21 Apr 2003 11:57:08 GMT Content-length: 3046 Accept-ranges: bytes Connection: close <html>...
homepage2.nifty.com
HTTP/1.1 404 Not found Server: Zeus/3.4 Date: Tue, 05 Aug 2003 13:10:37 GMT Connection: close Content-Type: text/html <HTML>...
www.borland.co.jp
HTTP/1.1 200 OK Date: Tue, 05 Aug 2003 13:10:30 GMT Server: Apache/1.3.9 (Unix) Connection: close Content-Type: text/html <HTML>...
forum.nifty.com
HTTP/1.1 200 OK Server: Netscape-Enterprise/4.1 Date: Tue, 05 Aug 2003 13:13:20 GMT Content-type: text/html Last-modified: Thu, 05 Sep 2002 04:53:54 GMT Content-length: 181 Accept-ranges: bytes Connection: close <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">...
www.asahi-net.or.jp
HTTP/1.1 302 Found Date: Tue, 05 Aug 2003 13:12:55 GMT Server: Apache/1.3.27 (Unix) Location: http://www.asahi-net.or.jp/ Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">...
halbow.cool.ne.jp
HTTP/1.1 200 OK Date: Tue, 05 Aug 2003 13:12:14 GMT Server: Apache/1.3.26 (Unix) Last-Modified: Tue, 27 Feb 2001 15:25:55 GMT ETag: "21810c-95-3a9bc703" Accept-Ranges: bytes Content-Length: 149 Connection: close Content-Type: text/html <html>...
www.wwlnk.com
HTTP/1.1 404 Not Found Date: Tue, 05 Aug 2003 13:12:09 GMT Server: Apache/1.3.26 (Unix) FrontPage/4.0.4.3 Last-Modified: Thu, 13 Jul 2000 03:28:21 GMT ETag: "98003-85-396d3755" Accept-Ranges: bytes Content-Length: 133 Connection: close Content-Type: text/html <head>...
hp.vector.co.jp
HTTP/1.1 302 Found Date: Tue, 05 Aug 2003 13:11:17 GMT Server: Apache/2.0.45 (Unix) Location: http://www.vector.co.jp/index.html Content-Length: 218 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">...
Apache率高いですね。 それはそれとしてテキストによるとWEBサーバの応答は、「応答コード」・「ヘッダ部」・「ボディ部」に分けられます。
たとえば、www.google.co.jpの応答は次のようなものですが(googleにはindex.htmlは無いんでしょうね)、このうちHTTP/1.0 302 Foundが応答コードで、Connection...206がヘッダ部、そして空行があって、通常のHTMLコードのボディ部に続きます
HTTP/1.0 302 Found Connection: Keep-Alive Date: Tue, 05 Aug 2003 13:18:36 GMT Set-Cookie: PREF=ID=7a9e046008b8f78a:CR=1:TM=1060089516:LM=1060089516:S=CTd_bSTo7MDOXHEw; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com Location: http://www.google.co.jp/cxfer?c=PREF%3D:TM%3D1060089516:S%3D9EnYyhjjp6q1dKty Content-Type: text/html Server: GWS/2.1 Content-length: 206 <HTML><HEAD><TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.co.jp/cxfer?c=PREF%3D:TM%3D1060089516:S%3D9EnYyhjjp6q1dKty">here</A>. </BODY></HTML>
つまり、これに類する応答を返せばそれっぽいということになります。
P50:084 実際のブラウザからのリクエストは? | TOP |
WEBサーバが返すべき内容がだいたいわかったら、次はクライアントがどのようなリクエストを投げるか?です。
最初の方のサーバプログラム(20030731server058.zip)で、実は表示したことがあるので、もう一度そのプログラムを利用してみます。
※スレッド化した最新版のプログラムでは邪魔くさくてそんなことしてないのです。
Donut:RAPT#47(IE:6.0.2800.1106;SP1;Q330994;Q813489;Q818529;)
GET / HTTP/1.1 Accept: */* Accept-Language: ja Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Host: localhost Connection: Keep-Alive
Internet Explorer:6.0.2800.1106;SP1;Q330994;Q813489;Q818529;
GET / HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */* Accept-Language: ja Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Host: localhost Connection: Keep-Alive
今手元にあるブラウザは、DonutとIEだけなので2つだけでテストです。 20030731server058を起動し待ち受けた状態で、ブラウザに
http://localhost/と入力した結果です。この1行目がリクエストラインと呼ばれるもので、ヘッダ部が後ろに続きます。 そして、この例では無いのですがボディ部が続く場合があります。
さて、リクエストラインですが、今の場合
GET / HTTP/1.1になっています。この行はさらに3つの部分に分けることができます。
1番目は、「GET」です。つまりファイルをくれと言っています。
2番目は、「/」です。
さっきのテストでは、URLに「http://localhost/」と指定しファイル名(たとえばindex.html)がを記述しなかったので「/」だけになっています。
通常WEBサーバは、これに「index.html」を自動で追加します(と聞いたことがあります)。
つまり、この2番目がほしいファイル名になります。
3番目は、何でしょうね。対応しているHTMLのバージョンでしょうね。
で、ヘッダ部は多分どうでもよいというかどうしようもないので保留しますが、気になるのはボディ部(この例には存在しない)です。 POSTメソッドを記述したページからの要求ではボディ部がつくようです。テストしてみましょう。
Donut:RAPT#47(IE:6.0.2800.1106;SP1;Q330994;Q813489;Q818529;)
DISPLAY
Name: | |
Address: | |
HTML
<html><body> <form method="POST" action="http://localhost/"> <div>Name:<input type="text" name="NAME" value="Beatles"></div> <div>Address:<input type="text" name="ADDR" value="England"></div> <input type="submit" value="行き"> <input type="reset" value="消し"> </form> </body></html>
REQUEST
POST / HTTP/1.1 Accept: */* Accept-Language: ja Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Host: localhost Content-Length: 23 Connection: Keep-Alive Cache-Control: no-cache NAME=Beatles&ADDR=England
確かに。
to be continued.. | TOP |
今回は無駄に引用しすぎてページが長く伸びてしまったのでココまでにします。
EOF | TOP |