簡體   English   中英

從瀏覽器托管的JavaScript應用到自定義服務器的跨域資源共享

[英]Cross-Origin Resource Sharing from browser-hosted JavaScript app to custom server

我正在尋找一種方法,以允許瀏覽器托管的JS應用程序向運行在端口和(可能是)與最初服務JS應用程序的機器不同的計算機上的服務器發出請求。

我正在從Mac OS X Apache Web服務器提供一個簡單的JavaScript(HTML5)應用程序。 我希望能夠在Windows,Android和OS X上的盡可能多的瀏覽器中運行該應用程序。但是我會選擇每種應用程序。

我的JavaScript應用程序使用XMLHttpRequest來請求返回JSON的最小自定義服務器。

因此,例如,可以從http://10.0.1.3/poc/dashboard.html訪問我的JS應用

並且我的自定義服務器在同一台計算機上運行,​​偵聽端口49379 ...像這樣的請求http://10.0.1.3:49379/find?name=Fred將返回一組元組,其中“名稱”等於“ Fred” 。

如果我直接在導航工具欄中輸入此請求,那么我會得到理想的結果。

如果我在JS中提出相同的請求,則會遇到一些錯誤。

var theXHR = new XMLHttpRequest();
theXHR.onreadystatechange = onReadyStateHandler;
theXHR.open("GET", "http://" + ipAddress + ":49379/find?name=Fred", true);
theXHR.setRequestHeader("User-Agent", "XMLHTTP/1.0");
theXHR.send(null);

我收到以下兩個錯誤:

  1. 拒絕設置不安全的標題“ User-Agent”

  2. XMLHttpRequest無法加載http://10.0.1.3:49379/find?name=Fred Access-Control-Allow-Origin不允許使用來源http://10.0.1.3

我可以控制Apache服務器,JavaScript和自定義服務器。 這只是概念證明,將在隔離的網絡上進行演示。 因此,我不關心安全問題。

另外,我在Chrome,Firefox,Safari中運行。 所有這些似乎都使用XMLHttpRequest2對象。

我發現解決CORS的方法是使用jsonp-帶有回調函數的$.getJSON我從未將它與XMLHttpRequest一起使用,但是它可與$.getJSON類的jQuery ajax函數$.getJSON 在您的url查詢字符串中,只需添加參數jsoncallback=? 瞧,不再有CORS問題了。 $.getJSON將其success參數動態分配給回調函數。

暫無
暫無

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

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