跨域
- 我们在运行程序时,localhost和127.0.0.1在互换时经常会报这样的错误:要请求的资源上没有访问控制源。那么这个问题怎么解决呢?这个错误的原因就是当前发起请求的页面要请求的资源不是同一个服务器标志也就是跨域。
跨域的基本介绍
- 跨域的概念:不同源的叫做跨域
- 同源:同服务,同地址,同端口的叫同源
- 跨域存在的原因:浏览器为了安全考虑提出的让域和域之间不共源。
- 跨域发生的条件:当本地服务器请求服务器上数据的时候会发生跨域
- 跨域的过程:请求成功,数据可以拿到但是浏览器单方面阻止,报错。
- 跨域的前端解决方式:jsonp
jsonp
- 程序员自己发明的,没有官方支持,利用现有特点组合起的解决方式
- jsonp的原理:浏览器阻止了ajax的跨域,但是没有阻止标签请求外部资源的跨域,所有利用这个特点解决跨域
- jsonp的封装:(调用就行啦)
function jsonp(url,callback,data){
var str = "";
for(var i in data){
str += `${i}=${data[i]}&`;
}
url = url + "?" + str;
var script = document.createElement("script");
script.src = url;
document.body.appendChild(script);
window[data[data.customName]] = function(res){
callback(res);
}
}
- 其他解决方式
- 后台的跨域解决方案:CORS跨域:在php中加入以下两句就可以实现跨域访问
header('Access-Control-Allow-Origin:*');//允许所有来源访问
header('Access-Control-Allow-Method:POST,GET');//允许访问的方式