Porque é que o HttpRequest está a enviar o verbo opções em vez de POST?

tenho este código:

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));
Mas, em vez de enviar o verbo POST, quando o vejo em fiddler, Vejo isto:
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

Como pode ver, está a usar o verbo opções em vez de POST?

O que se passa?

Author: Shailen Tuli, 2013-03-25

1 answers

O verbo OPTIONS é um pedido de pré-voo enviado por alguns navegadores para verificar a validade dos pedidos de origem cruzada. Praticamente verifica com o servidor que o Origin(requisidor) está autorizado a fazer a requisição de um recurso especificado. Além disso, dependendo de quais os cabeçalhos são enviados de volta pelo servidor, ele permite ao navegador saber quais os cabeçalhos, métodos e recursos que a origem é permitida para solicitar o formulário do servidor.

O navegador envia o pedido de opções, então se o servidor responder de volta com os cabeçalhos corretos (cabeçalhos CORS) permitindo a origem para fazer o pedido, você deve ver o seu pedido POST passar depois.

Note que os cabeçalhos do CORS devem ser devolvidos tanto na resposta das opções como na resposta POST. Isso significa que seu servidor deve ser capaz de responder ao método de opções nas rotas que você deseja acessar através de domínios.

Isto é conhecido como partilha de recursos de origem cruzada. A Mozilla tem uma boa documentação sobre o assunto. https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

Se tiver mais perguntas, diga-me e eu respondo.
 34
Author: Leo Correa, 2013-03-25 00:35:31