web-dev-qa-db-ja.com

カスタムHTTPステータスコードを作成できますか?

RESTとWCFサービスがあり、操作に基づいてカスタムステータスコードを送信したい。

一部の検証が失敗した場合、HTTP 444を送信し、承認が失敗した場合、HTTP 455を送信する例

問題は、SOAPとREST Webサービスの両方について、どのように検証するかです。

WCFサービスからHTTP 400/500を(SOAPを使用して)送信すると、ステータスコードを表示するクライアントで例外がスローされるため、クライアントではエラーコードはどのように機能しますか。

新しいカスタムステータスコードを送信した場合、クライアントはこれをどのように処理しますか?

74
Rajesh

はい。クラスを尊重する限り、つまり、成功の場合は2xx、クライアントエラーの場合は4xxなどです。したがって、独自のアプリケーションのエラー条件に対してカスタム4XXエラーコード(できれば割り当てられていないもの)を返すことができます。

[RFC 2616] [1]から引用するには:

「HTTPステータスコードは拡張可能です。HTTPアプリケーションは、登録されたすべてのステータスコードの意味を理解する必要はありませんが、そのような理解は明らかに望ましいものです。ただし、アプリケーションは、そのクラスのx00ステータスコードと同等であると認識されない応答は、認識されない応答をキャッシュしてはならないという例外を除きます。リクエストに何らかの問題があり、400ステータスコードを受け取ったかのようにレスポンスを処理します。」

クラス'

  • 1xx:情報-要求を受信し、継続的なプロセス

  • 2xx:成功-アクションは正常に受信、理解、および受け入れられました

  • 3xx:リダイレクト-リクエストを完了するには、さらにアクションを実行する必要があります

  • 4xx:クライアントエラー-要求に不正な構文が含まれているか、リクエストを実行できません

  • 5xx:サーバーエラー-サーバーは明らかに有効な要求を実行できませんでした[1]:

http://tools.ietf.org/html/rfc2616#section-6.1.1

91
ChrisNY

該当するコードがすでに存在する の場合、例で行いたいことに対して、独自のHTTPステータスコードを作成しないことをお勧めします。

  • 処理できない障害:ステータス422
  • 認証失敗 :ステータス403

https://tools.ietf.org/html/rfc4918#section-11.2 から:

422 [Unprocessable Entity]ステータスコードは、サーバーがリクエストエンティティのコンテンツタイプを理解し(415 [Unsupported Media Type]ステータスコードが不適切)、リクエストエンティティの構文が正しいことを意味します(したがって、400 [Bad Request] ]ステータスコードは不適切です)が、含まれている命令を処理できませんでした。たとえば、XML要求本文に整形式(つまり、構文的に正しい)であるが、意味的に誤ったXML命令が含まれている場合、このエラー状態が発生する可能性があります。

「処理できません」は検証エラーが原因であると主張できます。

30
Julian Reschke

はい、カスタムエラーコードを追加できます。可能であれば、既に存在するコードを使用します。新しいコードを宣言する場合は、衝突を避けるように注意してください。

ただし、一部のプロキシは不明なコードをフィルタリングすることに注意してください。 5XXを500に、4XXを404にマッピングするプロキシの背後にいるユーザーに問題がありました。これにより、ステータスコードのチェックに失敗するajax呼び出しが行われました。

17
fmsf

一部のアプリケーションでは、カスタム応答コードを600〜799の範囲で追加します。たとえば、応答コードのリストを確認してください KeyNoteから

基調講演で定義されたエラーコード(600-799)

600: CONNECTION ERROR - This indicates a general connection error
601: INCOMPLETE ERROR - This indicates sever sends an incomplete page/object (as indicated by Content-Length header)
602: UNEXPECTED CLOSE ERROR - This indicates socket connection has been closed unexpectedly
603: REFUSED ERROR - This indicates a request to connect to the server is refused
604: TIMEOUT ERROR - This indicates there is no activity in socket connection in 3 minutes
605: REDIRECT ERROR - This indicates an error in redirect HTTP header
606: SSL ERROR - This indicates a general error in SSL
607: HEADER ERROR - This indicates a malformed HTTP header
608: EMPTY RESPONSE ERROR - This indicates server doesn't send any response after a request is sent
609: UNKNOWN Host ERROR - This indicates socket receives an unknown Host error from DNS
610: NO ROUTE TO Host ERROR - This indicates a no route to Host error was received while attempting to open a socket
611: SOCKET ERROR - This indicates a general socket error
612: FRAME LOOP ERROR - This indicates a page has a frame loop (frame A includes Frame B that includes Frame A)
613: REDIRECT LOOP ERROR - This indicates a page has a redirect loop (page A redirects to page B that redirects to page A)
614: CONNECTION RESET ERROR - This indicates socket receive a reset signal from the server
615: SOCKET PROTOCOL ERROR - This indicates an error in socket protocol
616: SOCKET BIND ERROR - This indicates an error in binding the socket
617: CONNECTION ERROR - This indicates a general socket connection error
618: CHUNK ERROR - This indicates an error in chunked encoding
619: SSL TIMEOUT - This indicates a timeout during SSL handshake (2 minutes)
620: SSL END OF INPUT - This indicates an end-of-file is received during SSL handshake
621: SSL HANDSHAKE ERROR - This indicates a general error during SSL handshake
622: SSL CERTIFICATE ERROR - This indicates an error in SSL certificate verification
623: SSL AUTHENTICATION ERROR - This indicates an authentication error during SSL handshake
624: SSL BAD MAC ERROR - This indicates a bad MAC during SSL handshake
625: SSL CIPHER ERROR - This indicates a cipher error during SSL handshake
701: ERROR TEXT FOUND - This code is returned if any error text (such as, "Service Unavailable") are found in the main page (frame HTML contents included). Note that the error text must be defined in advance of the test. Error text means if the text is found, this session should be considered a failure.
702: REQUIRED TEXT NOT FOUND - This code is returned If not all required texts are found in the main page. Note that required text must be defined in advance of the test. Required text means if the text is not found, this session should be considered a failure.
703: HTML BODY EMPTY - This code is returned if the HTML body of the page is empty (only if error text or required text has been defined).

これが良いプラクティスであるかどうかは言うつもりはありませんが、少なくとも興味深いリファレンスです。

10
Wilt