# 跨域請求解決方案 #
## JS跨域請求的簡單介紹: ##
這裏說的js跨域是指經過js在不一樣的域之間進行數據傳輸或通訊,好比用ajax向一個不一樣的域請求數據,或者經過js獲取頁面中不一樣域的框架中(iframe)的數據。**只要協議、域名、端口有任何一個不一樣,都被看成是不一樣的域**。ajax
## 跨域解決方案CORS ##
CORS 是一個W3C標準,全稱是"跨域資源共享"(Cross-origin resource sharing)。CORS須要瀏覽器和服務器同時支持。目前,全部瀏覽器都支持該功能,IE瀏覽器不能低於IE10。
它容許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制。整個CORS通訊過程,都是瀏覽器自動完成,不須要用戶參與。對於開發者來講,CORS通訊與同源的AJAX通訊沒有差異,代碼徹底同樣。瀏覽器一旦發現AJAX請求跨源,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求,但用戶不會有感受。所以,實現CORS通訊的關鍵是服務器。只要服務器實現了CORS接口,就能夠跨源通訊。
1. Browser ------Preflight Request----->Server
1. Browser <-----preflight Response-----~
1. Browser ------Real Request---------->~
1. Browser <-----Real Response----------~
跨域
## 設置頭信息 ##
//客戶端JS須要加的信息
{'withCredentials':true}瀏覽器
//服務器端須要加的信息,告訴服務器須要放行的源請求地址
response.setHeader("Access-Control-Allow-Origin", "http://IP:端口");
response.setHeader("Access-Control-Allow-Credentials", "true");//操做Cookie須要加這一句
註解方式@CrossOrigin(origins="http://localhost:9105",allowCredentials="true")
//注意此方式須要SpringMVC4.2以上的版本,若發生缺省錯誤的話檢查JDK版本服務器