2014-12-08 144 views
2

爲了解決CORS問題,我在服務器站點本地主機不允許訪問

但我的開發過程中,我看到了這個錯誤

The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. Origin 'http://localhost' is therefore not allowed access. 

我寫的有

header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods: GET, POST'); 
header("Access-Control-Allow-Headers: X-Requested-With"); 

認爲允許來源:*將解決一切?但爲什麼它說頭包含多個值?

+0

請問您可以參考這個嗎? http://stackoverflow.com/questions/22343384/the-access-control-allow-origin-header-contains-multiple-values – 2014-12-08 05:05:41

回答

1

這是意外啓用CORS兩次時的常見問題。請檢查以確保您未在​​apache中啓用它,或者標頭未設置兩次。作爲完整性檢查,您可以嘗試刪除標題並在迴應之前將其添加回來。

例:

header_remove('Access-Control-Allow-Origin'); 
header('Access-Control-Allow-Origin: *'); 
+0

嘿這工作!謝謝! – mike19911 2014-12-08 05:18:23

+1

@ mike19911 K那麼我的懷疑是正確的。不僅僅是複製粘貼代碼:)。它不能解決問題,它只是清楚地確定需要修正的問題:)。 – 2014-12-08 05:20:57

1

由於瀏覽器的安全限制,大多數Ajax請求都受到同源策略;該請求無法成功從不同的域,子域,端口或協議中檢索數據。但是腳本和JSONP請求不受相同的源策略限制。

如果您還沒有使用過JSONP。維基百科說

JSONP或「JSON與填充」是補充的鹼JSON數據 格式,允許頁面請求和更的使用模式 有意義使用JSON從服務器以外的主服務器。

所以,你的Ajax調用應該是這樣的:

$.ajax({ 
     type: 'GET', 
     crossOrigin: true, 
     dataType: "jsonp", 
     url: url, 
     success: function(data) { 
      console.log(data); 
     } 
    }); 
1

使用*將無法正常工作。下面的PHP代碼將接受來自所有域的所有請求,並在IE,Firefox,Chrome和Safari中工作。

$origin=isset($_SERVER['HTTP_ORIGIN'])?$_SERVER['HTTP_ORIGIN']:$_SERVER['HTTP_HOST']; 
header('Access-Control-Allow-Origin: '.$origin);   
header('Access-Control-Allow-Methods: POST, OPTIONS, GET, PUT'); 
header('Access-Control-Allow-Credentials: true'); 
header('Access-Control-Allow-Headers: Authorization, X-Requested-With'); 
header('P3P: CP="NON DSP LAW CUR ADM DEV TAI PSA PSD HIS OUR DEL IND UNI PUR COM NAV INT DEM CNT STA POL HEA PRE LOC IVD SAM IVA OTC"'); 
header('Access-Control-Max-Age: 1'); 

接受來自所有域的請求是不安全的。對於更好的(但稍微複雜一點的)解決方案,請參閱:CORS That Works In IE, Firefox, Chrome And Safari

相關問題