Studying HTTP

Help

Studying HTTP : Program

この頁では、Studying HTTPが開発したHTTPやWebに関するプログラムを公開しています。

Perl

Perlは、Larry Wall氏によって開発されたフリーのプログラミング言語で、2009年9月時点の最新バージョンは5.10.0であり、http://www.perl.com/から無料で入手できます。 Perlは、当初UNIXでのみ利用されていましたが、現在ではWindowsやMacintoshなどの様々なプラットフォームに移植されています。

Perlは、正規表現など、特にテキスト処理に優れているという理由から、Web上にある多くのCGIプログラムがPerlで記述されています。 特に、Web初期などはあまりにも多くのプログラムがPerlで記述されているので、しばしばCGIとPerlが混同されることがありますが、CGIとはシステムのことであり、Perlはその中で使用されるプログラム言語ということで、全く異なるものです。

H_HTTP2.pm

H_HTTP2.pmは、HTTP/1.1にできるだけ準拠したHTTPクライアントを作るためのPerlモジュールです。

H_HTTP2.pm, v 2.5.1 Update: 2008-04-15

H_HTTP2.pmは、以下の基本コンセプトのもとで開発しています。

RFC 2616に(できるだけ)準拠
HTTP通信を実現したいだけならば、LWPと呼ばれるモジュール群を始め、既に多くのモジュールが世界中に存在しています。 H_HTTP2.pmは、HTTP/1.1 を規定するRFC 2616にできるだけ従う設計をするというコンセプトで設計しています。
1つのファイルに全ての機能が盛り込む
CPANに登録されているPerlモジュールの中には、1つの機能を実現するために、他の非標準モジュールを参照している設計になっているものもあります。 このような場合、そのモジュールを使用するためには、他の非標準モジュールも全てインストールしなければならないため、手間がかかり、利用へのモチベーションが下がる懸念があります。 H_HTTP2.pmでは、導入するファイルは“H_HTTP2.pm”の一つだけであり、またバックグラウンドで使用するモジュールも Perl 5.8 における標準モジュールのみなので、導入が大変容易です。
柔軟な HTTP 通信の実現
H_HTTP2.pmは、単純なデータ取得というよりも、むしろ HTTP通信の流れを実感する事を念頭に設計しています。 そのため、例えば、使用できるメソッドも、一般的なGETPOSTなどに限定せずに、拡張性を持たせています。

H_MD5.pm

H_MD5は、Perl 5.8における標準モジュールであるDigest::MD5の代わりにMD5を計算するためのモジュールです。

H_MD5.pm,v 1.3 Update: 2008-04-15

なお、Digest::MD5がインストールされていない環境で、上記のH_HTTP2.pmを使用したい場合は、このモジュールを利用することができます。 その場合は、H_HTTP2.pm の use Digest::MD5; の行を use H_MD5; に書き換えてください。

env_with_cgi_pm.cgi

env_with_cgi_pm.cgiは、「CGI.pmを用いたCGIで使用される外部変数(環境変数)を表示するためのCGIスクリプト」です。

env_with_cgi_pm.cgi Update: 2009-09-29

Perlには、「モジュール」と呼ばれる、ある機能を持つプログラムを再利用可能な形式でまとめたプログラム形式があり、誰にでも簡単に作成できるため、既にたくさんの人によって、たくさんのモジュールが作られています。 特に、CGIについては“CGI.pm”という名前のPerl5標準モジュールが存在します。 この中には、CGIでのデータの受け渡しや、HTMLの生成を簡単に行えるような関数が標準で用意されています。 env_with_cgi_pm.cgiの使用例とデモコードは、[Studying HTTP] env_with_cgi_pm.cgiを参照ください。

JavaScript

JavaScriptは、Netscape Communications社とSun Microsystems社によって開発された、Webページの表示や使用性向上のためのスクリプト言語です。 実行環境は、そのほとんどがWebブラウザで、1995年にNetscape Navigator 2.0へ実装されたのが最初ですが、現在ではそれ以外の多くのブラウザにも実装されています。

