js的跨域請求

什麼叫跨域

協議+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")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章