跨域策略文件crossdomain.xml的配置方法
一、crossdomain.xml文件的作用
????跨域,顧名思義就是需要的資源不在自己的域服務器上,需要訪問其他域服務器。跨域策略文件是一個xml文檔文件,主要是為web客戶端(如Adobe Flash Player等)設置跨域處理數據的權限。打個比方說,公司A部門有一臺公共的電腦,里面存放著一些資料文件,專門供A部門內成員自己使用,這樣,A部門內的員工就可以訪問該電腦,其他部門人員則不允許訪問。如下圖:?
?
A部門的員工可以任意訪問A部門的公共電腦,但是不能直接訪問B部門的公共電腦。有一天,B部門領導覺得他們的資料非常有用,想要與A部門分享,于是就給A部門一個令牌,這樣A部門的員工也可以訪問B部門的公共電腦了。?
????換成系統,常見就如同下面所示:?
?
上圖是典型的跨域請求,業務服務器向圖片服務器上傳圖片時就涉及到了跨域,要想能正常訪問,圖片服務器需要給業務服務器設置允許訪問的權限。而這個權限設置就是跨域策略文件crossdomain.xml存在的意義。
二、配置規則
- cross-domain-policy?
cross-domain-policy元素是跨域策略文件crossdomain.xml的根元素。它只是一個策略定義的容器,沒有自己的屬性。子元素有:?
- site-control
- allow-access-from
- allow-access-from-identity
- allow-http-request-headers-from
-
site-control?
site-control元素用于定義當前域的元策略。元策略則是用于指定可接受的域策略文件,且該文件不同于目標域根元素(名為crossdomain.xml)中的主策略文件。?
如果客戶端收到指示使用主策略文件以外的策略文件,則該客戶端必須首先檢查主策略的元策略,以確定請求的策略文件是否獲得許可。?
屬性:- permitted-cross-domain-policies?
指定元策略。除套接字策略文件外,所有策略文件的默認值均為master-only,套接字策略文件的默認值為all。該屬性允許的值有:?
- none:目標服務器上的任何位置(包括該主策略文件)均不允許使用策略文件。
- master-only:僅允許這個主策略文件。
- by-content-type:僅允許Content-Type:text/x-cross-domain-policy提供的策略文件(只適用于HTTP/HTTPS)。
- by-ftp-filename:僅允許文件名為crossdomain.xml的策略文件。(只適用于FTP)
- all:允許此目標域中所有的策略文件。
- permitted-cross-domain-policies?
-
allow-access-from?
allow-access-from元素用于授權發出請求的域從目標域中讀取數據。可以通過使用通配符(*),為多個域設置訪問權限。?
屬性:- domain:指定要授予訪問權限的發出請求的域??梢允怯蛎騃P地址。子域將被視為不同的域。指定域時可以使用通配符星號( * )表示多個域。單獨使用星號( * )表示所有域。一般不建議設置為星號允許所有域訪問。
- to-ports:只適用于Sockets,以逗號分隔的端口列表,或者允許連接到套接字連接的一系列端口。端口范圍通過在兩個端口號之間插入短劃線 (-) 指定。端口范圍在用逗號隔開時則可以用于指代單個端口。一個通配符 (*) 可用于表示允許所有端口。
- secure:只只適用于HTTPS和Sockets,指定僅授予指定來源的 HTTPS 文檔的訪問權限 (true),還是授予指定來源的所有文檔的訪問權限 (false)。如果 HTTPS 策略文件中未指定 secure,則默認為 true。不建議在 HTTPS 策略文件中使用 false,因為這會影響 HTTPS 的安全性。在套接字策略文件中,默認值為 false。只有當套接字服務器接受本地主機連接時,指定 secure=”true” 才有意義,因為本地套接字連接通常不會面臨中間人攻擊的風險,因此無法更改 secure=”true” 聲明。
- allow-access-from-identity?
allow-access-from-identity元素根據加密憑據授予權限,而 allow-access-from 則截然不同,它根據來源授予權限。 - allow-http-request-headers-from?
allow-http-request-headers-from元素用于授權發出請求的域中的請求文檔將用戶定義的標頭發送到目標域。而 allow-access-from 元素旨在授權從目標域提取數據。這個標簽授權以標頭的形式推送數據。?
屬性:?
- domain:指定要授予訪問權限的的域。可以是域名,也可以是IP地址,子域將被視為不同的域。通配符 (*) 單獨使用時可用于表示所有域,在用作以句點 (.) 分隔的明確二級域名前綴時表示多個域。表示單個域時需要使用單獨的 allow-access-from 元素。
- headers:以逗號分隔的標頭列表,表示允許發送的請求域。通配符 (*) 可用于準許所有標頭或頭后綴,從而支持以相同字符開頭但以不同字符結尾的標頭。
- secure:只適用于HTTPS,如果設置為 false,則表示允許 HTTPS 策略文件授權訪問 HTTP 源發出的請求。默認值為 true,表示僅提供 HTTPS 源權限。我們不推薦使用 false。
三、匹配規則
- 各個域或子域必須完全匹配。如www.example.com匹配http://www.example.com。
- IP地址和域名不匹配,即使IP地址就是域名指代的IP也不行。
- 域通配符與該域本身及所有子域匹配。
- 單獨使用通配符 (*) 允許所有請求者進行訪問,但不推薦使用。只有在策略文件范圍內的所有內容完全公開的情況下才應當使用允許所有權限。
舉例:
| www.example.com | http://www.example.com | http://example.com? http://example.com? http://www.example.net |
| *.example.com | http://example.com? http://www.example.com? http://deep.subdomain.example.com | http://www.example.net |
| http://*.example.com | http://example.com? http://www.example.com? http://deep.subdomain.example.com | 所有的https域 |
| 127.0.0.1 | http://127.0.0.1 | http://localhost? http://127.0.0? http://127.0.0.2 |
| www.example.* | 無效的值,不匹配 | 無 |
示例文件
1)匹配指定的域名 <?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy><site-control permitted-cross-domain-policies="master-only"/><!-- 允許example.com及其子域訪問 --><allow-access-from domain="*.example.com"/><!-- 允許http://www.example.com訪問 --><allow-access-from domain="www.example.com"/><allow-http-request-headers-from domain="*.csdn.net" headers="*"/> </cross-domain-policy> 1)匹配所有
可以參考以下博文:
1)http://blog.csdn.net/summerhust/article/details/7721627
2)http://blog.csdn.net/zws1987211/article/details/7173216
總結
以上是生活随笔為你收集整理的跨域策略文件crossdomain.xml的配置方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx+tomcat实现主备切换
- 下一篇: maven初学者(一)