Подтвердить что ты не робот

Почему HttpRequest отправляет глагол OPTIONS вместо POST?

Я получил этот код:

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

Как вы можете видеть, он использует глагол OPTIONS вместо POST?

Что происходит?

4b9b3361

Ответ 1

Глагол OPTIONS - это предпродажный запрос, посланный некоторыми браузерами для проверки достоверности запросов на перекрестный поиск. Он довольно много проверяет с сервером, что Origin (requester) разрешено сделать запрос для указанного ресурса. Кроме того, в зависимости от того, какие заголовки отправлены обратно сервером, он позволяет браузеру знать, какие заголовки, методы и ресурсы можно запросить у источника, чтобы создать сервер.

Браузер отправляет запрос OPTIONS, а затем, если сервер отвечает с правильными заголовками (заголовки CORS), разрешающими отправку источника, вы должны увидеть ваш запрос POST.

Обратите внимание, что заголовки CORS должны быть возвращены как для ответа OPTIONS, так и для ответа POST. Это означает, что ваш сервер должен иметь возможность отвечать на метод параметров на маршрутах, к которым вы хотите получить доступ через домены.

Это называется совместным использованием ресурсов Cross-origin. У Mozilla есть довольно хорошая документация по этому вопросу. https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

Если у вас появилось больше вопросов, дайте мне знать, и я отвечу на них.