浅谈前端面试题---跨域

1,286 阅读2分钟

什么是跨域

浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域

为什么会出现跨域问题

出于浏览器的同源策略限制
同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,
如果缺少了同源策略,则浏览器的正常功能可能都会受到影响可以说Web是构建在同源策略基础之上的
浏览器只是针对同源策略的一种实现
同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互
所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port

怎么解决跨域问题

那么怎么解决跨域的问题呢?这篇文章会介绍两种比较常见的方法 JSONP 和 代理

JSONP

JSONP是JSON with Padding的缩写
<script>标签的跨域是不受同源策略限制的。那么,我们可以这样:我们向后端请求一个js文件,
在这个js文件当中,返回一个函数的执行,而我们想要得到的数据,是这个函数的参数

JSONP只能处理GET请求,只是权宜之计

代理

跨域只是浏览器向服务器发送请求的时候,浏览器的限制。而服务器和服务器之间是没有跨域的限制的。反向代理是利用代理服务器接收到请求之后,转发给真正的服务器,并把结果返回到浏览器上

在vue框架中vue.config.js文件,里面放入如下内容:

module.exports = {
 devServer: {
   proxy: 'http://localhost:7001',
   }
 }
}

在react框架中pachage.json文件,里面放入如下内容:

"proxy": "http://localhost:7001",

这样,代理服务器就可以把收到的请求转发给 http://localhost:7001/这个源