2012-03-09 36 views
5

我試圖允許訪問我網站上的每個子域以允許跨子域AJAX調用。有沒有指定像*.example.com或交替網站的所有子域的方式,爲什麼下面不工作時,我列出了多個域名:指定具有訪問控制的多個子域名Origin

header('Access-Control-Allow-Origin: http://api.example.com http://www.example.com'); 

我走過這似乎是類似以下問題閱讀,如果不是這個一樣的,除了我想要訪問子域的事實,這一個是指一般的域。

Access-Control-Allow-Origin Multiple Origin Domains?

如果上面的問題是解決這個問題,那麼我怎麼能夠檢索從標題的由來。看起來$ _SERVER ['HTTP_ORIGIN']是非常不可靠的,甚至沒有跨瀏覽器。我需要能夠在任何瀏覽器中查看可能會在嘗試使用JavaScript發送AJAX調用時顯示錯誤的來源。

+0

正如你所說,你的問題的第一部分是在鏈接中回答。關於第二個問題:如果瀏覽器嘗試跨域策略禁止的Ajax調用,則請求將失敗,根本無法訪問服務器。該錯誤將不得不在瀏覽器中處理。 – 2012-03-09 09:03:05

+0

我知道我會收到一個錯誤,但是在調用嘗試訪問外部文件之後將會提供此錯誤。如果文件拒絕它,那麼錯誤將被拋出。如果我設置頭允許訪問所有的話,它會工作,但這對我來說太開放了,所以我想將它設置爲與請求的來源有關。因此,我想知道如何使用PHP獲取請求的來源。 – 2012-03-09 10:02:36

+0

你能詳細說明你的意思嗎「$ _SERVER ['HTTP_ORIGIN']是非常不可靠的,甚至沒有跨瀏覽器」? $ _SERVER ['HTTP_ORIGIN']是一個服務器端的值,不會在瀏覽器中執行。 – monsur 2012-03-09 19:42:54

回答

18

此問題的解決方案是使用$ _SERVER ['HTTP_ORIGIN']變量來確定請求是否來自允許的域。它然後設置這個:

header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); 
-2

這裏是你的問題的好文章: http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

如果這還不夠好,或不工作,要麼你需要一個像這樣的代理: https://raw.github.com/cowboy/php-simple-proxy/master/ba-simple-proxy.php

然後就可以調用代理與參數如: http://www.example.com/ba-simple-proxy.php?url=https://api.example.com

+0

「這是一個關於您的問題的好文章」 - 該文章根本沒有解決這個問題。 – Quentin 2018-02-08 09:48:02

+0

「如果這樣做不夠好或不起作用,您需要像這樣的代理服務器」 - 否。不需要代理服務器。看到接受的答案。 – Quentin 2018-02-08 09:48:21

相關問題