「あなくつ」のおもちゃばこ

Blog

Apacheモジュールで404エラーの出し方2種と違い

会社が休みに入ると仕事ができていいですね(え

Apacheモジュールで処理を行った結果、404(Not Found)のHTTPステータスコードを返したい場合があります。その場合、2種類の方法があります。

  • ap_hook_handler で登録したフック関数の戻り値で404を返す
  • ap_hook_handler で登録したフック関数の引数 request_rec 構造体の status の値を変更する(戻り値は0=OKを返す)

さて、2つの違いは何でしょう。答えは、レスポンスボディに何が出力されるか、ということろに違いがあります。

Apacheのフックの処理の流れから考えてみましょう。とりあえず、今回ポイントとなっているあたりを概略図にすると下記のようになります。

正常なとき
正常なとき

エラーの時(ファイルがない)
エラーの時

Apacheがいろいろなフックを呼びだし、誰かが処理を担当してくれたらそれを返す、誰も処理してくれなかったらエラー処理して返す、という感じでしょうか。

このとき、フック関数の戻り値で404を返すと下記のように処理が流れます。

エラーの時

エラー処理のほうに流れるわけですね。よって、エラー処理で生成されたレスポンスボディが返されます。Apacheの設定で ErrorDocument ディレクティブを設定している場合、指定されているコンテンツがレスポンスされます。

一方、request_rec 構造体の status の値を変更する場合、フック関数自体はOK(処理完了)を返すので、エラーレスポンスには処理が流れません。よって、 ap_rwrite などでレスポンスボディをセットしていれば、その内容がレスポンスされます。

エラーの時

この動きは、404エラーに限らず、500(Internal Server Error)などでも同様です。

これを理解できると、

  • 引数が不正で処理が続行できない場合など、モジュールでエラーを出力したい時、なんでエラーになったのかエラーメッセージを表示しつつ 400 のステータスコードを返す
  • 引数が不正だった場合でも、ファイルのダウンロードの処理(CSVの出力など)の場合は、 ErrorDocument ディレクティブで設定された 404 ページを表示させたい

など便利な使い方ができます。

Apacheモジュール開発している人なんてあまりいないと思いますが、ご参考までに!

タグ : apache,module,モジュール

2015/12/30 20:23:08 | Trackbacks (0) | Comments (0) | Technology

2015年買ってよかったものランキング

第3位 ゴルフセット

新しい遊びが増えました。

しかーし、金かかるし、なかなかうまくならないし、今のところ費用対効果の悪い投資です。

来年はもう少しちゃんと練習しましょう。


第2位 パソコン

HDDが壊れたことに便乗して、CPU・マザボ・メモリ・HDD・ケース全面的に買い換えしました。

結構な金額になってしまったのがイタイですが、まぁ仕事道具なので必要経費です。どうぐだいじ。

i7はIvy BridgeからSkylakeに乗り換えですが、あまり早くなった気がしませんね。まぁIvy Bridgeでも全く不自由してなかったので、その程度にしかCPUを使っていないのかもしれません。

それよりも、最近のパソコンではディスクIOが体感スピードに影響していそうですよね。

機会を見てM2接続のSSDがほしいところです。(しかし再インストールは面倒)


第1位 音波歯ブラシ

マジこれいいよ!! なんで今まで使わなかったんだろう。

音波歯ブラシ使ってない人へこれを言いたくてブログを書いたようなものです。

昔の電動歯ブラシのイメージが強くて、手磨きのほうがよく磨けるっしょー、としか思っていなかったんです。ところが、ひょんなことからポケットドルツを使ってみたところ、これは案外いいかも!と思い、それならポケットじゃないドルツはもっといいでしょ!と思って入手しました。

音波歯ブラシにしてから、歯もツルツルになって口臭も減った(?)気がします。(いつまで続くかわかりませんが)最近はこれにフロスとデンタルリンスも使ってしっかりケアするよう心がけています。

歯が綺麗になったおかげで、歯石がすげー気になるようになっちゃったんですよね。歯医者行かなきゃ・・・。


2015/12/29 04:59:56 | Trackbacks (0) | Comments (0) | Pastime

« 2015年8月 | Top | 2016年1月 »

  • Top
  • Software
  • Blog
  • Laboratory
  • Profile
Search
Feeds of Blog
Archives

Copyright © 2004-2023 Ana-Kutsu All Rights Reserved.