這里說的js跨域是指通過js在不同的域之間進行數據傳輸或通信,比如用ajax向一個不同的域請求數據,或者通過js獲取頁面中不同域的框架中(iframe)的數據。只要協議、域名、端口有任何一個不同,都被當作是不同的域。
一句話,說明白跨域:跨域,指的是瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器施加的安全限制。所謂同源是指,域名,協議,端口均相同。
跨域案例探討與分析:
http://www.demo.com/aaa與http://www.demo.com/bbb 只是請求方法不同,沒有跨域
http://www.demo.com與http://search.demo.com 域名不同,跨域
http://www.demo.com:80與http://www.demo.com 沒有跨域
http://www.demo.com與http://www.demo.com:81 默認端口是80,所以請求端口不同,跨域
http://www.demo.com與https://www.demo.com http 協議不同,所以跨域
跨站:從這個站到另一個站的訪問請求過程,從域名的角度上講,跨站是跨域的一種
解決方案:
1.CORS -- 跨域共享
CORS請求默認不發送Cookie和HTTP認證信息。如果要把Cookie發到服務器,一方面要服務器同意,指定Access-Control-Allow-Credentials字段。另一方面,開發者必須在AJAX請求中打開withCredentials屬性。否則,即使服務器同意發送Cookie,瀏覽器也不會發送。或者,服務器要求設置Cookie,瀏覽器也不會處理。
具體使用:
1.在web工程controller.java 的方法里面 添加下面兩句代碼
//設置可以訪問的域,值設置為*時,允許所有域
response.setHeader("Access-Control-Allow-Origin", "http://localhost:8085");
//如果需要操作cookies,必須加上此配置,標識服務端可以寫cookies,
// 並且Access-Control-Allow-Origin不能設置為*,因為cookies操作需要域名
response.setHeader("Access-Control-Allow-Credentials", "true");
// Access-Control-Allow-Origin是HTML5中定義的一種解決資源跨域的策略。
2.SpringMVC跨域注解
springMVC的版本在4.2或以上版本,可以使用注解實現跨域, 我們只需要在需要跨域的方法上添加注解@CrossOrigin即可
@CrossOrigin(origins="http://localhost:8085",allowCredentials="true")