初級CGIクラックガイド(4)
IE等を使ってブラウジングを行う時・Irvine等を使ってhttpダウンロードを行う時・・・に裏で行われている「リクエスト」。telnet等を使えばマニュアルで行うことができる「リクエスト」。
クライアント(=閲覧者)側から見て、「リクエスト」の一般形は以下です。
「リクエストコマンド(メソッド)」は一般的に「GET」「POST」の二種類。
「リクエスト対象」は「/index.html」だったり「/himitsu_hoshi.jpg」だったり「/bbs.cgi」だったり「/bbs.cgi?myname=tokix&content=hello」だったり。
「HTTPのバージョン」は「HTTP/1.0」とか「HTTP/1.1」とか。
「標準入力」は「超初級CGIクラックガイド」で「裏で送信されるデータ」と誤魔化した箇所です。IE等ブラウザを使ってmethod=postなformからCGIを実行した場合、「送信するデータ」はここに記載されます。
参考: 超初級CGIクラックガイド(5)
例を三つほど挙げておきます。
Referer: http://www.tokix.net/
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: www.tokix.net
Connection: Keep-Alive
Referer: http://www.tokix.net/
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: www.tokix.net
Connection: Keep-Alive
Referer: http://www.tokix.net/
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: www.tokix.net
Connection: Keep-Alive
myname=tokix&content=hello
上記三者を「同じモノ」として捉えることができたでしょうか?上記三者の違いというのは「リクエスト(=入力)内容の差」に過ぎない、と。
ここから本題に移ります。上記のようなリクエストの「形式」というのは、どこまで閲覧者の制御下にあるのか。
「これが『リクエストの例』ですよ」と書くと、「あぁそうか、この形式通りにリクエストしなくちゃいけないのか」と思う人が多いと思うのですよ。それは違います。上記のように「リクエスト内容」は基本的に全て閲覧者の制御下にあります。
「環境変数」に関しても同じです。よく「環境変数には***と***と***があり、こうした情報がサーバーに伝わるのです」という論調な解説を見ることがあるでしょう。アレはある意味では正しいが、ある意味では間違っている。
クライアント(=閲覧者)側から見て、「リクエスト」の一般形は以下です。
リクエストコマンド(メソッド) リクエスト対象 HTTPのバージョン
環境変数群
(改行)
標準入力
環境変数群
(改行)
標準入力
「リクエスト対象」は「/index.html」だったり「/himitsu_hoshi.jpg」だったり「/bbs.cgi」だったり「/bbs.cgi?myname=tokix&content=hello」だったり。
「HTTPのバージョン」は「HTTP/1.0」とか「HTTP/1.1」とか。
「標準入力」は「超初級CGIクラックガイド」で「裏で送信されるデータ」と誤魔化した箇所です。IE等ブラウザを使ってmethod=postなformからCGIを実行した場合、「送信するデータ」はここに記載されます。
参考: 超初級CGIクラックガイド(5)
例を三つほど挙げておきます。
□普通のhtmlページをハイパーリンクで開く場合の例
GET /about.html HTTP/1.1Referer: http://www.tokix.net/
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: www.tokix.net
Connection: Keep-Alive
□CGIを(GETメソッドにより)環境変数query_stringつきで実行する場合の例
GET /bbs.cgi?myname=tokix&content=hello HTTP/1.1Referer: http://www.tokix.net/
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: www.tokix.net
Connection: Keep-Alive
□CGIを(POSTメソッドにより)標準入力つきで実行する場合の例
POST /bbs.cgi HTTP/1.1Referer: http://www.tokix.net/
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: www.tokix.net
Connection: Keep-Alive
myname=tokix&content=hello
ここから本題に移ります。上記のようなリクエストの「形式」というのは、どこまで閲覧者の制御下にあるのか。
- リクエストコマンド
閲覧者の制御下にありますが、「KURE」とかにしてもサーバーが解釈してくれません。リクエストコマンドはRFCという世界統一規格で決まってます。
参考: Studying HTTP内「リクエスト」 - リクエスト対象
完全に閲覧者の制御下にあります。例えば「/YouAreFat」とかリクエストしたらサーバー内に「『/YouAreFat』とリクエストされたけどどうすりゃいいのか分からなかったよ」という意味のエラーログが残るでしょうね。また、「?」以降はCGIから環境変数query_stringとして参照されます。
参考: 超初級CGIクラックガイド(3) - HTTPバージョン
閲覧者の制御下にありますが、「sya-senyou」とかにしてもサーバーが解釈してくれません。リクエストコマンドと同じく、RFCという世界統一規格があります。 - 環境変数群
完全に閲覧者の制御下にあります。「完全に」です。次回書きます。 - 標準入力
完全に閲覧者の制御下にあります。
「これが『リクエストの例』ですよ」と書くと、「あぁそうか、この形式通りにリクエストしなくちゃいけないのか」と思う人が多いと思うのですよ。それは違います。上記のように「リクエスト内容」は基本的に全て閲覧者の制御下にあります。
「環境変数」に関しても同じです。よく「環境変数には***と***と***があり、こうした情報がサーバーに伝わるのです」という論調な解説を見ることがあるでしょう。アレはある意味では正しいが、ある意味では間違っている。

TrackBack
この記事へのトラックバック