JavaScriptは、歴史上の経緯から、各社の実装に微妙な違いがあり、ブラウザ間での完全な互換性はありませんでした。 そこで、ECMA(ヨーロッパ電子計算機工業会)によって標準化されることになりました。 これをECMAScriptと言い、2009年12月にECMA-262 5th Editionが公開されました。

(※) ただし、多くの製品ではECMAScriptに独自の拡張を施したスクリプト言語を実装し、それを“JavaScript”(Microsoft社は“JScript”、Adobe社は“ActionScript”)と呼んでおり、そのためECMAScriptをベースに言語が規定されているとはいえ、ブラウザ間の違いというものが無くなったわけではありません。

JavaScriptの大きな特徴として、HTML内に直接実装することで、CGIのような環境を用意することなく、HTMLを動的に変化させることができるという点があります。 当時の2大Webブラウザ会社であったNetscape Communications社とMicrosoft社は、そのようなHTMLをDynamic HTML(または略して“DHTML”)と呼んでいました。 最近では、XMLHttpRequestという、HTTP通信ができるJavaScriptのオブジェクトと、XMLを組み合わせて、動的なWebページを提供する技術が開発されました。 この技術はAjaxと呼ばれ、2005年にGoogleが公開したGoogle Mapsをはじめとして、世界中で広く利用されています。

Browser.js

Browser.jsは、JavaScriptエンジンを持つ有名ブラウザのnavigator.userAgent文字列を解析し、そのブラウザ名とバージョンをプロパティとして保持するJavaScriptのクラスです。

Browser.js, v0.3 Update: 2009-08-02

JavaScriptをWeb上で使用する場面としては、使用されているブラウザを判定するという場面が多いです。 これは、WebブラウザによってJavaScriptによって利用できる機能(あるいは機能の利用の仕方)に差があるために、各Webブラウザに適したコードを読み込ませなければ、異なるブラウザ間で同じような振る舞いを実現できないからです。 また、Webサイトがクライアント駆動型ネゴシエーションを実現させるために利用される場合もあります。

上記のような目的を達成するために、Browser.jsを使用することができます。 Browser.jsの使用例とデモコードはJudge Your Browser.を参照ください。

(※) 現在のBrowser.jsでは、ブラウザのメジャーバージョンしか取得できません(マイナーバージョンは取得できません)。 また、コンピュータのOS(Windows, Macintosh, Unix, ... ) を判定することはできません。

CookieManager.js

CookieManager.jsは、JavaScriptを用いてHTTP Cookiesを取得/発行するためのJavaScriptのクラスです。

CookieManager.js, v0.1 Update: 2009-09-28

CookieManager.jsは、JavaScriptでクッキーを取得/発行したりするために、document.cookieへのインタフェースを提供します。 CookieManager.jsの使用例とデモコードはCookie Test.を参照ください。 (デモで作成したクッキーは1分後に削除されるように設計されています)

(※) 現在のCookieManager.jsでは、トップレベルドメインに対する制限などはケアしていません(詳細はSet-Cookieヘッダの文法を参照) また、一つのCookieサイズの上限は4キロバイトという規定がありますが、それに対するケアをしておりません。

H_HttpReqObj.js

H_HttpReqObj.jsは、JavaScriptでHTTPリクエストオブジェクトを生成し、HTTP通信を実行するためのインタフェースを提供するモジュールです。

H_HttpReqObj.js, v0.1 Update: 2010-02-22

H_HttpReqObj.jsは、XMLHttpRequestオブジェクトが提供しているインタフェースを参考にして、さらに使用性向上のためのメソッド/プロパティも実装しました。 これにより、readyState == 4のようなマジックナンバーを操作する必要が無くなり、コードの可読性が向上します。

H_HttpReqObj.jsの使用例とデモコードはH_HttpReqObj Sampleを参照ください。 これは、ボタンを押下することにより、HTTPレスポンスが200(成功)と403(禁止)となるリソースへ、それぞれHTTPリクエストを実行し、そのレスポンスを表示するものです。

(※) H_HttpReqObj.jsは、XMLHttpRequestオブジェクトを使用しているため、これを実装していないInternet Explorer 6のような古いブラウザ上で動作させるためには追加改造が必要になります。 (当サイトでは、そのような改造方法についてのサポートは致しておりません)

