2010-08-25 119 views
15

我有一些本地的html/js文件,我想通過https調用一些遠程服務器,並最終使用基本身份驗證請求。基本身份驗證與jQuery.ajax請求和jsonp

我遇到了兩個問題。首先是,如果我不爲具體的數據類型指定「JSONP」,jQuery.ajax()請求返回錯誤:

Access to restricted URI denied code: 1012

是我的請求,認爲跨域,因爲我的主要工作文件存儲在本地,而是從其他地方的服務器檢索數據?

那麼細,我更新了呼叫所以現在看起來像:

$.ajax({ 
    url: myServerUrl, 
    type: "GET", 
    dataType: "jsonp", // considered a cross domain Ajax request if not specified 
    username: myUsername, 
    password: myPassword, 

    success: function(result) 
    { 
     // success handling 
    }, 
    error: function(req, status, errThrown){ 
     // error handling 
    } 
}) 

因爲我需要使用基本身份驗證,我傳遞的用戶名/密碼,但如果我監控的要求,我不沒有看到它被設置,另外,服務器發送錯誤響應,因爲它沒有預期的信息。

此外,因爲我有jsonp集合,beforeSend不會被調用。

如何使用基本身份驗證爲此請求傳遞證書?

回答

12

簡短的版本是你不能這樣做。你的懷疑是正確的,因爲你是本地的,這些文件是遠程的,你不能訪問它們,你被same-origin policy阻止。解決方法是JSONP,但這似乎並不適用於您的情況...

JSONP的工作方式不同,它是一個GET請求通過<script>標籤包含獲取文件,所以你是不發送特殊的標題或任何東西。

您需要通過您所在的服務器(運行此腳本的域)或其他代理選項代理請求,但主要出於安全原因阻止從客戶端到另一個域。

+5

這是正確的答案,JSONP不能包含基本身份驗證要求的USER/PWD頭。所以你是該死的,如果你這樣做,該死的,如果你不這樣做:) – 2011-08-01 18:59:29

0

我想你將不得不添加某種服務器代理。 JSONP只是使用腳本標記的一種特殊方式。因此,它不允許設置任意標題。當然,你不能做一個跨源XHR。

7

嘗試做http://user:[email protected]。這模仿了一個基本身份驗證請求。

+2

這似乎工作,但只對一些瀏覽器。 – jhanifen 2011-06-14 04:22:55

+1

使用此語法將會阻止構建M59中的Chrom:https://www.chromestatus.com/feature/5669008342777856 – Beejamin 2017-06-30 05:41:12