2017-09-03 8 views
12

CORSプリフライト(OPTIONS)リクエストを受信したときに、よく書かれたHTTPサーバーが返すステータスコードは何ですか?CORSプリフライトリクエストの適切なステータスコードは何ですか?

200204または他の何か?

ステータスコードがケース原点に異なるべきであるが許可され(および対応するヘッダーが設定される)、または許可されていない(とCORSヘッダーが設定されないか、または起源と一致しませんか)?

答えて

10

その要旨は、ちょうど200を使用しています。

もう少し一般的に:他のOPTIONSリクエストに返信するCORSプリフライトOPTIONSリクエストのステータスコードを返信するだけです。関連する仕様はそれ以上のものを必要とせず、推奨しません。

限り、関連する仕様:https://fetch.spec.whatwg.org/で仕様を取得するには、CORSプロトコルのための要件が​​定義されているところであり、それはステータスが範囲200でanyhingことができると言う - 299a step saying it can be any “ok status"を持ってCORS-preflight fetch algorithm、からだ

状態さん要求応答リターンの成功と応答のためのCORSチェックがok status
ある場合

は、これらのサブステップを実行します。...

「okステータス」とは何か、仕様には次のように書かれています。

OKステータスは、包含範囲200299、のいずれかの状態です。

さらに、フェッチ仕様では、200-299の特定のステータスは推奨されません。

その他の関連する仕様は、HTTP 1.1仕様であり、HTTP応答のステータスコードの意味を定義するセクションがあり、それにはa specific section that defines Successful 2xxコードが含まれています。

そして、そのセクション内これは言う、あります:

The 200 (OK) status code indicates that the request has succeeded. 
The payload sent in a 200 response depends on the request method. 
For the methods defined by this specification, the intended meaning 
of the payload can be summarized as: 
… 
OPTIONS a representation of the communications options; 

だからCORSプリフライトOPTIONSへの応答だけであることが必要である:

  • 要求が成功したことを示す指標
  • (この場合、 Access-Control-Allow-MethodsAccess-Control-Allow-Headers応答ヘッダを含む)通信オプションの
  • 表現
  • あなたはすぐそこに停止することができますので、するHTTP仕様によって定義されているもの 200 OK

the rest of the 2xx codes in that sectionを読んだ場合、204 No Contentを除いて、レスポンスの意味がないことを確認できます。

が今まで行く204 No Contentとして、私の知る限りOPTIONS応答-が、ためにそれを使用して何も間違っはありません、任意のポイントは、実際にもありません。 、HTTPの仕様は、実際にはそのためOPTIONSペイロード

  • のための使用を規定していないいくつかの他の方法のためとは異なり、クライアントは任意のペイロード(内容は)OPTIONSのために戻ってくることを期待しないでください

    • (と:それはあるためですこれまで、私は何のペイロードがありません明示的にクライアントに伝えるためにOPTIONS応じて、特定の204ステータスコードを使用しても実用的な目的はありません見ることができるように...)戻って来なかった任意のペイロードで

    を何もしないでしょう。

    私は間違っている可能性がありますが、いくつかのニュアンスがありません。しかし、私はそうは思わない。

    ステータスコードは、ケース起源で異なるべき許可され(および対応するヘッダーが設定される)、または許可されていない(とCORSヘッダーが設定されないか、または起源と一致しませんか)?

    いいえ、違いはないと思います。とにかく使用することができる200または204以外の標準定義コードはわかりませんが、それにかかわらず、仕様は異なるものである必要はなく、異なる場合は別の用途を定義しません。そして、それについて考えてみましょう。これらの2つのケースのステータスコードの相違により、既存のクライアントコードはどのように違うのでしょうか?

    この質問に対する回答が「何もありません」の場合は、私が見る限り、それを変えることに意味はありません。


    を考えると、上記のすべて、一番下の行です:ちょうどCORSプリフライトOPTIONS応答のための200 OKを送ります。ただ200 OK以外のコードを送信する必要はありません。

  • 関連する問題