解決URL中包含以及不包含https、www時引起的JS跨域問題
阿新 • • 發佈:2019-01-06
場景:站點的全域名是:https://www.example.com,使用者使用此連結訪問站點時完全正常,但是有時候使用者手動輸入網址時並不會輸入全域名,可能是:www.example.com,也可能是:example.com以及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中配置:
這段配置可以將所有http的請求自動轉至https
其它的跨域解決方式是使用js判斷URL:
這段js應該放置於頁面的頂部,以加快頁面的跳轉,其可以避免example.com(連結中不加www)形式的url訪問造成的ajax跨域問題:
這種情況下頁面中若有ajax訪問伺服器便會出現跨域的錯誤,常見的輸入域名引起跨域的情況有以下幾種:
http://www.example.comhttps://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跨域問題: