Studying HTTP : Program

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

Perl

Perlのお薦め書籍

Perlは、Larry Wall氏によって開発されたフリーのプログラミング言語で、2011年3月時点の最新バージョンは“5.12.3”です。 Unix系やMac OS XなどのOSでは初期状態からインストールされておりますが、WindowsでもDownload Perl - www.perl.orgからフリーで入手することができます。

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のお薦め書籍

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”)と呼んでいます。 そのため、各ブラウザ上で動作する“JavaScript”は、同じECMAScriptという言語をベースに規定されているとはいえ、ブラウザ間の違いというものが無くなったわけではありません。

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

H_HttpReqObj.js

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

H_HttpReqObj.js, v0.2 Update: 2011-04-05

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

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

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

H_Browser.js

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

H_Browser.js, v0.4 Update: 2010-10-10

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

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

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

H_CookieManager.js

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

H_CookieManager.js, v0.1 Update: 2010-10-10

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

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

H_HttpDate.js

H_HttpDate.jsは、JavaScriptを用いて、HTTP日付と1970年1月1日からの経過秒数(※1)とを相互変換するためのJavaScriptのクラスです。

(※1) この時間は、「エポック秒」や「UNIX時間」などと呼ばれることがあります。

H_HttpDate.js, v0.5.1 Update: 2011-01-08

H_HttpDate.jsは、HTTP日付を取り扱うため、時刻はすべてGMT(グリニッジ標準時:※2)として扱います。 そのため、日本時間とは+9時間ずれが生じるのでご注意ください。 H_HttpDate.jsの使用例とデモコードは[Epoch Time <-> HTTP Date] Converterを参照ください。

(※2) 世界共通の標準時を表すフォーマットとしては、一般にUTC(協定世界時)というものが使われています。 本来、GMTUTCの意味合いはまったく異なるものですが、HTTPの仕様では正確に一致するとされています。

参照文献

Webリソース