2011-12-01 12 views
7

私はbackbone.jsのモデルを使用しています。モデルを保存すると、HTTP OPTIONSメソッドがfirefoxのサーバー側に送信されますが、HTTP POSTメソッドが送信されます。JavascriptリクエストのHttpオプションメソッド

私はそれはそれはCORSについてです、BACKBONE.JS程度問題ではありません知っています。私はちょうどメソッド、GET、POST、PUTとDELETEサーバー側で、私はHTTP OPTIONSメソッドで仕事をしないかどうかを確認します。

は私の要求されたURLが私のAPIです:api.foo.com から要求されたAPI:そうbar.com

、どのように私はすべてのブラウザで制御することができますHTTP POSTとOPTIONSを私api.foo.comしない要求? 他のドメインからのすべてのリクエストでapi.foo.comのコンテンツをどのように共有できますか?

注:アクセス制御 - 許可 - 起源::私はすでにに、サーバ側から応答のヘッダーを変更しました*

答えて

7

をOPTIONS要求が実際にそうpreflight request of the CORS specificationと呼ばれています。このプリフライトリクエストは、Webブラウザーがサーバーがそれぞれの起点からの要求を受け入れる条件を確認するために使用されます。プリフライト要求に対する応答が満足であれば、ブラウザは実際の要求を送信します。

だから、この仕様に準拠するために、あなたはsteps of preflight request processingを再現するようにサーバーを必要とします。

+0

だから、どのように私は要求を受け入れるどのような条件の下で、サーバーをチェックしないようにブラウザを設定することができますか?それはすべての投稿要求の前にチェックしますか?なぜなら、私のJavaScriptを実行するすべてのブラウザに、私のサーバー側のスクリプトにちょうどPOSTメソッドを送るからです。 –

+0

@davitできません。セキュリティ上の理由([CSRF](https://www.owasp.org/index。))のため、元のXHR(http://www.w3.org/TR/XMLHttpRequest/)では発信元からの要求ができませんでした。 php/Cross-Site_Request_Forgery))。 [XHR level 2](http://www.w3.org/TR/XMLHttpRequest2/)では、CORS仕様に準拠することが可能でしたが、これを可能にしました。 – Gumbo

+0

@davit GETは[シンプルな方法](http://www.w3.org/TR/cors/#simple-method)と呼ばれていますが、[単純なクロスオリジン要求](http:// www .w3.org/TR/cors /#simple-cross-origin-request)は* force preflightフラグ*が偽(つまり* XMLHttpRequestUpload *要求ではない)で他のヘッダフィールドがない場合にのみ可能ですリクエストでは[単純なヘッダーフィールド](http://www.w3.org/TR/cors/#simple-header)よりも優先されます。 – Gumbo

関連する問題