XMLHttpRequestのレスポンス

JavaScript(ECMAScript)においてXMLHttpRequest(XHR)オブジェクトによるサーバ通信を使用していると、HTTPレスポンスのステータスラインを使用してクライアントにエラー情報を伝達できないかと考えることがあります。

ところがいざ使用してみると、特定のステータスコードのレスポンスやブラウザによっては意図したようにエラー情報を取得できないことが分かってきます。

このページは、ステータスコード別のレスポンスに対するXMLHttpRequestのプロパティの値を調査した内容をまとめたものです。

対象

調査したブラウザは以下の6つです。

Microsoft Internet ExplorerとWindows Internet Explorerをまとめていますが、調査自体はそれぞれ別々に実施しました。それらの結果が完全に一致したため、ここではまとめて表記しております。

結果での表記ブラウザ/確認バージョンECMAScriptエンジン
Internet ExplorerMicrosoft JScript
FirefoxMozilla Firefox/3.0SpiderMonkey
SafariSafari/3.1JavaScriptCore (WebKit)
Google ChromeGoogle Chrome/0.2V8 (WebKit)
OperaOpera/9.60futhark (Presto)
方法

調査を実施するにあたり、サーバ用とクライアント用にそれぞれ簡単なスクリプトファイルを用意しました。

サーバ用には、NPH(non-parsed header)CGIを利用して任意のステータスラインとボディを返すPerlスクリプトを用意し、サーバにはApache HTTP Server/1.3.41を使用しました。

クライアント用には、jQuery/1.2.6を使用してサーバとの通信を行い、その結果を表示するブラウザ共通のスクリプトを用意しました。クライアントは上記の6つのブラウザです。

なお、サーバスクリプトはステータスコード300番台のレスポンスでも、仕様に反してLocationフィールドを返さないようになっています。

調査したXMLHttpRequestのプロパティは、サーバから伝達されたエラー情報を容易に取得することができる以下の3つのプロパティです。

プロパティ対応するHTTP仕様での要素名
statusStatus-Code
statusTextReason-Phrase
responseTextmessage-body
結果

結果は、サーバから返されたステータスコード