1. 程式人生 > 實用技巧 >跨域(跨源)問題解決

跨域(跨源)問題解決

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欄位,就知道出錯了,從而丟擲一個錯誤,也就是遇到的提示,是返回結果被瀏覽器攔截了,而不是請求發不出。

所以你需要的是在伺服器上配置這個白名單,而不是更改頁面