blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_2

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

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 」の種類があり、各コードは、それぞれは次の意味を持ちます。


ステータスコード意味
1xxInformational - Request received, continuing process ( 情報 - 要求を受信, 継続しているプロセス )
2xxSuccess - The action was successfully received, understood, and accepted ( 成功 - アクションは受信に成功し, 理解された, それと 承認された )
3xxRedirection - Further action must be taken in order to complete the request ( 転送 - 追加のアクションは 要求の指示を完了するためでなければいけません )
4xxClient Error - The request contains bad syntax or cannot be fulfilled ( クライアントエラー - 要求が 不正な構文を含む または ( 条件が ) 満たされていません )
5xxServer Error - The server failed to fulfill an apparently valid request ( サーバは 遂行出来なかった 明らかに有効な要求を


今回のファイルサイズ超過エラーで確認した HTTP ステータスコードは「 413 」なので、上記「 クライアントエラー 」に当たることが分かります。


0x114 -> 0x115 へ



次回は、HTTP ステータスコードをもう少し詳しく確認します。


参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。

目次 - Perl Index












同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