2012-06-25 19 views
12

obtenido este mensaje de error: Refused to set unsafe header "Origin"se negó a fijar cabecera insegura "Origen" cuando se utiliza XMLHTTPRequest de Google Chrome

Utilizando 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?

He intentado eliminar la llamada receiveReq.setRequestHeader("Origin", ...) pero entonces Google Chrome lanza un error de acceso en mi receiveReq.open() llamada ...

¿Por qué?

Respuesta

14

Esto es sólo una suposición, ya que uso jquery para solicitudes de AJAX, incluido CORS.

Creo que se supone que el navegador configura el encabezado, no usted. 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 verifique si el navegador los configura por usted.

+0

Sí: simplemente elimine el código que establece el encabezado de solicitud "Origen" - ¡funciona muy bien para mí! –

-6

¿Está trabajando en varios dominios?

Trate solución Brian S o intente esto:

en lugar de establecer a localhost sólo tiene que pasar nada ... y ver qué pasa.

receiveReq.setRequestHeader("Origin", "*"); 
+1

Se negó a establecer el encabezado inseguro "Origen" –

6

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 soporta CORS es capaz de responder adecuadamente y permitir/denegar la solicitud, proporcionando CORS cabeceras de respuesta específicos como

Access-Control-Allow-Origin: * 

Tenga en cuenta que Chrome es muy restrictiva sobre 'localhost' nombre de host. (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'. Así, por ejemplo, no accede a su sitio como:

http://localhost:port/myappname 

En lugar de usar:

http://mymachinename:port/myappname 

o

http://mymachinealias:port/myappname 

Para más detalles por favor, compruebe specification.

Cuestiones relacionadas