什麼叫跨域
協議+ip/域名+端口,只要有其中一個不同都稱之爲“異源”,都可以叫跨域 cross orgin,跨域是瀏覽器認爲從其他站點調用資源是視爲不安全的,所有就提示一個跨域錯誤。
*在ajax get方式請求其他站點發生跨域現象,解決方案: 本質 通過將回調函數發給服務器
只能針對$.ajax() type="get" dataType="jsonp"
$.ajax({
url:http://localhost:/login.do
data:{itemId:$scope.sku.id,num:$scope.nu},
dataType:jsonp
type:get
success:function(response){},
error:function(){}
})
這樣寫,瀏覽器就會發送的url:http://localhost/login.do?callback=success()
localhost:8080服務器接收到該callback參數 ,然後就接口執行的結果放入到callback中拼接返回瀏覽器。
return callback+"("+數據+")"
ajax post方式發生的跨域現象,無法解決
*針對所有跨域現象,通用的解決方案(cors解決方案): 本質是通過設置頭信息,告訴瀏覽器調用其他站點資源是安全的
訪問跨域請求時
'http://localhost:8080/login.do.do?username=' + $scope.username + '&num=' + $scope.num, { 'withCredentials': true }
後臺可以手動設置響應頭
//路徑爲要訪問此方法的服務器路徑
response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
response.setHeader("Access-Control-Allow-Credentials", "true");
//Access-Control-Allow-Origin: 允許訪問的域 該字段必須攜帶
//Access-Control-Allow-Credentials: true 該字段可選。它的值是一個布爾值,表示是否允許發送Cookie 如果要是cookie上面的域一定是具體的
設置允許所有站點訪問,即可解決所有跨域請求
或者在方法上加入以下註解
//origins表示訪問此方法的地址,allowCredentials表示允許攜帶cookie
@CrossOrigin(origins="http://localhost:8080",allowCredentials="true")