簡體   English   中英

jQuery ajax調用https URL時訪問被拒絕錯誤

[英]Access is Denied error on jQuery ajax call to https URL

我正在嘗試設置一個客戶端腳本,以對另一個域上的Web服務進行Ajax調用,以使Web服務的復雜性變為HTTPS。 該服務是MVC4 WebApi(REST)。 客戶端腳本也從HTTPS域運行。 嘗試撥打電話時,出現“訪問被拒絕”錯誤。 例如,我有一個腳本運行在https://domain_a.com/clientpage/script.js並調用https://domain_b.com/serviceapi/method/,Ajax錯誤回調報告“訪問被拒絕”錯誤。 我采用了這種精確的方案,並在混合使用中不使用SSL的情況下進行了測試,因此將http轉換為http,然后進行ajax調用也可以,我還設置了$ .support.cors = true,還嘗試了ajax選項中的crossDomain:true。 這應該與https一起使用嗎?我是否缺少某些內容?或者這根本行不通嗎? 有什么建議么?

這是我的ajax調用的示例:

$.support.cors = true;

$.ajax({
   url: requestURL,
   crossDomain: true,
   type: "GET",
   headers: { "Authentication": "user@domain.com:" + hashcode },
   data: "{}",
   contentType: "application/json; charset=utf-8",
   dataType: "json",
   success: function (data) {
      alert("call succeeded");
   },
   error: function (response) {
      alert("call failed");
   }
});

jQuery版本:1.10.2
瀏覽器:IE9(希望它可以與多種瀏覽器一起使用:chrome,firefox,safari)
Web服務:MVC4 WebAPI .NET 4.5

更新:

我進行了更多測試,並排除了Web服務的問題,它似乎是基礎xmlhttprequest對象或瀏覽器的問題。 我在測試https到https場景時運行了提琴手(提琴手設置為解密https流量,並且對此進行了測試),當我嘗試進行ajax調用而失敗時,則沒有任何流量。 這使我相信它的瀏覽器。 這是我測試過的場景和結果的列表:
http到http,相同域:成功
http到http,不同的域:成功
https到https,相同的域:成功
https到https,不同的域:失敗。 <<-我希望這將是Web服務使用的最常見方案之一,某些ISV使從其他域調用該服務的客戶可以使用該服務,並且他們希望使用SSL。

有時,在開發環境中進行開發時,大多數公司不會花錢購買ssl證書,而是使用自簽名證書,這會導致瀏覽器拋出警告的紅色大屏幕,您必須繼續。 在Chrome中,我知道您使用iframe進行此類操作時,除非我在該會話期間接受證書,否則它會使iframe窗口崩潰。

這樣說來,您確定domain_b.com具有有效的ssl證書嗎? 您是否在瀏覽器會話中接受了SSL證書? 您可以通過從ajax調用中手動復制URL,將其粘貼到窗口中並訪問它來進行測試。 接受證書后,它將開始工作。

您可能會看到這樣的圖像:

在此處輸入圖片說明

如果是這樣,請單擊繼續

我沒有直接解決在https上調用跨域的問題,但是我確實提出了一種在我的情況下可以接受的解決方法:我沒有嘗試直接從客戶端調用跨域,而是建立了一個Web服務,該服務位於客戶端和另一個域上的服務器之間。 Web服務與客戶端在同一域上,因此客戶端可以毫無問題地調用此服務。 然后,Web服務使用標准的HTTP通信將請求發送到遠程服務器並接受響應,然后將響應返回給客戶端。 基本上,本地Web服務的作用類似於客戶端和遠程服務器之間的代理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM