簡體   English   中英

JavaScript中的跨域數據訪問

[英]Cross-domain data access in JavaScript

我們在我們的網絡上托管了一個ASP.Net應用程序,並向特定客戶端公開。 該客戶希望能夠將自己服務器中的數據導入我們的應用程序。 使用HTTP請求檢索數據並進行CSV格式化。 問題是他們不想將他們的服務器暴露給我們的網絡,並且要求在客戶端進行導入(所有客戶端都來自與他們的服務器相同的網絡)。

所以,需要做的是:

  1. 他們從我們的服務器請求導入頁面
  2. 頁面上的客戶端腳本向其服務器發出請求以獲取CSV格式的數據
  3. 數據將發送回我們的應用程序

當兩個服務器位於同一個域時,這不是一個挑戰:一個簡單的隱藏iframe或類似的東西可以解決這個問題,但在這里我得到的是跨域“訪問被拒絕”錯誤。 他們還拒絕更改數據格式以返回JSON或XML格式的數據。

到目前為止我嘗試和學到的是:

  1. 隱藏的iframe - “訪問被拒絕”
  2. XMLHttpRequest - 行為取決於瀏覽器安全設置:可能有效,可能在用安全警告嘮叨用戶時工作,或者可能根本無法工作
  3. 動態腳本標記 - 如果它們可以以JSON格式返回數據,則會起作用
  4. IE客戶端數據綁定 - 相同的“訪問被拒絕”錯誤

在放棄之前還有什么我可以嘗試的,並且說如果不將他們的服務器暴露給我們的應用程序,改變他們的數據格式或改變他們的瀏覽器安全設置是不可能的嗎? (順便說一句,DNS技巧不是一個選項)。

如果JSONP可以以JSON格式提供服務數據,那么JSONP可能就是您的最佳選擇。 除此之外,您將始終遇到跨域調用的同源策略問題。 您是否考慮過執行服務器端調用來向其服務器發出HTTP請求?

對於您的客戶來說可能為時已晚,但由於您可以控制這兩個域,因此您可以嘗試使用EasyXDM 它是一個包含跨瀏覽器怪癖的庫,它提供了一個易於使用的API,用於使用該瀏覽器的最佳可用機制在不同域之間的客戶端腳本中進行通信(例如,如果可用,則為postMessage,否則為其他機制)。

警告:您需要控制兩個域才能使其工作(“控制”意味着您可以在兩個域上放置靜態文件)。 但是您不需要任何服務器端代碼更改。

您的客戶端是您的應用程序提供的JavaScript,對吧?

然后,您的客戶端只能向您的applciation發送請求(跨站點腳本防護),您看到的錯誤是什么?

假設是,那么解決方案是讓您的應用程序提供“代理”服務。 您的瀏覽器代碼可以向您的服務器詢問一些數據。 您的服務器可以自由地向它喜歡的任何服務器發出Http請求(沒有瀏覽器對象)。 因此,您可以實現一些小服務來獲取cvs數據並將其呈現給您的應用程序。

如果您的客戶正在使用它,您甚至可以選擇將該CSV數據映射到JSON。

你不能只在他們的服務器上托管JS文件嗎? 這應該允許該文件中的腳本將ajax調用回服務器。

你可以試試閃光燈。 如果你將這個yourdomain.com/crossdomain.xml放在你的root中,你就可以從mysite.com發出跨域請求。

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="www.mysite.com" to-ports="25" />
</cross-domain-policy>

暫無
暫無

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

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