2016-12-19 28 views
0

我有兩個子域(我們託管的一個站點,我們沒有) - 它們都有SSL證書。如何在JavaScript中調用不同子域上的API/Jquery

  1. api.mydomain.co.uk
  2. test.mydomain.co.uk

(我們不使用無效的證書,但同一個域託管域),我有一個AJAX(我們確實有一個有效的SSL證書託管域)請致電test.mydomain.co.ukapi.mydomain.co.uk。現在很明顯,我得到了一個沒有'訪問控制 - 允許 - 來源'標題出現在所期望的資源錯誤上。

但是後來把document.domain = "mydomain.co.uk"放在test.mydomain.co.uk的代碼裏。

我認爲這將解決問題(我從來沒有這樣做過,但是),因爲它是一個子域。所以我的問題是 - 是無效SSL導致問題,還是我需要做更像CORS等東西?

+0

這可以通過添加cors – astroanu

回答

0

是的,你需要在你的子域上配置cors,使其表現得像api。假設你的頁面是從test.mydomain.co.uk請求的,所有對test.mydomain.co.uk的ajax調用都來自同一個源,所以不需要CORS配置。

當您嘗試打電話給api.mydomain.co.uk時,它會將其視爲另一個起源,即使它是相同的域也很難,所以您必須將其配置爲接受CORS請求。你可以在你的NGINX,節點或者你使用的任何網絡服務器上進行。

下面介紹如何在NGINX上做到這一點。 http://enable-cors.org/server_nginx.html

+0

完成嗨,我的印象是文檔域可以在同一個域上工作。情況並非如此。我問的原因是我們不控制調用api的域名,所以我希望有一個不涉及服務器端代碼的解決方案,因爲我不知道需要多長時間才能完成這個任務!如果CORS是唯一的,也是最重要的最安全的方式,那就沒有問題。 – user1102550

+0

嗨,只是爲了增加(回答我自己的問題多一點) - 我做了一些更多的研究,似乎在這裏指出,JavaScript域更多的是客戶端子域交互(例如Iframes)而不是調用服務器端資源通過AJAX,CORS是Magus指出的首選方法。這裏是一個鏈接https://stackoverflow.com/questions/15563611/why-doesnt-setting-document-domain-work-to-allow-ajax-requests-to-a-parent-doma – user1102550

+0

不,你指出的那篇文章指的是在PHP代碼上添加訪問控制標題來製作CORS。 CORS是一個婊子,因爲瀏覽器的保護,它是必要的,鉻塊阻止所有不符合這些標準的請求。對於開發艱難,你可以使用這個擴展:https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi – Magus

相關問題