2012-06-25 67 views
8

我有HTTP基本身份驗證服務器,我有客戶端腳本知道上述HTTP服務器的用戶名和密碼。我使用XHR請求和它的setRequestHeader來設置授權標頭,這一位避免了瀏覽器提示默認的HTTP登錄對話框。將http頭設置爲由瀏覽器生成的請求?

request.setRequestHeader('Authorization', authInfo); 

這是正常的對AJAX請求,但如果我想下載從服務器中提到的文件,我被迫去沒有AJAX和使用類似window.location.href從JavaScript瀏覽器在那裏創建請求本身。由於這個請求不包括授權頭(brwoser只會在每個請求提示登錄對話框併爲實際服務器保存登錄信息的base64後自動添加授權頭),瀏覽器會提示HTTP登錄對話框,這是我想避免的。

那麼有沒有辦法將標題設置爲非ajax由瀏覽器創建的請求?

回答

2

您是否嘗試過在URL中設置用戶名和密碼?

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

我認爲,應該在大多數瀏覽器除了工作,不幸的是,Internet Explorer 7+

或者,如果您有權訪問服務器,則可以在使用cookie進行身份驗證的服務器端放置腳本。 Cookie可以使用JavaScript進行設置。

+0

請注意,auth cookie可能被濫用[CSRF攻擊](http://en.wikipedia.org/wiki/Cross-site_request_forgery) – user123444555621

+0

謝謝,這工作。 不幸的是,我在服務器端沒有腳本解釋器,所以我不能第二種方式。 – ggat

+0

關於第一種方法只需要注意一點,是否有一種方法可以傳遞用戶:例如在base64中編碼的密碼或其他東西。 我認爲這可以通過在URL中發送base64編碼的用戶和密碼來完成,在服務器端對該字符串進行解碼並使用apache重定向到新的URL。由於這是下載用戶在瀏覽器地址欄中不會看到解碼的URL。 但我問,也許有一種本地方式來做到這一點。 – ggat