跨域(跨源)問題解決
Chrome報錯內容:
Access to XMLHttpRequest at 'http://xxxx' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains multiple values '*, http://localhost:9001/educenter/member/register', but only one is allowed.
Firefox報錯內容:
已攔截跨源請求:同源策略禁止讀取位於 http:**** 的遠端資源。(原因:CORS 頭缺少 'Access-Control-A...
解決辦法
解決辦法一:
var url='http://localhost:9001/educenter/member/register" +"?id=1&callback=?'; $.ajax({ url:url, dataType:'jsonp', processData: false, type:'get', success:function(data){ alert(data.name); }, error:function(XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.status); alert(XMLHttpRequest.readyState); alert(textStatus); }});
解決辦法二:
var url="http://localhost:9001/educenter/member/register"
+"?id=1&callback=?";
$.jsonp({
"url": url,
"success": function(data) {
$("#current-group").text("當前工作組:"+data.result.name);
},
"error": function(d,msg) {
alert("Could not find user "+msg);
}
});
解決辦法三:
被請求頁面加上下面程式碼,最好content填寫域名 <meta http-equiv="Access-Control-Allow-Origin" content="*">
解決辦法四:
header(“Access-Control-Allow-Origin: *”);
解決辦法五:
修改nginx配置檔案
server {
listen 81;
server_name localhost;
location / {
root html;
index index.html index.htm;
#####自定義模組,解決跨域問題,*表示匹配所有,生產不推薦
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET,POST';
add_header 'Access-Control-Allow-Headers' 'x-requested-with,content-type';
#####自定義模組,解決跨域問題,*表示匹配所有,生產不推薦
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
解決辦法六:
如果是Springboot專案,在Controller上新增跨域註解 @CrossOrign
報錯原因:
協議 、 域名 、埠有一個不一致,就會存在跨域問題,CORS一般不需要在瀏覽器配置,瀏覽器發現這次跨源AJAX請求是簡單請求,就自動在頭資訊之中,新增一個Origin欄位,Origin欄位用來說明,本次請求來自哪個源(協議 、 域名 、埠)。伺服器根據這個值,決定是否同意這次請求,也就是說伺服器會存在一份白名單,說明哪一些源是可以被允許的,而Access-Control-Allow-Origin就是包含在迴應頭裡的白名單。瀏覽器發現,這個迴應的頭資訊沒有包含Access-Control-Allow-Origin欄位,就知道出錯了,從而丟擲一個錯誤,也就是遇到的提示,是返回結果被瀏覽器攔截了,而不是請求發不出。
所以你需要的是在伺服器上配置這個白名單,而不是更改頁面