Perl Perl_2
Perl 「 モジュール 」 CGI 実用的なファイルアップロード 07 HTTP ステータスコード (0x114)

目次 - Perl Index
Theme
Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x114 回。
CGI.pm で、実用的なファイルアップロードの処理を確認する。その 07 回。「 $CGI::POST_MAX 」で設定したファイルサイズを超過した場合の CGI エラーで出力される、HTTP ステータスコードを確認する。
サイズ超過のエラー処理
今回は、 Cgi upload - perlmeme.org で紹介されている、ファイルサイズ超過エラー発生時に出力される HTTP ステータスコードを確認します。
if (!$q->param('filename') && $q->cgi_error()) {
print $q->cgi_error();
print <<'EOT';
<p>
The file you are attempting to upload exceeds the maximum allowable file size.
<p>
Please refer to your system administrator
EOT
print $q->hr, $q->end_html;
exit 0;
}
エラーの内容をユーザに伝える
前回 (0x113) で確認した通り、if 文の条件式が 真 になった場合、それは、CGI.pm の処理中にエラーが発生したことを意味します。
参考とする実用的なプログラムコードでは、まず、次の様にして、メソッド「 cgi_error() 」に格納されたデータを出力しています。
print $q->cgi_error();
なぜならば、CGI "CGIエラーの取り出し" - perloc.jp の説明にある通り、メソッド cgi_error() は、発生したエラーメッセージを HTTP ステータスコードの形で保持しているからです。
実際のエラーメッセージを確認するために、「 $CGI::POST_MAX 」の設定サイズを 「 1024 * 1 」( 1 KB ) とした上で、2KB 以上のファイルをアップロードしてみました。
その結果得られた HTTP ステータスコードは、次のものです。
413 Request entity too large
HTTP ステータスコードは数値「 413 」で表されています。それは「 Request entity too large 」、つまり、「 要求の実体が大きすぎる 」( ら、らめぇ ) を意味しています 。
HTTP ステータスコード
HTTP ステータスコードは、3 桁の数字によって、Web サーバからの応答内容を表すためのものです。その仕様を定めた RFC 2616 では次の様に説明されています。
The first digit of the Status-Code defines the class of response. The last two digits do not have any categorization role. There are 5 values for the first digit:
( ステータスコードの最初の桁は 定義します 応答のクラスを. 最後の 2 桁は 分類する役割を持ちません. 5 つの値があります 最初の桁には. )
ステータスコードは、「 1xx 」,「 2xx 」,「 3xx 」,「 4xx 」,「 5xx 」の種類があり、各コードは、それぞれは次の意味を持ちます。
ステータスコード | 意味 |
---|---|
1xx | Informational - Request received, continuing process ( 情報 - 要求を受信, 継続しているプロセス ) |
2xx | Success - The action was successfully received, understood, and accepted ( 成功 - アクションは受信に成功し, 理解された, それと 承認された ) |
3xx | Redirection - Further action must be taken in order to complete the request ( 転送 - 追加のアクションは 要求の指示を完了するためでなければいけません ) |
4xx | Client Error - The request contains bad syntax or cannot be fulfilled ( クライアントエラー - 要求が 不正な構文を含む または ( 条件が ) 満たされていません ) |
5xx | Server Error - The server failed to fulfill an apparently valid request ( サーバは 遂行出来なかった 明らかに有効な要求を |
今回のファイルサイズ超過エラーで確認した HTTP ステータスコードは「 413 」なので、上記「 クライアントエラー 」に当たることが分かります。
0x114 -> 0x115 へ
次回は、HTTP ステータスコードをもう少し詳しく確認します。
参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。
目次 - Perl Index
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)