web-dev-qa-db-ja.com

HttpRequestがPOSTではなくOPTIONS動詞を送信するのはなぜですか?

私はこのコードを手に入れました:

var req = new HttpRequest();
req.open("POST", "http://localhost:8031/rest/user/insert");
req.setRequestHeader("Content-type", "application/json");
req.send(json.stringify(user_map));

しかし、POST動詞を送信する代わりに、フィドラーでそれを見ると、次のように見えます。

OPTIONS http://localhost:8031/rest/user/insert HTTP/1.1
Host: localhost:8031
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://127.0.0.1:3030
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.33 (KHTML, like Gecko) Chrome/27.0.1430.0 (Dart) Safari/537.33
Access-Control-Request-Headers: Origin, content-type
Accept: */*
Referer: http://127.0.0.1:3030/E:/grole/Dart/Clases/Clases/web/out/clases.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es-ES,es;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

ご覧のとおり、POSTの代わりにOPTIONS動詞を使用していますか?

どうしたの?

26
user2070369

OPTIONS動詞は、クロスオリジンリクエストの有効性を確認するために一部のブラウザから送信されるプリフライトリクエストです。 Origin(requester)が指定されたリソースのリクエストを許可されているかどうかをサーバーに確認します。また、サーバーから返送されるヘッダーに応じて、オリジンがサーバーから要求できるヘッダー、メソッド、およびリソースをブラウザーに通知します。

ブラウザはOPTIONSリクエストを送信し、サーバーが正しいヘッダー(CORSヘッダー)で応答して、オリジンがリクエストを実行できるようにすると、POSTリクエストが後で通過するのがわかります。

CORSヘッダーは、OPTIONS応答とPOST応答の両方で返される必要があることに注意してください。これは、サーバーが、アクセスするルートのoptionsメソッドに応答できる必要があることを意味します。ドメイン。

これは、クロスオリジンリソースシェアリングとして知られています。 Mozillaには、このテーマに関するかなり良いドキュメントがいくつかあります。 https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

他にご不明な点がございましたら、お気軽にお問い合わせください。

36
Leo Correa