トップページに戻る

Category

AllArchives

Checker

Credit

初級CGIクラックガイド(3)

「CGIプログラム」を「関数」・・・「『入力』から『出力』を生成する関数」・・・と捉えるならば、重要なのは「何が『自分の制御下にある入力』なのか」というコトです。

「超初級CGIクラックガイド」では、こんな書き方をしました。
CGIとは一言で言えば「状況に応じカスタマイズされたhtmlファイルを閲覧者に引き渡すための手段」です。
CGIに「閲覧者の意志」を伝えるための方法はformです。
ではその「閲覧者の意志」はどのように送信されるのか。
二種類あるんですよ、送信方法には。
CGIに対して「閲覧者の意志」を送信することもできるし送信しないこともできる。送信するならば、その方法は「get」「post」の二種類。

こういう考え方をやめましょう。もっと一般化しましょう。


「http」というプロトコルは、基本的に「サーバーにリクエストを行い送られてくるデータを受け取る」という仕組みです。前回まで書いてきた「閲覧者の制御下にある入力」というものの実体は、この「リクエスト」に他ならない。
参考: アダルトサイトで学ぶHTTP基礎
HTTPというプロトコルにおける「リクエスト」について。
我々はよく「http://www.tokix.net/about.htmlを開く」というような言い方をします。この「http://www.tokix.net/about.html」なる「URL」というものは
  • httpというスキーム(※)で
  • www.tokix.netに対し
  • /about.htmlをリクエストする
という意味です。
※参考
Wikipedia内「URL」
「スキーム?」と思った人はとりあえず「httpとはhttpというプロトコルのためのスキーム」という禅問答のような説明で分かった気になってくれれば(この連載的には)それでいいんですが興味があれば適当に調べてみて下さい。
しかし、実のところ「/about.html」をリクエストした結果渡されたデータが本当にサーバー上の「/about.html」なのかは分からない。
httpというスキームでwww.tokix.netに対して/about.htmlなるリクエストを送った結果渡されたデータ
それが、閲覧者にとっての「http://www.tokix.net/about.html」です。
例えば。「http://www.tokix.net/about.html」は「/about.htmlの内容に/header.htmlと/footer.htmlの内容を埋め込んだデータ」かもしれない。SSIを使えばそういうことだって出来ます。
参考: とほほのSSI入門
「『〜.html』で終わるURLを開いた場合はサーバー内の1htmlファイルがそのまま表示されるんだ」というのは幻想です。「httpというプロトコルでwww.tokix.netに対して/about.htmlなるリクエストを送った結果渡されたデータ」は「www.tokix.netサーバー内の/about.htmlそのもの」かもしれないし違うかもしれない(※)。

「上のSSIの話はよく分からないけど無料スペースでサイト運営したことはあるよ」という方には以下の説明を。
「無料スペースにhtmlファイルをアップしてブラウザで開いたらバナー広告付きで表示された」とします。この時、そのhtmlファイルには「バナー広告を表示する」というタグが埋め込まれています。しかしFTPで接続しそのhtmlファイルをダウンロードした場合「バナー広告を表示する」というタグは見えない。
これは、サーバーが例えば「httpで『/tokix/index.html』をリクエストされた場合『/tokix/index.html』に『/adv.html』を埋め込んだデータを渡す」という設定になっているからです。
「『〜.html』で終わるURLを開いた場合はサーバー内の一htmlファイルがそのまま表示されるんだ」というのは幻想だ、ということの一例として。
・・・と、いうような「ブラウジングの仕組み」を書いた上で次の話に。
CGIとは一言で言えば「状況に応じカスタマイズされたhtmlファイルを閲覧者に引き渡すための手段」です。
「CGI」というモノの特徴は、この「状況に応じ」という部分です。CGIは状況(=「入力」)に応じてカスタマイズされたデータ(=「出力」)を閲覧者に引き渡す。
httpというスキームでwww.tokix.netに対して/bbs.cgiなるリクエストを送った結果渡されたデータ
それが、閲覧者にとっての「http://www.tokix.net/bbs.cgi」です。この「渡されたデータ」は状況によって変化する。CGIは状況に応じた処理を行う。だからこそ、そこには「バグが存在するかもしれない」という期待がある。「『想定されていない状況下』では『想定されていない処理』が行われるのではないか」という期待。

「ネットサーフィン」において、CGIを実行するパターンというのは四パターンだと思います。
  1. http://www.tokix.net/bbs/bbs.cgiのようなURLを「アドレス」欄に打って「移動」(orハイパーリンクで移動)
  2. http://www.tokix.net/bbs/bbs.cgi?mode=resのような「?」つきの(つまり環境変数query_stringつきの)URLを「アドレス」欄に打って「移動」(orハイパーリンクで移動)
  3. method=getのformからCGIを実行
  4. method=postのformからCGIを実行
「超初級CGIクラックガイド」では以下のような書き方をしました。
  • 1からの(CGIに「閲覧者の意志」を伝えるための)発展形が2〜4
  • 2と3は同じ(どちらもquery_stringで「閲覧者の意志」を伝えている)
もう一歩、進みましょう。1〜4は、全て「サーバーに対してリクエストを送っている」という点で同じである。methodの違い等は「『入力』の内容の差」。つまり「リクエスト内容の差」であって「リクエスト方法の差」ではない。

SeeAlso

SameSubCategory

Footprint

Navigation

TrackBack

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

Comment

PostForm

情報を登録  
コメントは本文以外省略可能で、当方の承認後掲載されます