为什么会出现跨域问题
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对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
这个吧,我就不想写了
选择哪种方法,你有答案了吗?