¿Cómo asignar una cabecera de autenticación básica a XMLHTTPREQUEST?

He leído muchas respuestas de preflight y CORS así que por favor no publique enlaces haciendo referencia a lo que debo leer. Muchas de las respuestas son desde la perspectiva de un servidor, pero yo soy el cliente en este caso. ¿Debo configurar el encabezado de origen? Mi suposición es que se trata de 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 'Access-Control-Allow-Origin' header is present on the requested resource. Por lo tanto, no se permite el acceso a Origin 'null'. La respuesta tiene el código de estado HTTP 500.

Si desea establecer el encabezado de autorización

req.setRequestHeader('Authorization','Basic ' + Base64StringOfUserColonPassword);
Comentarios (5)
Solución

Solución:

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

Si utiliza esto para una petición API, añadir la cabecera Authorization hará que XMLHttpRequest envíe primero una petición OPTIONS, que puede ser denegada por algunas APIs.

Para evitar esto, también puede hacerlo:

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

Lo que añadirá la cabecera de autorización y también evitará la solicitud de verificación previa.

Comentarios (1)