クライアントがHTTPリクエストを送信し、サーバーでデコードできないContent-Encodingヘッダーを指定すると、どのステータスコードが返されますか?
例
クライアントはJSONデータをRESTリソースにPOSTし、gzipコーディングを使用してエンティティボディをエンコードします。ただし、サーバーはDEFLATEコーディングのみをデコードできます。サーバースクールのgzipクラスに失敗したためです。
どのHTTP応答コードを返す必要がありますか? 415 Unsupported Media Typeと言いますが、問題であるのはエンティティのContent-Typeではなく、サポートされているエンティティ本体のエンコーディングです。
どちらがより適切ですか:415? 400?おそらくカスタム応答コードですか?
補遺:もちろん、rfc2616を徹底的にチェックしました。答えがそこにある場合、私はいくつかの新しい矯正アイウェアを必要とするかもしれませんが、それがそうであるとは思いません。
更新:
これは、クライアントに受け入れられない可能性のある応答の送信とは関係ありません。問題は、クライアントが、サーバーが理解できないエンコーディングの有効なメディアタイプであるかどうかにかかわらず、サーバーに送信していることです(クライアントがリクエストメッセージにパッケージ化したContent-Encoding
ヘッダーに従って)。
これはエッジケースであり、ブラウザのユーザーエージェントを処理するときには発生しませんが、REST APIでエンティティボディを受け入れてリソースを作成/変更することで発生する可能性があります。
私が読んでいるように、415 Unsupported Media Type
が最も適切に聞こえます。
RFC 2616から:
10.4.16 415サポートされていないメディアタイプ
リクエストのエンティティがリクエストされたメソッドのリクエストされたリソースでサポートされていない形式であるため、サーバーはリクエストの処理を拒否しています。
ええ、テキスト部分は「エンコーディング」ではなく「メディアタイプ」と言いますが、実際の説明にはその違いについての言及は含まれていません。
新しいホットネス RFC 7231 は、それについてさえ明白です:
6.5.13。 415サポートされていないメディアタイプ
415(サポートされていないメディアタイプ)ステータスコードは、
ペイロードが原因で、元のサーバーがリクエストの処理を拒否しています
は、ターゲットリソースのこのメソッドでサポートされていない形式です。
フォーマットの問題は、要求の指示が原因である可能性があります
Content-TypeまたはContent-Encoding、または
直接データ。
彼らは、誰が億万長者になりたいのかという最後の質問をするべきです!
クライアントが提供した情報はサーバーで処理できない形式であるため、ブラウザーはサーバーがサービスを提供できないという要求を出しました。ただし、これはクライアントが提供したデータをサポートしていないサーバーのせいではなく、サーバーのAcccept- *ヘッダーをリッスンせず、不適切なエンコーディングでデータを提供したのはクライアントのせいです。これは、クライアントエラー(400シリーズのエラーコード)になります。
その後、非標準の応答コードの領域に入ります。
上記を踏まえて、私は個人的に400 Bad Requestを選択します。他のHTTPエキスパートがより良い候補者を持っている場合でも、代わりに彼らの意見を聞きます。 ;)
[〜#〜] update [〜#〜]:以前ウィキペディアのページからHTTPステータスを参照していました。そこにある情報は正確であるように見えますが、それも完全ではありません。 W3C の仕様を見ると、HTTP 406に関する多くの情報が得られ、結局、406が適切なコードであると考えるようになりました。
10.4.7 406受け入れ不可
リクエストで識別されたリソースは、リクエストで送信されたAcceptヘッダーに応じて許容できないコンテンツ特性を持つレスポンスエンティティのみを生成できます。
HEADリクエストでない限り、レスポンスには、ユーザーまたはユーザーエージェントが最も適切なものを選択できる、利用可能なエンティティの特性と場所のリストを含むエンティティが含まれる必要があります(SHOULD)。エンティティ形式は、Content-Typeヘッダーフィールドで指定されたメディアタイプによって指定されます。ユーザーエージェントの形式と機能に応じて、最も適切な選択肢の選択が自動的に実行される場合があります。ただし、この仕様では、そのような標準を定義していません自動選択。
Note: HTTP/1.1 servers are allowed to return responses which are not acceptable according to the accept headers sent in the request. In some cases, this may even be preferable to sending a 406 response. User agents are encouraged to inspect the headers of an incoming response to determine if it is acceptable.
応答が受け入れられない可能性がある場合、ユーザーエージェントは、追加のデータの受信を一時的に停止し、ユーザーにさらなるアクションの決定について問い合わせる必要があります。
Content-Typeヘッダーについては明示的に言及していますが、GZIPとDEFLATE圧縮のようなものをカバーしていると見なすことができる「エンティティの特性」という表現が使われています。
注目に値することの1つは、仕様では、データをそのまま送信するだけでなく、ヘッダーと一緒にデータの形式と使用するエンコードをクライアントに通知し、クライアントが整理するためにそのままにしておくのが適切であるということです。 。したがって、クライアントがGZIP圧縮を受け入れることを示すヘッダーを送信するが、サーバーはDEFLATEを使用した応答しか生成できない場合、ヘッダーと共にそれを送信すると、DEFLATEは大丈夫であるはずです(コンテキストによって異なります)。
(または)