
この頁では、Studying HTTPが開発したHTTPやWebに関するプログラムを公開しています。
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は、HTTP/1.1にできるだけ準拠したHTTPクライアントを作るためのPerlモジュールです。
H_HTTP2.pmは、以下の基本コンセプトのもとで開発しています。
H_MD5は、Perl 5.8における標準モジュールであるDigest::MD5の代わりにMD5を計算するためのモジュールです。
なお、Digest::MD5がインストールされていない環境で、上記のH_HTTP2.pmを使用したい場合は、このモジュールを利用することができます。
その場合は、H_HTTP2.pm の use Digest::MD5; の行を use H_MD5; に書き換えてください。
env_with_cgi_pm.cgiは、「CGI.pmを用いたCGIで使用される外部変数(環境変数)を表示するためのCGIスクリプト」です。
Perlには、「モジュール」と呼ばれる、ある機能を持つプログラムを再利用可能な形式でまとめたプログラム形式があり、誰にでも簡単に作成できるため、既にたくさんの人によって、たくさんのモジュールが作られています。 特に、CGIについては“CGI.pm”という名前のPerl5標準モジュールが存在します。 この中には、CGIでのデータの受け渡しや、HTMLの生成を簡単に行えるような関数が標準で用意されています。 env_with_cgi_pm.cgiの使用例とデモコードは、[Studying HTTP] env_with_cgi_pm.cgiを参照ください。
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は、JavaScriptエンジンを持つ有名ブラウザのnavigator.userAgent文字列を解析し、そのブラウザ名とバージョンをプロパティとして保持するJavaScriptのクラスです。
JavaScriptをWeb上で使用する場面としては、使用されているブラウザを判定するという場面が多いです。 これは、WebブラウザによってJavaScriptによって利用できる機能(あるいは機能の利用の仕方)に差があるために、各Webブラウザに適したコードを読み込ませなければ、異なるブラウザ間で同じような振る舞いを実現できないからです。 また、Webサイトがクライアント駆動型ネゴシエーションを実現させるために利用される場合もあります。
上記のような目的を達成するために、Browser.jsを使用することができます。 Browser.jsの使用例とデモコードはJudge Your Browser.を参照ください。
(※) 現在のBrowser.jsでは、ブラウザのメジャーバージョンしか取得できません(マイナーバージョンは取得できません)。 また、コンピュータのOS(Windows, Macintosh, Unix, ... ) を判定することはできません。
CookieManager.jsは、JavaScriptを用いてHTTP Cookiesを取得/発行するためのJavaScriptのクラスです。
CookieManager.jsは、JavaScriptでクッキーを取得/発行したりするために、document.cookieへのインタフェースを提供します。
CookieManager.jsの使用例とデモコードはCookie Test.を参照ください。
(デモで作成したクッキーは1分後に削除されるように設計されています)
(※) 現在のCookieManager.jsでは、トップレベルドメインに対する制限などはケアしていません(詳細はSet-Cookieヘッダの文法を参照) また、一つのCookieサイズの上限は4キロバイトという規定がありますが、それに対するケアをしておりません。
H_HttpReqObj.jsは、JavaScriptでHTTPリクエストオブジェクトを生成し、HTTP通信を実行するためのインタフェースを提供するモジュールです。
H_HttpReqObj.jsは、XMLHttpRequestオブジェクトが提供しているインタフェースを参考にして、さらに使用性向上のためのメソッド/プロパティも実装しました。
これにより、readyState == 4のようなマジックナンバーを操作する必要が無くなり、コードの可読性が向上します。
H_HttpReqObj.jsの使用例とデモコードはH_HttpReqObj Sampleを参照ください。 これは、ボタンを押下することにより、HTTPレスポンスが200(成功)と403(禁止)となるリソースへ、それぞれHTTPリクエストを実行し、そのレスポンスを表示するものです。
(※) H_HttpReqObj.jsは、XMLHttpRequestオブジェクトを使用しているため、これを実装していないInternet Explorer 6のような古いブラウザ上で動作させるためには追加改造が必要になります。 (当サイトでは、そのような改造方法についてのサポートは致しておりません)
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上で利用されています。
(※) Javaの世界では、複数の動作環境に対応していることをクロスプラットフォームと言い、Sun Microsystems社ではこれを“Write Once, Run Anywhere(一度書けば、どこでも動く)”というフレーズで示しています。
“net.studyinghttp.HttpClientTester”は、コマンドライン引数として与えられたURLへGET, あるいはPOSTリクエストを行い、レスポンスに含まれるステータスコードとレスポンスボディを出力するプログラムです。
(※) 現在のnet.studyinghttp.HttpClientTesterでは、HTTP通信の極々基本的なことしかできませんが、このコードで使用しているHttpURLConnectionクラスを使用することによって拡張することができます。
たとえば、リクエストヘッダを設定したい場合は HttpURLConnection#setRequestProperty()メソッドを使用することができます。
“net.studyinghttp.HttpStatusCodeFindlet”は、コンボボックスで選択したHTTPステータスコードについて、その説明句を検索するためのJavaアプレットです。 アプレットのデモとして、Select the HTTP Status Code.を参照ください。
(※) デモ版では、JAR圧縮(複数のJavaクラスファイルをまとめ、圧縮すること)したものを、デジタル署名ツールで署名したものを使用しています。
これらの操作を行うためのツール(jar, jarsigner)は、JDKに含まれています。