Ajax 跨域问题解决

为什么会出现跨域问题

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。

在此说明一下,所谓的同源,指的是域名、协议、端口均相等。举例如下:

http://www.abc.com/a/b 调用 http://www.abc.com/d/c(非跨域)

http://www.abc.com/a/b 调用 http://www.def.com/d/c (跨域:域名不一致)

http://www.abc.com:8080/a/b 调用 http://www.abc.com:8888/d/c (跨域:端口不一致)

http://www.abc.com/a/b 调用 https://www.abc.com/d/c (跨域:协议不同,https)

请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。

跨域还是挺常见的啊。

解决方法
1,头部设置

// 允许 ityangs.net 发起的跨域请求
header(“Access-Control-Allow-Origin: ityangs.net”);

//如果需要设置允许所有域名发起的跨域请求,可以使用通配符 *
header(“Access-Control-Allow-Origin: *”);

这个一看设置*,就会想到有安全隐患啊!

2,jsonp

$.ajax({    
        url:"",    
        dataType:'jsonp',    
        data:'',    
        jsonp:'callback', 
        success:function(result) {    
            //成功的处理  
        },  
        error:function(){  
            //错误处理  
}   
});    

感觉棒棒的,但是呢!

1、JSONP是一种非官方的方法,而且这种方法只支持GET方法,不如POST方法安全。
2、JSONP的实现需要服务器配合,如果是访问的是第三方的服务器,我们没有修改服务器的权限,那么这种方式是不可行的。

3,服务器代理
这里比较麻烦,大家参考:https://blog.csdn.net/csdn_ds/article/details/58605591
这个吧,我就不想写了

选择哪种方法,你有答案了吗?

猜你喜欢

转载自blog.csdn.net/qq_36208461/article/details/80773688