7

RESTful Webサービスでは、 HTTP 303を使用して、クライアントをリソースの正規表現にリダイレクトすることを推奨しています。のコンテキストでのみトピックについて説明しますHTTP GET

これは他のHTTPメソッドにも当てはまりますか?クライアントが非正規URIに対してHTTP PUTまたはを試行した場合、 HTTP 303を返すことは許容されますか(および/または推奨されますか)?DELETEベストプラクティスとその理由は何ですか?

4

2 に答える 2

8

このステータス コードは、通常、すべての HTTP メソッドに適用されます。これは主に、POST アクションの出力がユーザー エージェントを選択されたリソースにリダイレクトできるようにするために使用されます。これにより、POST 応答に対応する情報が元のリソースとは別に識別、ブックマーク、およびキャッシュできる形式で提供されるためです。リクエスト。

ソース: https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-p2-semantics-21#section-7.4.4

于 2012-11-30T09:41:32.747 に答える
6

本の中で興味深いセクションを見つけました。378ページのセクションによると302 ("Found")

このステータス コードは、ほとんどのリダイレクト関連の混乱の最終的な原因です。307 (「一時的なリダイレクト」) と同じように処理されるはずです。実際、HTTP 1.0 では、その名前は「Moved Temporarily」でした。残念ながら、実際にはほとんどのクライアントが 302 を 303 (「See Other」) と同じように処理します。この違いは、クライアントがPUT、POST、または DELETE要求に応答して 302 を受け取ったときに何をすべきかによって異なります。詳細に興味がある場合は、以下の 307 のエントリを参照してください。

このあいまいさを解決するために、HTTP 1.1 ではこの応答コードの名前が「Found」に変更され、応答コード 307 が作成されました。

つまり、HTTP 302 は HTTP 303 と 307 に分割されました。次に、380 ページのセクション307 ("Temporary Redirect"):

サーバーが表現を送信することだけが要求される GET 要求の場合、このステータス コードは 303 (「See Other」) と同じです。307 が GET に対する適切な応答である典型的なケースは、サーバーがクライアントをミラー サイトに送信する場合です。ただし、POST、PUT、および DELETE リクエストの場合は、リクエストに応じてサーバーが何らかのアクションを実行することが期待されるため、このステータス コードは 303 とは大きく異なります。

POST、PUT、または DELETEに応答する 303 は、操作は成功したが、応答のエンティティ ボディがこの要求と共に送信されていないことを意味します。クライアントが応答のエンティティ ボディを必要とする場合は、別の URI に対して GET 要求を行う必要があります。POST、PUT、または DELETE に応答する 307 は、サーバーが操作を実行しようとさえしていないことを意味します。Locationクライアントは、ヘッダーの URI に要求全体を再送信する必要があります。

つまり、HTTP POST、PUT、DELETE は HTTP 303、307 で有効です。上記の段落では、予想される動作について説明しています。

そうは言っても、私はここで本を引用していますが、HTTP 仕様 (予想される動作について疑わしいほど沈黙しています) ではありません。

于 2012-11-29T23:59:22.153 に答える