2012-06-25 5 views
8

HTTP 기본 인증을 사용하는 서버가 있고 위 HTTP 서버의 사용자 이름과 암호를 알고있는 클라이언트 스크립트가 있습니다. 나는 XHR 요청을 사용하며 승인 헤더를 설정하는 데는 setRequestHeader입니다.이 비트는 브라우저가 기본 HTTP 로그인 대화 상자를 표시하지 않도록합니다.브라우저에서 생성 된 요청에 http 헤더를 설정 하시겠습니까?

request.setRequestHeader('Authorization', authInfo); 

이 AJAX에 대한 을 요청하지만 경우에 내가 언급 서버에서 파일을 다운로드 할 내가 AJAX없이 가서 브라우저가 요청 자체를 생성 곳 자바 스크립트에서 window.location.href 같은 것을 사용하도록 강요하고있어 정상입니다. 이 요청에는 Authorization 헤더가 포함되지 않기 때문에 (brwoser는 로그인 대화 상자를 표시하고 실제 서버에 대한 로그인 정보의 base64를 저장 한 후에 만 ​​모든 요청에 ​​대해 Authorization 헤더를 자동으로 추가합니다) 브라우저는 HTTP 로그인 대화 상자를 표시하여 피하고 싶습니다.

그래서 헤더를 non-ajax 브라우저로 생성 한 요청을 설정하는 방법이 있습니까?

답변

2

URL에서 사용자 이름과 암호를 설정해 보셨습니까?

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

나는 그 Internet Explorer 7+, 불행하게도 제외하고는 대부분의 브라우저에서 작동한다고 생각합니다.

또는 서버에 액세스 할 수있는 경우 쿠키를 사용하여 인증하는 서버 측에 스크립트를 넣을 수 있습니다. 쿠키는 JavaScript로 설정할 수 있습니다.

+0

[CSRF 공격] (http://en.wikipedia.org/wiki/Cross-site_request_forgery)에 대한 인증 쿠키가 악용 될 수 있습니다. – user123444555621

+0

감사합니다. 불행히도 서버 측에서 스크립트 인터프리터가 없어 두 번째 방법이 없습니다. – ggat

+0

첫 번째 접근법에 대한 단 한가지주의 사항은 사용자 : 패스워드 (패스워드)를 base64 등으로 인코딩 된 방법으로 전달하는 것입니다. URL에서 base64로 인코딩 된 사용자 및 암호를 보내고 서버 측에서이 문자열을 디코딩하고 아파치로 새 URL을 리디렉션하여이 작업을 수행 할 수 있다고 생각합니다. 다운로드 사용자이므로 브라우저 주소창에 디코딩 된 URL이 표시되지 않습니다. 하지만이 작업을 수행 할 수있는 기본 방법이 있는지 묻는 중입니다. – ggat

관련 문제