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


轉自原文 瀏覽器攔截跨域請求處理方法

 

解決跨域的解決辦法有多種,比如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");

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

 

第二種,就是在服務器上,添加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上的遠程資源)

 


免責聲明!

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



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