鍍金池/ 問(wèn)答/HTML/ 跨域問(wèn)題,怎么解決

跨域問(wèn)題,怎么解決

  var lng=result.geocodes[0].location.lng;
            var lat=result.geocodes[0].location.lat;
           $.ajax({
                  url:'https://zhihui.farm/markets/'+lng+','+lat+'?limit=2',
                  type:'get',
                  dataType:'json',
                  beforeSend: function(request) {
                    request.setRequestHeader("Authorization", "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjUxYTRjNzg5LTc5ODQtNDE4Mi1iZTFlLWYxYWI0M2E5YzU0MyIsImV4cCI6MTUxNTcyMzQ5My41NTJ9.r131dQYaCYO4hK_vzLLZf6NDhBuiARsyS5sw1H3D2ko");
                  },
                  success:function(data){
                    console.log(data);
                  }, 
                  error : function(errorMsg) {
                    alert("數(shù)據(jù)請(qǐng)求失敗");
                }
              });   
瀏覽器報(bào)的錯(cuò)誤:Failed to load https://zhihui.farm/markets/117.251587,39.128291?limit=2: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Ori

gin' header has a value 'http://localhost:3001' that is not equal to the supplied origin. Origin 'http://192.168.11.203:3001' is therefore not allowed access.

怎么解決!?

回答
編輯回答
編輯回答
不歸路

hosts修改

2017年11月17日 23:37
編輯回答
安淺陌

nginx反向代理

2018年4月4日 04:12
編輯回答
孤巷

你在頭部添加了 Authorization ,即需要先發(fā)送 OPTION 請(qǐng)求,詢問(wèn)服務(wù)器是否允許請(qǐng)求頭有 Authorization 這非default 屬性,若沒(méi)有就算你配置了服務(wù)器允許跨域訪問(wèn),但因這個(gè)而被攔截了
首先在服務(wù)器允許,當(dāng)然在代碼中也可以,我以 nginx 為例子

    location ~ .*\.(php|php5)?$  
    {  
      # 當(dāng)OPTIONS時(shí)允許通過(guò),且返回204
      if ($request_method = 'OPTIONS') {  
        # 允許跨域地址
        add_header Access-Control-Allow-Origin *;  
        # 當(dāng)該標(biāo)志為真時(shí),響應(yīng)于該請(qǐng)求是否可以被暴露
        add_header Access-Control-Allow-Credentials true; 
        # 允許的請(qǐng)求類型 
        add_header Access-Control-Allow-Methods 'GET, POST, PUT,OPTIONS';  
        # 允許的自定義(這里只是列舉一些,如題主主要加上 Authorization 就可)
        add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';  
       
        return 204;  
      }  
   
      fastcgi_pass   127.0.0.1:9000;  
      fastcgi_index index.php;  
      fastcgi_param  SCRIPT_FILENAME  /usr/local/www/$fastcgi_script_name;  
      include        fastcgi_params;  
    }  
2017年1月7日 09:48
編輯回答
薄荷糖

其實(shí)都是你自己的項(xiàng)目吧,只不過(guò)你是在本地開(kāi)發(fā),訪問(wèn)的線上的接口 如果是的話 考慮部署環(huán)境

2017年10月4日 22:27
編輯回答
硬扛

如果樓主是在開(kāi)發(fā)階段,上線后確定是同一個(gè)域名的話,可以讓谷歌瀏覽器取消跨域,
目標(biāo)設(shè)置成: --args --disable-web-security --user-data-dir'
圖片描述

如果必須要處理跨域的話,那么就使用jsonp

2017年1月24日 18:05
編輯回答
爆扎

我寫(xiě)了一些關(guān)于 ajax 的跨域問(wèn)題和方案總結(jié), 如果真的想知道前因后果,不妨看看。

2017年1月13日 16:46
編輯回答
薔薇花

方式很多:

     1:服務(wù)端配置cors跨域設(shè)置access-control-allow-origin(最推薦?。?     2:通過(guò)nginx等轉(zhuǎn)發(fā)代理
     3:如果只是開(kāi)發(fā)環(huán)境下跨域,生產(chǎn)環(huán)境同域,最簡(jiǎn)單的方式直接裝一個(gè)chrome插件allow-control-allow-origin
     4:其他jsonp,window.name,iframe之類的方式等,個(gè)人不太推薦了,限制太多,有點(diǎn)類似hack的方式
2017年4月21日 13:58
編輯回答
懶洋洋

服務(wù)端無(wú)法配置跨域白名單的話,可以使用代理,將其轉(zhuǎn)化為同一個(gè)域下,gulp,webpack都有相應(yīng)的配置

2017年7月28日 03:01
編輯回答
夢(mèng)囈
    dataType:'jsonp',
2018年9月14日 00:23