5

ちょっと 3xx レスポンスを無視して、なぜ HTTP ロケーション ヘッダーが POST リクエスト/201 (Created) レスポンスと組み合わせてのみ使用されるのか疑問に思います。

RFC 2616 仕様から:

201 (Created) 応答の場合、Location はリクエストによって作成された新しいリソースの場所です。

これは広くサポートされている動作ですが、他の HTTP メソッドで使用しないのはなぜでしょうか? 例として、 JSON API 仕様を取り上げます。

JSON ペイロード内の現在のリソースの自己参照リンクを定義します ( RESTful API では珍しくありません)。このリンクはすべてのペイロードに含まれています。仕様では、 POST を介して新しいドキュメントを作成する場合は HTTP ロケーションヘッダーを含める必要があり、その値はペイロード内の自己参照リンクと同じであると記載されていますが、これはPOST にのみ必要です。HTTP ロケーション ヘッダーだけを使用できるのに、自己参照リンクのカスタムフォーマットにわざわざこだわる必要はありません。

注: これは JSON API に固有のものではありません。HALJSON ハイパースキーマ、またはその他の標準でも同じです。

注 2: HTTP リンク ヘッダーと同じであるため、HTTP ロケーション ヘッダーに固有のものではありません。JSON API を見るとわかるように、HAL と JSON ハイパースキーマは、自己参照リンクの規則を定義するだけでなく、関連するリソースやリソースの可能なアクションに関する情報を表現します。しかし、それらはすべて HTTP リンク ヘッダーを使用できたようです。(HTTP ロケーション ヘッダーを使用したくない場合は、自己参照リンクを HTTP リンク ヘッダーに入れることもできます。)

怒鳴りたくはありませんが、ある種の「車輪の再発明」のようです。また、非常に制限されているようです: HTTP ロケーション/リンク ヘッダーのみを使用する場合、HTTP 受け入れヘッダーで JSON、XML、またはその他を要求しても問題はなく、リソースに関する有用なメタ情報を取得できます。 JSON API、HAL、または JSON ハイパースキーマを使用する場合、HEAD リクエストにはリンクが含まれません。

4

2 に答える 2

8

ヘッダーのセマンティクスはLocation、自己参照リンクのセマンティクスではなく、ユーザー エージェントがリクエストを完了するためにたどる必要があるリンクのセマンティクスです。これはリダイレクトでは理にかなっています。また、新しい場所にある新しいリソースを作成するときは、そこに移動する必要があります。リクエストがすでに完了している場合、つまり必要なリソースの完全な表現がすでにある場合、 を返すのは意味がありませんLocation

Linkヘッダーはハイパーテキスト リンクと意味的に同等であると見なされる場合がありますが、メディア タイプがハイパーメディアに対応していない場合、特定のリソースに関連するメタデータを参照するために使用する必要があるため、関連するリソースへのリンクの機能を置き換えません。RESTful API で。

リソース表現でのカスタム リンク形式の必要性は、基になる実装とプロトコルからリソースを分離する必要性に固有のものです。REST は HTTP と結合されておらず、有効な URI スキームがある任意のプロトコルを使用できます。すべてのリンクにヘッダーを使用することにした場合はLink、HTTP に結合しています。

クライアントがたどる FTP リンクを提示するとします。その場合はどこになりますLinkか?

于 2014-06-04T16:31:23.753 に答える
6

Location ヘッダーの意味は、ステータス コードによって異なります。201 の場合、新しく作成されたリソースにリンクしますが、3xx リクエストでは複数の (似たような) 意味を持つ場合があります。それが、他の用途では一般的に避けられている理由だと思います。

もう 1 つの方法は、常に一貫した意味を持つ Content-Location ヘッダーです。クライアントに、要求したリソースの正規 URL を伝えます。これは純粋に情報提供のみを目的としています (クライアントによって処理されることが期待される Location とは対照的です)。

そのため、Content-Location ヘッダーは自己参照リンクによく似ているように見えます。ただし、 Content-Location には、 PUT および POST の動作も定義されていません。こちらも使用頻度は少ないようです。

このブログ投稿Location vs Content-Locationは良い比較です。ここに引用があります:

最後に、どちらのヘッダーも汎用リンク用ではありません。

要するに、本体に標準化された自己リンクを要求することは良い考えのようです。クライアント側での多くの混乱を回避します。

于 2014-06-04T22:49:12.430 に答える