彼らは、誰がミリオネアになりたいかについての最後の質問をする必要があります!
クライアントが提供した情報がサーバーで処理できない形式であるため、ブラウザーはサーバーがサービスを提供できないことを要求しました。ただし、これは、クライアントが提供したデータをサポートしていないことに対するサーバーの責任ではなく、サーバーのAcccept- *ヘッダーをリッスンせず、不適切なエンコーディングでデータを提供したことに対するクライアントの責任です。それはそれをクライアントエラー(400シリーズのエラーコード)にします。
- 私の最初の本能は400BadRequestが、この場合の適切な応答です。
- 405メソッドは許可されていません。HTTP動詞が許可されていないことを示しているため、正しくありません。
- 406 Not Acceptableは約束があるように見えますが、サーバーが送信したAccept-*要求ヘッダーを満たすデータをクライアントに提供できないことを示しています。これはあなたのケースに合うとは思えません。
- 412前提条件の失敗はかなり漠然と定義されています。それは適切かもしれませんが、私はそれには賭けません。
- 415サポートされていないメディアタイプは、拒否されているデータタイプではなく、エンコード形式であるため、正しくありません。
その後、非標準の応答コードの領域に入ります。
- 422 Unprocessable Entityは、要求が整形式であるが、何らかの意味で意味的に正しくない場合に返される必要がある応答を記述します。これは適切に思えますが、HTTPのWebDAV拡張機能であり、標準ではありません。
上記を考えると、私は個人的に400BadRequestを選びます。他のHTTPエキスパートにもっと良い候補があれば、代わりに彼らの話を聞きます。;)
更新:私は以前、ウィキペディアのページからHTTPステータスを参照していました。そこにある情報は正確であるように見えますが、それも完全ではありません。W3Cの仕様を見ると、HTTP 406に関するより多くの情報が得られ、結局のところ406が正しいコードである可能性があると私は思います。
10.4.7406受け入れられない
リクエストによって識別されたリソースは、リクエストで送信されたacceptヘッダーに従って受け入れられないコンテンツ特性を持つ応答エンティティのみを生成できます。
HEADリクエストでない限り、応答には、ユーザーまたはユーザーエージェントが最も適切なものを選択できる利用可能なエンティティの特性と場所のリストを含むエンティティを含める必要があります。エンティティ形式は、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は問題ないはずです(コンテキストによって異なります)。
- クライアント:GZIPPEDページをください。
- サーバー:申し訳ありませんが、できません。私はあなたのためにそれをDEFLATEパックすることができます。これがDEFLATEパックのページです。大丈夫ですか?
- クライアント:Wellll ... DEFLATEは本当に必要ではありませんでしたが、デコードしても問題ないので、それを使用します。
(また)
- クライアント:ユーザーと一緒にそれをクリアする必要があると思います。持続する。