Java

Javaとは、Sun Microsystems社が開発したプログラミング言語で、2010年1月時点の最新バージョンはVersion 6 Update 18(内部バージョンは1.6.0.18)です。 Javaでは、「Javaを実行するためだけの環境(JRE)」と「Javaの開発環境(JDK)」が別々に公開されており、それぞれhttp://www.java.com/http://java.sun.com/javase/から無料で入手することができます。

Javaは、元々「Greenプロジェクト」という家電機器用のプログラミング言語を開発するためのプロジェクトの中で開発されたOakというプログラミング言語に由来し、WindowsやMacintosh, Unix系などのコンピュータだけでなく、携帯電話や組み込み機器のような小型端末など、様々なプラットフォーム(動作環境)に対応しているという大きな特徴を持っており、 以下のような様々な形態で、広くWeb上で利用されています。

アプリケーション
従来のC/C++等の実行可能プログラムと同様の形式で、OS上で直接動かすことができるJavaプログラム。
Javaアプレット
Internet ExplorerやMozilla FirefoxなどのWebブラウザ上で動くように、HTMLによりWebブラウザ内に埋め込まれ、画像やAdobe Flashのように「インラインオブジェクト」として利用することができるJavaプログラム。 また、Javaアプレット内のメソッドからHTML上に記述されたJavaScriptのメソッドを呼び出したり、逆にJavaScriptのメソッドからアプレット内のJavaのメソッドを呼び出すことができる。
サーブレット
CGIのように、クライアントから来たリクエストを外部プログラムに渡したり、逆に外部プログラムが処理した結果をクライアントに返したりするような、Webサーバ上で動作するJavaプログラム。
JSP
静的なHTMLコンテンツ内に動的なデータを挿入するためのJavaプログラム。 同様の技術として、SSIがあるが、SSIでは名前や日付け等の簡単なデータしか挿入できないのに対して、JSPはフォームデータやデータベースへの接続を利用する本格的なプログラムを指定でき、自動的にサーブレットにコンパイルされて実行される。

(※) Javaの世界では、複数の動作環境に対応していることをクロスプラットフォームと言い、Sun Microsystems社ではこれを“Write Once, Run Anywhere(一度書けば、どこでも動く)”というフレーズで示しています。

net.studyinghttp.HttpClientTester

“net.studyinghttp.HttpClientTester”は、コマンドライン引数として与えられたURLGET, あるいはPOSTリクエストを行い、レスポンスに含まれるステータスコードとレスポンスボディを出力するプログラムです。

HttpClientTester.java Update: 2009-09-06

(※) 現在のnet.studyinghttp.HttpClientTesterでは、HTTP通信の極々基本的なことしかできませんが、このコードで使用しているHttpURLConnectionクラスを使用することによって拡張することができます。 たとえば、リクエストヘッダを設定したい場合は HttpURLConnection#setRequestProperty()メソッドを使用することができます。

net.studyinghttp.HttpStatusCodeFindlet

“net.studyinghttp.HttpStatusCodeFindlet”は、コンボボックスで選択したHTTPステータスコードについて、その説明句を検索するためのJavaアプレットです。 アプレットのデモとして、Select the HTTP Status Code.を参照ください。

HttpStatusCodeFindlet.java, v0.2 Update: 2009-11-23

(※) デモ版では、JAR圧縮(複数のJavaクラスファイルをまとめ、圧縮すること)したものを、デジタル署名ツールで署名したものを使用しています。 これらの操作を行うためのツール(jar, jarsigner)は、JDKに含まれています。

参照文献

Webリソース
68user's page
Perlメモ
書籍
C. Wong 著, 法林浩之 監修, 須田隆久 訳: Webクライアントプログラミング, オライリー・ジャパン, 1997.
中島靖: Perl5.6完全リファレンスブック―標準モジュール編, 情報管理, 2001.
ナウでヤングなレンタルサーバー!ロリポップ!

Copyright © 1999-2010 H-Hash, All Rights Reserved. Valid HTML 4.01 Strict 正当なCSSです!