2012-08-13 28 views
53

HTTP OPTIONSメソッドは、サーバーが特定のリソースでサポートする他の方法を決定するために使用されています。それで、2つの質問があります:HTTP OPTIONSリクエストに応答するにはどうすればよいですか?

  • このレスポンスはどのようなものですか? PublicAllow、さらにはAccess-Control-Allow-MethodsヘッダーのCSVリストの例を見てきました。彼らはすべて必要ですか?違いは何ですか? RFC 2616はここではあまり役に立ちません。

  • これは、リソースが非REST-API環境でサポートするアクションをリストするのに適していますか?例えば、私のConversionControllerアクションconvertを、サポートしている場合だろう、このメイク感覚のような応答:

要求:

OPTIONS /conversion HTTP/1.1 

応答:RFC 2616で定義されて

HTTP/1.1 200 OK 
... 
Allow: CONVERT 
... 
+0

'Allow:CONVERT' ?? – Pacerier

答えて

13

は "許可" (http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.14.7)。 「Public」はもう使用されていません。 「Access-Control-Allow-Methods」は、CORS仕様で定義されています(http://www.w3.org/TR/cors/参照)。

+0

ご清聴ありがとうございます。 CORSの場合は、 'Allow'と' Access-Control-Allow-Methods'の両方を送信すべきですか? – FtDRbwLXw6

+0

私は常に「許可」を返すので、特別なケースのCORSはありません。 –

+3

コンテンツについてはどうですか?本文のコンテンツを利用できるか – CMCDragonkai

5

タイトルへの回答:「HTTP OPTIONS要求に応答する方法」それに答えるために、私はあなたがOPTIONSリクエストに応えたい理由を知りたいのですが?誰があなたにOPTIONSリクエストを送信していますか、なぜですか? Many public servers respond with some form of "error" or "not allowed"(500,501,405)。したがって、クライアントがOPTIONSリクエストを合理的に送信し、有用で有意義な情報(WebDAV、CORSなど)を返すような特定の状況にない場合は、おそらく「それはしないでください」と返答したいと考えています。

"OPTIONS/conversion HTTP/1.1"リクエストに関するご質問:あなたのサーバーのクライアントがあることが分かっていない場合は、OPTIONS要求を "/ conversion"に送信し、 「許可する:コンバート」と答えた場合、そのような回答は理にかなっていません。私は、ほとんどの実装がを実行すると、はOPTIONSをサポートし、 "許可"で応答すると、標準のHTTPメソッドで応答すると思います。

Here's a great article on the topic

要約:OPTIONSはキャッシュをサポートしていないため、すぐに問題があります。代替方法:サーバー全体のメタデータ:well-known URI'sを試してください。リソース固有:レスポンスにLink headerを使用するか、そのリソースの表現形式のリンクを使用してみてください。

最後に、お手数ですがWADLまたはRSDLをご覧ください。

EDIT:

dotnetguyは以下のコメントで良い点を作る:オプションは、特定のコンテキスト(例えば、CORS)に紛れもなく貴重です。私は確かに他に示唆することを意味しませんでした。

+3

この記事は、権限と権限では良いですが、「なぜ、HTTPbisがOPTIONSを残しているのですか」のセクションを参照してください。 CORSでは、特にJavaScriptベースのWebアプリケーションからAPIを使用する場合、RESTシステムはOPTIONSに応答できるはずです。 JSフレームワークでは、実際のHTTP呼び出しの前に「プリフライト」オプションを要求するのが一般的です。 – dotnetguy

+0

macOS Finder([Webdavを使用しています)(http://www.webdav.org)から自分自身の(http://www.webdav.org)httpサーバに接続すると、OPTIONSリクエストが表示されました。 – Joe

関連する問題