87

HTTP GET リクエストがステータス コードを含むレスポンスを返すのは普通のこと204 - No Contentですか? 同様に、これは HTTP GET が達成するはずのものに関して意味的に正しいですか? HTTP POST-Requestに対してa204 - No Content問題ないことはわかっています。GET リクエストで、データを返さない場合、ステータス コード 204 は適切ですか? 404 を使用する必要がありますか、それとも成功のために 200 に固執する必要がありますが、空の応答がありますか?

この質問の使用例は、私が Google App Engine 用に作成している Java アプリケーションです。サーブレットにリクエストを送信していますが、クライアントに送り返されるデータは、HTTP レスポンスではなくチャネル API ソケットを介して送信されます。現在、クライアントはリクエスト本文にコンテンツを含まない POST を送信し、チャネル API ソケットをポーリングする前に、サーブレットから返される 204 応答を待ちます。リクエストの本文にデータが送信されていないため、POST の代わりに GET を送信する方が理にかなっているのかどうかを議論しています。

4

5 に答える 5

84

204 コンテンツなし

サーバーは要求を満たしましたが、エンティティ本体を返す必要はなく、更新されたメタ情報を返したい場合があります。レスポンスには、新しいメタ情報または更新されたメタ情報がエンティティ ヘッダーの形式で含まれる場合があります。エンティティ ヘッダーが存在する場合は、リクエストされたバリアントに関連付ける必要があります。

ステータス コード 204の RFC 部分によると、GET 要求の有効な選択のように思えます。

A 404 Not Found200 OK空のボディで204 No Contentまったく異なる意味を持ち、適切なステータスコードを使用できず、ルールを曲げて、ある日または後で噛み付くために戻ってくることがあります。したがって、適切なステータス コードを使用できる場合は、それを使用してください。

GET または POST の選択は非常に個人的なものだと思いますが、どちらも機能しますが、次の 2 つの理由から、GET ではなく POST を使用することをお勧めします。

  • 他の部分(私が正しく理解している場合はサーブレット)がアクションを実行し、そこからデータを取得しないようにする必要があります。
  • デフォルトでは、URL にパラメーターが存在しない場合、GET 要求はキャッシュ可能ですが、POST はキャッシュ可能ではありません。
于 2012-10-09T21:07:58.410 に答える
11

204 を使用した POST/GET は一見問題なく動作するように見えます。

ドキュメントによると、2xx -- このクラスのステータス コードは、クライアントによって要求されたアクションが受信され、理解され、受け入れられ、正常に処理されたことを示します。一方、4xx -- ステータス コードの 4xx クラスは、クライアントがエラーを起こしたと思われる状況を対象としています。

それ以来、リクエストはサーバー上で正常に受信、理解、処理されました。その結果、リソースが見つかりませんでした。したがって、この場合、これはクライアント側のエラーではなかったか、クライアントがエラーを起こしていません。

したがって、これは 4xx ではなく 2xx シリーズのコードである必要があります。この場合、204 (No Content) を送信する方が、404 または 410 応答よりも優れています。

于 2016-12-22T07:24:26.360 に答える