2013-03-25 7 views
20

Я получил этот код:Почему 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?

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

+0

Глагол OPTION используется для отправки запроса предварительной проверки для проверки с сервером для отправки запроса перекрестного домена. Поскольку источник -> 127.0.0.1:8031 и host -> localhos: 3t – kiran

ответ

33

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

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

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

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

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

Смежные вопросы