1. 程式人生 > >解決URL中包含以及不包含https、www時引起的JS跨域問題

解決URL中包含以及不包含https、www時引起的JS跨域問題

場景:站點的全域名是:https://www.example.com,使用者使用此連結訪問站點時完全正常,但是有時候使用者手動輸入網址時並不會輸入全域名,可能是:www.example.com,也可能是:example.com以及http://www.example.com

這種情況下頁面中若有ajax訪問伺服器便會出現跨域的錯誤,常見的輸入域名引起跨域的情況有以下幾種:

http://www.example.com
https://www.example.com//同一域名,不同的協議


http://www.example.com
http://static.example.com//主域相同,子域不同


http://www.example.com
http://example.com//同一域名不同二級域名


如果使用的是tomcat伺服器,可以在web.xml中配置:
        <security-constraint>
		<web-resource-collection >
			<web-resource-name >SSL</web-resource-name>
			<url-pattern>/*</url-pattern>
		</web-resource-collection>
		<user-data-constraint>
			<transport-guarantee>CONFIDENTIAL</transport-guarantee>
		</user-data-constraint>
	</security-constraint>


這段配置可以將所有http的請求自動轉至https
其它的跨域解決方式是使用js判斷URL:
var locationUrl = location.href;
if(locationUrl.indexOf('www.example.com')==-1){
	if(locationUrl.indexOf('example.com')!=-1){
		locationUrl = locationUrl.replace('example.com','www.example.com');
		location.href= locationUrl;
	}
}

這段js應該放置於頁面的頂部,以加快頁面的跳轉,其可以避免example.com(連結中不加www)形式的url訪問造成的ajax跨域問題: