2012-01-19 10 views
0

スクリプトで例外が発生した場合、どのHTTPステータスを返す必要がありますか?例外の正しいHTTPステータスは何ですか?

200 OK

または

500内部サーバーエラー

のは、ユーザーのリクエストパラメータが正しいではなく、適切な応答を表示するエラーメッセージが表示され、私のスクリプトにバグがあるとしましょう(XML、JSONまたはその他の形式)。 HTTPステータスはどうすればよいですか?

+0

私は404と言っています。私のプロジェクトでは以前と同じ質問がありました。すべてのコードとその意味を読んだ後で404と一緒にいました。例外の原因は重要です。 swエラーの場合、無効なユーザー入力は404(無効な製品IDなど)を与え、500を与えます。 – Notinlist

+8

それはエンドユーザーの例外とその意味に依存します!あなたは意味のある答えを得るためにはるかに正確でなければなりません! –

+2

@Notinlist実際にあなたは単にプログラミングエラーを起こした場合、誰かにリソースが存在しないことを教えてくれるでしょうか?あなたがページが存在しないと言うと、検索結果にあなたのURLの表示がすぐに止まるでしょう:) ** **見つからない**は、リクエストされたリソースが存在しない場合にのみ(本当に存在しなかった場合のみ) 。 – rdlowrey

答えて

9

500 Internal Server Errorは、クライアントが要求を変更することでエラーを修正できない場合、正しいステータスです。

クライアントがエラーを回避する要求を修正できる場合は、4XXステータスを使用します(リソースが見つからない場合は404)。その後、クライアントは、物事が正常に動作していると考えて(そうでないもの)と同じエラーの原因となる要求を作り続ける可能性があるため、

200 OKは、ないほぼすべてのエラー状況に適切な状態です。

available status codes in RFC2616に慣れて、状況に最も適したものを見つけてください。

+0

+1は404が "見つからない"ことを意味し、 "一般的なWebサービスエラー"は意味しません。 –

+0

他の5xxコードが存在します。たとえば、データベース接続が足りなくなった場合、503を返すことができます。 –

+0

@DietrichEpp - 間違いなく。より多くの情報なしにすべての可能な状況に対処するのは難しいので、OPが決定を下すのを助けるRFCへのリンク。 –

0

Status Code Definitionsを確認してください。 500または400は一般的な問題のために行う必要がありますが、より詳細にすると返されるステータスがより有用になります。

+0

PHPが例外を投げる時には、あなたが正当な使用のポイントを '400'に渡したと言います。 Webサーバは 'Bad Request'を構成するものを捕まえる必要があり、PHPは起動されません。例外をスローするものは、サーバ側であるため、*おそらく* 5xxのエラーです。無効なリソースを要求するなど、これが真でない場合がありますが、独自のコード( '401'、' 403'、 '404')を持ち、' ​​400 Bad Request'を構成していません。 – DaveRandom

+1

@DaveRandom - "WebサーバーはBad Requestを構成するものをすべてキャッチする必要があり、PHPは呼び出されません。具体的にフォーマットされたリクエストボディを期待していたかもしれませんが、不正な形式のリクエストを受け取りました。これは '400 Bad Request'にふさわしいでしょう(そして、サーバはそれを気にしません)。このステータスは、APIには特に便利です(通常のウェブページリクエストではなく、それでもなお便利です)。 –

+0

@RobHruska良い点よく作られた – DaveRandom

3

ほとんどのエラーに使用できるため、例外がスローされる理由によって異なります。 URIの一部のIDがデータベースに見つかりませんでしたので、404と言うでしょう。一方、データベースがダウンしているので、500をスローします。例外がスローされますが、結果のページはまだ残っています私は返信200と言うだろうユーザーに便利です。

+1

私は、例外がスローされた場合でも、それは500エラーであるべきだと主張しますが、応答の本体にはまだ有用な内容が含まれています。 – cdeszaq

+0

@cdeszaqこれは視覚的にエラーレスポンスを調べるのに便利かもしれませんが、多くのHTTPクライアントは500のステータスコードが提供されていればレスポンスボディを読み取らないので、クライアントは必ずしもその原因に応じて動作を調整することができません。エラー。このため、WCF例外をエラータイプの応答で200として返すことができます。 – tomfumb

+0

@cdeszaqほとんどの場合、私はあなたに同意するだろうが、私はまだそれが依存していると主張する。 HTTPステータスコードは、クライアント(Webユーザー/検索エンジンボット)の消費量です。したがって、何らかのエラーをログに記録したいが、レスポンスの本体が影響を受けないと確信しているので、例外をスローするとします。クライアントは、ページが正常である(これを確認するためにステータスコードを使用する必要がある)と引き続き考えることができます。これにより、分析システムが壊れているため、Googleがインデックスからページを削除するのを避けることができます。 –

関連する問題