1. 程式人生 > >JS跨域請求

JS跨域請求

跨域資源共享:
JS跨域請求:
	通過JS在不同的域之間進行資料傳輸或通訊
不同域:
	只要協議,IP(域名),埠這三者有任何一個不同都認為是不同域
跨域測試:
	在埠號為9105的工程下,在js的service層傳送請求$http.get("http://localhost:9107/cart/addGoodsToCartList.do")
測試結果:
XMLHttpRequest cannot load
http://localhost:9107/cart/addGoodsToCartList.do?itemId=112344&num=1.
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin
'http://localhost:9100' is therefore not allowed access. The response had HTTP status code 400.
結果分析:
	瀏覽器一旦發現AJAX 請求跨源,就會自動新增一些附加的頭資訊,有時還會多出一次附加的請求;瀏覽器在真正傳送請求前,會先預請求,預響應一次,相當於三次握手的前兩次,當進行預請求響應的時候,發現附加的頭資訊,導致請求失敗
<!-------------------------------使用原生的響應頭解決--------------------------------------->
跨域資源共享(CORS): Cross-Origin Resource Sharing CORS是 HTML5 中定義的一種解決資源跨域的策略。 在需要被跨域訪問的方法中設定: 9107的addGoodsToCartList方法中設定: //第一個引數固定值:允許訪問的域,第二個引數:指定具體的域,可以使用萬用字元"*",表示允許所有與訪問 response.setHeader("Access-Control-Allow-Origin", "http://localhost:9105"); //如果需要操作cookie就設定下面這個響應頭,並且上面的響應頭不能使用"*",必須指定具體的域 response.setHeader("Access-Control-Allow-Credentials", "true"); 如果操作了cookie,還需要在ajax請求中,新增一個請求引數:{'withCredentials':true} <!---------------------------使用spring4.2後提供的註解解決---------------------------------->
在需要跨域的方法上添加註解@CrossOrigin,eg: @CrossOrigin(origins="http://localhost:9105",allowCredentials="true")