之前面试官基本都是问如何解决跨域问题,今天遇到一个公司问什么是跨域,为什么会产生跨域问题,虽然之前看过相关的问题,但是突然感觉有点蒙,自我感觉回答的不是很全面和准确,所以啊,看问题还真是得知其然并知其所以然,今天算重新加深一下对跨域的理解!
首先为何会产生跨域?
跨域问题是因为浏览器的同源策略引起的,一种浏览器的安全机制,要求协议,域名,端口,都要一致!
贴(tou)张图,一目了然,?
如何解决跨域?
- jsonp,只支持get,不支持post,需要调用前端和被调用后端配合(比较常用)
- 后端HttpClient进行转发,两次请求,效率低,安全(类似Nginx反向代理)
- 服务端设置响应头,允许跨域,适于小公司快速解决问题
- Nginx搭建API接口网关
- Zuul搭建API接口网关
后四种都属于服务端设置,对于目前还是一个纯前端的我来说,先把前端的搞懂再说,所以在此只说前端的jsonp
-
jsonp:原理我在面试题总结那篇文章中说过,在此只贴代码
$(".btn").click(function(){
//向头部输入一个脚本,该脚本发起一个跨域请求
$("head").append("<script src='http://localhost:9090/student?callback=getData'><\/script>");
})
//后端获取callback参数的值getData,并以getData为函数名将数据以参数的形式返回
function getData(result){//前端获取服务端返回数据
console.log(result)
}