Pregunta ¿Cómo asignar el encabezado de autenticación básica a XMLHTTPREQUEST?


He leído muchas respuestas de verificación previa y CORS, así que no publique enlaces que hagan referencia a lo que debería leer. Muchas de las respuestas son desde una perspectiva de servidor, pero yo soy el cliente en este caso. ¿Configuro el encabezado de origen? Mi suposición es que esta es una simple solicitud, ¿estoy en lo cierto?

 req.open("POST", url, true);
 req.setRequestHeader( 'Content-Type',   'application/blahblah' );
 req.setRequestHeader( 'Accept', 'application/blahblah' );
 req.setRequestHeader("Authorization", "Basic " + btoa(user + ":" + pass)); 
 req.send();

Sin embargo, todavía no funciona, mi error:

La respuesta a la solicitud de verificación previa no pasa la comprobación de control de acceso: No hay encabezado 'Access-Control-Allow-Origin' presente en el recurso solicitado. Por lo tanto, el origen 'nulo' no está permitido. La respuesta tenía código de estado HTTP 500.


6
2017-11-03 17:09


origen


Respuestas:


Si quieres configurar el encabezado de autorización

req.setRequestHeader('Authorization','Basic ' + Base64StringOfUserColonPassword);

11
2017-11-03 17:15



Solución:

req.setRequestHeader('Authorization', 'Basic [base64 encoded password here]' );

5
2017-11-06 18:11



Esta publicación es antigua, pero responde para cualquier otra persona que se encuentre con ella.

No hay nada incorrecto con su encabezado de autorización. El problema al que se enfrenta es relacionado con CORS.

No configura el encabezado Origin usted mismo. El navegador hace eso por ti. Si su origen es nulo, entonces sospecho que esto se debe a que está ejecutando su código de file:/// en lugar de http://.


4
2017-08-01 16:19



Si usa esto para una solicitud de API, al agregar el encabezado Authorization primero hará que XMLHttpRequest envíe una solicitud OPTIONS, que algunas API pueden denegar.

Para evitar esto, también puedes hacer:

var invocation = new XMLHttpRequest();
invocation.open("GET", url, true, username, password);
invocation.withCredentials = true;

Lo cual agregará el encabezado Authorization y también evitará la solicitud de verificación previa.


2
2018-04-24 10:04