2012-06-25 12 views
8

Tengo un servidor con autenticación básica HTTP y tengo un script de cliente que conoce el nombre de usuario y la contraseña del servidor HTTP anterior. Utilizo la solicitud XHR y es setRequestHeader para establecer los encabezados de Autorización, este bit evita que el navegador solicite el cuadro de diálogo de inicio de sesión de HTTP predeterminado.Establecer encabezados http para las solicitudes generadas por el navegador?

request.setRequestHeader('Authorization', authInfo); 

Esto es normal para AJAX pide, pero en caso de que quieren archivo desde el servidor mencionado descarga y yo estoy obligado a ir sin AJAX y usar algo como window.location.href desde JavaScript en el navegador crea propia solicitud. Dado que esta solicitud no incluirá encabezado de autorización (brwoser agregará el encabezado de autorización para cada solicitud automáticamente solo después de que solicite el diálogo de inicio de sesión y guarde base64 de información de inicio de sesión para el servidor real), el navegador solicitará el diálogo de inicio de sesión HTTP, que quiero evitar.

¿Hay alguna forma de establecer encabezados no ajax solicitudes creadas por el navegador?

Respuesta

2

¿Has probado a configurar el nombre de usuario y la contraseña en la URL?

location.href = 'http://user:[email protected]/path/to/download'; 

creo que debería funcionar en la mayoría de los navegadores, excepto, por desgracia, Internet Explorer 7+.

Alternativamente, si tiene acceso al servidor, podría poner una secuencia de comandos en el lado del servidor que utiliza cookies para autenticarse. Las cookies se pueden establecer con JavaScript.

+0

Tenga en cuenta que las cookies de autenticación pueden ser objeto de abuso por [ataques CSRF] (http://en.wikipedia.org/wiki/Cast-site_request_forgery) – user123444555621

+0

Gracias, esto funcionó. Desafortunadamente, no tengo ningún intérprete de guiones en el lado del servidor, así que no puedo hacerlo por segunda vez. – ggat

+0

Solo una nota sobre el primer enfoque, ¿hay alguna manera de pasar al usuario? Contraseña codificada en base64 o algo así. Creo que esto se puede hacer enviando, por ejemplo, usuario codificado base64 y contraseña en URL, decodificando esta cadena en el lado del servidor y redireccionando en una nueva URL con apache. Dado que este es el usuario de descarga, no verá la URL decodificada en la barra de direcciones de los navegadores. Pero estoy preguntando quizás haya una manera nativa de hacer esto. – ggat

Cuestiones relacionadas