跨域

跨域问题

浏览器在解析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) 
原文地址:https://www.cnblogs.com/tangshuo/p/12744311.html