プログラムテクニックメモ(2001/07/18) 
 

HTTPとは

HyperText Transfer Protocol の略ですが、よく雑誌で「HTTPプロトコル」と書いてあるのは、おかしいですよね。Protocol = プロトコル と、2回も続けて言う訳ですから。それはさておき、このHTTPを使うとどの様な事ができるというと、このページを表示している様に Web ページを表示できる訳です。

仕組みは簡単で、クライアントから「http://www.sea-bird.org」のリクエストをすると「www.sea-bird.org」に対するグローバルIPを取得し、そのグローバルIPに対しポート80(HTTP)にアクセスします。サーバは HTTP ポートにアクセスされた要求に対し index.html のファイル内容を、同じ HTTP ポートを通じてクライアントに返します。クライアントは index.html の内容をサーバから全て受け取ると、その内容(HTML)を解析し画面表示します(下記の図を参照してね)。

この面倒な手順をクライアント・サーバ共に決まった手順(プロトコル)で毎回行っているのです。

HTTPポートに対してのアクセス方法

HTTPポート(80)に対するアクセスは Telnet 等のターミナルソフトによって簡単にアクセスすることができます。接続方法は、下記の様にアクセスすべきサーバのポート 80 と指定し、接続したら 「GET / HTTP/1.0\n\n」と打ってください。そうすると接続したサーバから index.html の内容が帰ってきます。

% telnet www.sea-bird.org 80
Trying xxx.xxx.xxx.xxx ...
Connected to xxx.xxx.xxx.xxx.
Escape character is '^]'.
GET / HTTP/1.0

HTTP/1.1 200 OK
Date: Wed, 18 Jul 2001 06:56:05 GMT
Server: Apache/1.3.20
Last-Modified: Thu, 05 Jul 2001 05:23:16 GMT
ETag: "6fdca140-143-3b43f9c4"
Accept-Ranges: bytes
Content-Length: 323
Connection: close
Content-Type: text/html

<html>

<head>
<meta http-equiv="refresh" content="10">
<title>?V&#8218;&micro;&#8218;&cent;&#402;y?[&#402;W 2</title>

</body>

</html>
Connection closed by foreign host.

GET/POSTメソッドによるパラメタ渡し

フォーム間でデータを引渡す場合、GET/POST メソッドを使用することができます。GET は、URLの後ろに渡したいパラメタを書く方法で簡単ですが渡したいパラメタの長さ制限があります。POST は、GET の様にパラメタの長さ制約はありませんが、渡すデータが非可視されてしまうのでプログラムのバグを追求する場合、判りにくいという点があります。

GET メソッドを使用した場合、URLの後ろに渡したいパラメタを書くと 'QUERY_STRING' 環境変数に設定されます。上記でも説明しましたが、渡したいパラメタが目で見えてしまうので、悪意を持った人はその渡されるパラメタを変えてみたり、データの法則性を見出しシステム的に穴のある個所を攻撃したりされてしまう可能性があります。

POST メソッドは、GET メソッドの環境変数に設定される方法とは違い、標準入力(stdio)に対しパラメタを渡すので、渡すべきパラメタの長さに制限がありません。

GET/POSTメソッドによるアクセス

GET メソッドのアクセス方法を以下に示します。赤/ピンク文字部分が実際入力する個所です。(ピンク文字部分は、パラメタです)

% telnet www.sea-bird.org 80
Trying xxx.xxx.xxx.xxx ...
Connected to xxx.xxx.xxx.xxx.
Escape character is '^]'.
GET /cgi-bin/hoge.cgi?name1=value1&name2=value2 HTTP/1.0\n\n

POST メソッドのアクセス方法を以下に示します。赤/ピンク文字部分が実際入力する個所です。(ピンク文字部分は、パラメタです)

% telnet www.sea-bird.org 80
Trying xxx.xxx.xxx.xxx ...
Connected to xxx.xxx.xxx.xxx.
Escape character is '^]'.
POST /cgi-bin/hoge.cgi HTTP/1.0\n\n
Content-type: application/x-www-form-urlencoded
Content-length: xx

name1=value1&name2=value2

←topへ