天天看點

跨域通路

對于跨域通路的問題,以前一直沒有深入的研究, 就記得放回一個XML來支援跨域的問題。今天,一個同僚問我關于跨域請求的問題,我仔細的查閱了一下資料,對于網絡上的一些知識的了解,特總結如下。

對于flash跨域,在伺服器端傳回如下XML檔案。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<!-- Policy file for xmlsocket://socks.adobe.com -->
<cross-domain-policy>
  <site-control permitted-cross-domain-policies="all" />
  <allow-access-from domain="*" to-ports="*" />
  <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
      

對于javascript的跨域,也就是ajax的跨域問題,主要有以下幾種方法:

1、iframe

在都是同一個頂級域名的情況下,可以使用該方法,在iframe中都加上document.domain="xxx.com",這樣就統一域名了,在同一個域名下,iframe之間是可以互通路的,來解決這個問題。

2、jsonp

感覺挺高深的,其實就是在請求的時候加上callback=xxx,服務端在傳回的時候,直接将傳回的json變為一個javascript函數, xxx({jsondata}),這樣也可以實作跨域。

3、<script>标簽

script标簽中的src是可以請求不同域名下的url的,可以直接在<script>的标簽下的src指定到跨域的url。

4、代理方式

這個就是将原來的請求B網站的請求到A網站的服務端,然後在由服務端去在server端代理到B網站。

5、CORS(跨域資源共享, Cross-Origin Resource Sharing)

服務端對于請求做一定的限制,可以允許是否可以接受跨域的通路。該實作比較簡單,在通路的傳回的header中加入如下響應标頭。

Access-Control-Allow-Origin:* 
      

*代表允許所有的域名,還可以指定固定的域名:

Access-Control-Allow-Origin:http://www.pange.xin      

繼續閱讀