跨域
跨域问题
浏览器在解析js代码时,发现js代码请求了一个不属于当前服务器的资源,这时候就属于跨域
浏览器遵循同源策略,无法访问跨域资源
同源: 协议+ip+端口
移动端不存在跨域问题,同源策略是浏览器的策略
解决跨域
在响应头中明确指出,对方可信的
response.setHeader("Access-Control-Allow-Origin","*")
//*一般用于测试 部署时指定为静态服务器地址
//指定允许其他域名访问
'Access-Control-Allow-Origin:http://XXX.XXX.XXX'
//一般用法(*,指定域,动态设置),注意*不允许携带认证头和cookies
//预检查间隔时间
'Access-Control-Max-Age: 1800'
//允许的请求类型
'Access-Control-Allow-Methods:GET,POST,PUT,POST'
//列出必须携带的字段
'Access-Control-Allow-Headers:x-requested-with,content-type'
补充
默认Cookie不允许跨域
- 前端 ajax配置
<script>
$("#log").click(function(){
$.ajax({
type : "POST",
url : "http://localhost:8080/FBAssignment_war_exploded/login",
data : {"username":$("#user").val(),"password":$("#pwd").val()},
####################################################
xhrFields:{
withCredentials:true //携带跨域cookie
},
#####################################################
success : function(result) {
if(result.status!=200){
$("#err").html(result.error)
}else {
alert("登陆成功!")
}
},
error : function(e){
$("#err").html("系统错误!");
}
})
});
</script>
- 后端响应中添加字段,说明允许cookie跨域
response.setHeader('Access-Control-Allow-Credentials,true)