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