2016-06-10 152 views
4

我有3個網站,A,B和C.訪問控制允許來源htaccess

網站A有一個「test.js」javascript文件,我打電話在網站B和C. test.js文件使用XMLHttpRequest獲取站點A上單獨的「stuff.html」文件的內容,以返回到調用網站上的div。

爲了允許在剛B和C點CORS基礎上this answer on StackOverflow和其他幾個人,我把下面的.htaccess在網站目錄:

<IfModule mod_headers.c> 
    SetEnvIf Origin "http(s)?://(www\.)?(b.com|c.com)$" AccessControlAllowOrigin=$0 
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin 
    Header append Vary Origin 
</IfModule> 

當我嘗試加載網站B,它似乎工作。但是,當我嘗試加載據點C在同一個瀏覽器,我得到以下錯誤:

XMLHttpRequest cannot load http://www.a.com/stuff.html. The 'Access-Control-Allow-Origin' header has a value 'http://www.b.com' that is not equal to the supplied origin. Origin 'http://www.c.com' is therefore not allowed access. 

這就是說,如果我清除緩存,然後裝載場C,它的工作原理。但是,然後加載站點B不起作用,並給出相同的錯誤(反過來)。

有沒有辦法讓這個,讓它允許兩個網站正確加載它?不知道我可能會錯過這裏。

編輯:

位的測試之後,我也發現,使用通配符解決此問題:

<IfModule mod_headers.c> 
    Header set Access-Control-Allow-Origin * 
</IfModule> 

...雖然我不知道有關的安全性因爲它對所有人開放。假設stuff.html只是一個帶錨鏈接的靜態html文件,test.js做的唯一事情就是將該文件的內容返回給客戶端頁面,有什麼需要擔心的嗎?不知道這是否會被惡意使用。

回答

1

試試這個..

<IfModule mod_headers.c> 
     SetEnvIf Origin "http(s)?://(www\.)?(b.com|c.com)$" AccessControlAllowOrigin=$0$1 
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin 
Header append Vary Origin 
    </IfModule> 
+0

請確認是否工作! –

+0

謝謝你的回覆,但不幸的是它沒有工作,我仍然有像以前一樣的錯誤。 –

1

有了這個問題,這個工作對我來說:

<?php 
header("Access-Control-Allow-Origin: *"); 
?> 

所以你必須改變的.html到.PHP

+2

不是一個好主意,允許所有使用'*' –

+0

@VinodKumar啊,did'nt知道你可以這樣限制域名 –