1. ホーム
  2. google-app-engine

[解決済み] HTTP Get with 204 No Content: それは正常ですか?

2022-03-01 15:26:41

質問

は普通に発生するのでしょうか? HTTP GET リクエスト で応答し、ステータスコード 204 - No Content ? 例えば、HTTP GETが何を達成することになっているのかに関して、これは意味的に正しいのでしょうか?私が知っているのは 204 - No Content オーケー に対して HTTP POST-Request(リクエスト . GETリクエストの場合、データを送り返さないのであれば、ステータスコードは204が適切でしょうか?404を使うべきでしょうか、それとも成功のために200にこだわるべきでしょうか、しかし空のレスポンスがあるのでしょうか?

その ユースケース この質問のために、私はGoogle App Engine用に書いているJavaアプリケーションです。私はサーブレットにリクエストを送信していますが、クライアントに戻って送信されるデータは、HTTPレスポンスの代わりにチャネルAPIソケットを介して送信されます。現在、私のクライアントは、リクエストボディにコンテンツを持たないPOSTを送信し、サーブレットから戻ってくる204応答を待ってからChannel APIソケットをポーリングしています。リクエストのボディでデータが送信されないので、私はPOSTの代わりにGETを送信することがより理にかなっているかどうか議論しています。

解決方法は?

<ブロッククオート

204 コンテンツがない

サーバーはリクエストを処理しましたが entity-body を返し、更新されたメタ情報を返すことを望むかもしれません。その の形で新規または更新されたメタ情報を含んでもよい(MAY)。 エンティティヘッダがある場合は、それに関連付けるべきです。 リクエストされたバリアント

によると ステータスコード204のRFC部分 GETリクエストのための有効な選択肢のように思えます。

A 404 Not Found , 200 OK というように、本文が空で 204 No Content は全く異なる意味を持つので、適切なステータスコードを使用できないこともありますが ルールを曲げれば、いつかは自分に跳ね返ってくる。 . だから、適切なステータスコードを使用できる場合は、それを使用してください。

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

  • 他の部分(私の理解が正しければサーブレット)は、そこからいくつかのデータを取得するのではなく、アクションを実行することを望んでいます。
  • デフォルトでは、GETリクエストはURLにパラメータが存在しない場合、キャッシュ可能ですが、POSTはそうではありません。