コンテナやブラウザがHTMLページを生成するステータス・コード
|
とりあえずWebSpereテスト環境上のTomcat 3.2.1でメソッドとブラウザの相違でどうなるか調べると下表のようになる。これは比較的使うであろうと思われる400〜405についての調査結果である。
Tomcat 3.2.1(Standalone)
ステータス・コード |
|
IE(HTTP/1.1) |
IE(HTTP/1.0) |
Netscape |
SC_BAD_REQUEST(400) |
sendError |
「ページが見つかりません」をブラウザが表示 |
「ページが見つかりません」をブラウザが表示 |
エンジンが作った「Error: 400」をブラウザが表示 |
setStatus |
「ページが見つかりません」をブラウザが表示 |
「ページが見つかりません」をブラウザが表示 |
「コード:400
SC_BAD_REQUESTを返します」を表示 |
|
SC_UNAUTHORIZED (401) |
sendError |
ユーザ名とパスワード要求のログインページをエンジンが作成(http://localhost:808
0/examples/jsp/secur ity/login/login.jsp) |
ユーザ名とパスワード要求のログインページをエンジンが作成(http://localhost:808
0/examples/jsp/secur ity/login/login.jsp) |
ユーザ名とパスワード要求のログインページをエンジンが作成(http://localhost:808
0/examples/jsp/secur ity/login/login.jsp) |
setStatus |
「コード:401
SC_UNAUTHORIZEDを返します」を表示 |
「コード:401 SC_UNAUTHORIZEDを返します」を表示 |
ユーザ名とパスワード要求のポップアップウィンドウ表示 |
|
SC_PAYMENT_REQUI RED(402) |
sendError |
エンジンが作った「Error: 402」をブラウザが表示 |
エンジンが作った「Error: 402」をブラウザが表示 |
エンジンが作った「Error: 402」をブラウザが表示 |
setStatus |
「コード:402
SC_PAYMENT_REQ UIREDを返します」を表示 |
「コード:402
SC_PAYMENT_REQ UIREDを返します」を表示 |
「コード:402
SC_PAYMENT_REQ UIREDを返します」を表示 |
|
SC_FORBIDDEN(403) |
sendError |
「このページの表示が認められていません」とブラウザが表示 |
「このページの表示が認められていません」とブラウザが表示 |
エンジン作成の「SSL required to
access this page」をブラウザが表示 |
setStatus |
「このページの表示が認められていません」とブラウザが表示 |
「このページの表示が認められていません」とブラウザが表示 |
「コード:403
SC_FORBIDDENを返します」を表示 |
|
SC_NOT_FOUND(404) |
sendError |
「ページが見つかりません」とブラウザが表示 |
「ページが見つかりません」とブラウザが表示 |
エンジンが作った「Not Found (404)」とアドレス情報などをブラウザが表示 |
setStatus |
「ページが見つかりません」とブラウザが表示 |
「ページが見つかりません」とブラウザが表示 |
「コード:404
SC_NOT_FOUNDを返します」を表示 |
|
SC_METHOD_NOT_ ALLOWED(405) |
sendError |
「ページを表示できません」とブラウザが表示 |
「ページを表示できません」とブラウザが表示 |
エンジンが作った「Error: 405」をブラウザが表示 |
setStatus |
「ページを表示できません」とブラウザが表示 |
「ページを表示できません」とブラウザが表示 |
「コード:405
SC_METHOD_NOT _ALLOWEDを返します」を表示 |
これから以下のようなことが云えよう。
- IEではHTTP/1.1とHTTP/1.0の相違は生じない。HTTP/1.1で追加されている405もそのまま受理する
- IEではsetStatusで入力したメッセージは401と402ではそのままブラウザに表示されるが、それ以外はブラウザ側で勝手にメッセージを表示する。
- Netscapeでは401以外はsetStatusで入力したメッセージはそのままブラウザに表示される。
- コード401に対しては、setStatusの場合はNetscapeはポップアップウィンドウで名前とパスワードを要求し、localhost:8080へのログインを開始する。SendErrorの場合たまたま同じパッケージにログインのJSPページが存在しているので、これが起動する。
- NetscapeではsendErrorでエンジンが作ったHTMLメッセージはそのままブラウザで表示される。
- 他方IEではsendErrorでエンジンは作ったHTMLメッセージは通常そのとおりはブラウザは表示しない。
通常メッセージを入力しないsendError(ステータス・コードのみ)メソッドでは、ブラウザ側で自分が用意しているメッセージ表示されるが、エンジンは何を送信しているかTelnetで確認しよう。以下はその例(Telnetのログ)である。エンジンは一般にそのステータス・コードに対応したメッセージをHTMLで送信する。
Tomcat 3.2.1 (Standalone)
GET
/examples/servlet/ReturnStatusCode?code=SC_BAD_REQUEST
HTTP/1.0 HTTP/1.0 400
Bad Request Content-Type:
text/html Servlet-Engine:
Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.2.2; Windo ws 98 4.10 x86;
java.vendor=IBM Corp.) <head><title>Error:
400</title></head> <h1>Error:
400</h1> <h2>Location:
/examples/servlet/ReturnStatusCode</h2><b>No detailed
message</b><br></body> |
GET
/examples/servlet/ReturnStatusCode?code=SC_FORBIDDEN
HTTP/1.0 HTTP/1.0 403
Forbidden Content-Type:
text/html; charset=Shift_JIS Content-Length:
41 Servlet-Engine:
Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.2.2; Windows 98 4.10
x86; java.vendor=IBM Corp.) <h1>SSL
Required to access this page</h1> |
GET
/examples/servlet/ReturnStatusCode?code=SC_NOT_FOUND
HTTP/1.0 HTTP/1.0 404
Not Found Content-Type:
text/html Content-Length:
215 Servlet-Engine:
Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.2.2; Windows 98 4.10
x86; java.vendor=IBM Corp.) <head><title>Not
Found (404)</title></head> <body><h1>Not
Found (404)</h1> <b>Original
request:</b> /examples/servlet/ReturnStatusCode<br><br> <b>Not
found request:</b> /examples/servlet/ReturnStatusCode</body> |
注: Tomcat 4.0 (Standalone)は6月時点でsendErrorはインプリメントされていない。