瀏覽器攔截跨域請求處理方法


 

解決跨域的解決辦法有多種,比如jsonp,或者apache 或者nigix里面配置,或者后端的php或者java中配置 cross orgion。

在網上搜了一圈,發現處理方式都差不多,但是我們得清楚這些到底怎么用。

先看下這段代碼:

<?xml version="1.0"?>
<cross-domain-policy>
  <allow-access-from domain="*" />
</cross-domain-policy>

這段代碼作用是啥,其實這個是解決flash跨域的解決辦法。

看淘寶的使用方式:

https://www.taobao.com/crossdomain.xml

<?xml version="1.0" encoding="UTF-8"?>
<cross-domain-policy>
<allow-access-from domain="*.taobao.com" />
<allow-access-from domain="*.taobao.net" />
<allow-access-from domain="*.taobaocdn.com" />
<allow-access-from domain="*.allyes.com" />
</cross-domain-policy>

 

 

一般crossdomain.xml的位置是放到項目的根目錄下。

下面舉例關於字體跨域的解決方法:

直接了當了說,解決此類問題,最直接的方法就是,就是給被請求的服務器,添加HTTP頭響應頭,這里提供兩種添加HTTP頭的方法:

第一種,就是在程序中添加HTTP頭:

如: Response.Headers.Add("Access-Control-Allow-Origin", "*");
// JSON
{
  'Access-Control-Allow-Origin': '*', 
}
// HTML
<meta http-equiv="Access-Control-Allow-Origin" content="*">
// PHP
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
// Java
// 添加一個過濾器,給過濾器的響應response,加頭信息

添加此段代碼的目的很簡單,也就是告訴瀏覽器,這個資源是運行遠程所有域名訪問的。當然,此處的*也可以替換為指定的域名,出於安全考慮,建議將*替換成指定的域名。

 

第二種,就是在服務器上,添加HTTP響應頭。在這里,我們就以IIS6.0為例:

在被請求的網站上,設置HTTP頭,添加“

//在被請求的網站上,設置HTTP頭,添加
"Access-Control-Allow-Origin:*" //值為*或指定的域名。

第三種,使用JSONP格式,即在jQuery中ajax請求參數dataType:'JSONP':

<script> 
    $.ajax({ 
        url:"http://map.oicqzone.com/gpsApi.php?lat=22.502412986242&lng=113.93832783228", 
        type:'GET', 
        dataType:'JSONP',  // 處理Ajax跨域問題
        success: function(data){ 
            $('body').append( "Name: " + data ); 
        } 
    }); 
</script>

 

當然請求方式只能是get。

 

更多同源的問題,可參考文章進行查看。瀏覽器的跨域問題以及解決方案 

 

 

 

 

 

參考地址:關於跨域策略文件crossdomain.xml文件

瀏覽器攔截跨域請求處理方法(同源策略不允許讀取XXX上的遠程資源)

 

 

Java在瀏覽器攔截跨域后,設置頭信息的處理方式:https://www.cnblogs.com/fps2tao/p/13791113.html

 

轉 :https://www.cnblogs.com/arxive/p/7204328.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM