ajax - headers - refused to set unsafe header origin
Se negó a establecer el encabezado inseguro "Origen" al usar xmlHttpRequest de Google Chrome (3)
Obtuve este mensaje de error: Se Refused to set unsafe header "Origin"
Usando este código:
function getResponse() {
document.getElementById("_receivedMsgLabel").innerHTML += "getResponse() called.<br/>";
if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
receiveReq.open("GET", "http://L45723:1802", true, "server", "server123"); //must use L45723:1802 at work.
receiveReq.onreadystatechange = handleReceiveMessage;
receiveReq.setRequestHeader("Origin", "http://localhost/");
receiveReq.setRequestHeader("Access-Control-Request-Origin", "http://localhost");
receiveReq.timeout = 0;
var currentDate = new Date();
var sendMessage = JSON.stringify({
SendTimestamp: currentDate,
Message: "Message 1",
Browser: navigator.appName
});
receiveReq.send(sendMessage);
}
}
¿Qué estoy haciendo mal? ¿Qué me falta en el encabezado para que funcione esta solicitud de CORS?
Intenté eliminar la receiveReq.setRequestHeader("Origin", ...)
pero luego Google Chrome receiveReq.open()
un error de acceso en mi llamada a receiveReq.open()
...
¿Por qué?
Esto es solo una suposición, ya que uso jquery para solicitudes ajax, incluido CORS.
Creo que se supone que el navegador debe configurar el encabezado, no tú. Si pudieras configurar el encabezado, eso vencería el propósito de la función de seguridad.
Pruebe la solicitud sin configurar esos encabezados y vea si el navegador los configura por usted.
¿Estás trabajando en dominios cruzados?
Prueba la solución de Brian S o prueba esto:
en lugar de establecerlo en localhost simplemente pasa algo ... y ve lo que sucede.
receiveReq.setRequestHeader("Origin", "*");
En CORS, el código de llamada no tiene que hacer ninguna configuración especial. Todo debe ser manejado por el navegador. El trabajo del servidor es decidir si la solicitud debe permitirse o no. Por lo tanto, cada vez que realiza una solicitud que infringe la política SOP, el navegador intentará realizar una solicitud CORS (agregará automáticamente el encabezado Origen y posiblemente realizará una solicitud de verificación previa si está utilizando algunos encabezados / métodos / tipos de contenido inseguros ) Si el servidor admite CORS, responderá correctamente y permitirá / rechazará la solicitud proporcionando encabezados de respuesta específicos de CORS, como
Access-Control-Allow-Origin: *
Tenga en cuenta que Chrome es muy restrictivo con el nombre de host ''localhost''. (Al menos fue cuando estaba trabajando con eso). En su lugar, use el nombre de su computadora o asígnele otro alias en el archivo ''hosts''. Entonces, por ejemplo, no acceda a su sitio como:
http://localhost:port/myappname
En su lugar use:
http://mymachinename:port/myappname
o
http://mymachinealias:port/myappname
Para más detalles verifique la especificación .