前言:请求跨域是什么?
当有时候前端向后端的一个接口发送请求,会出现如下图报错
出现上图错误原因是因为当前ajax请求的接口与网页打开的地址不同源,产生了跨域问题。
跨域带来的问题:浏览器基于安全角度考虑,不允许使用ajax访问跨域资源
什么是同源?同源就是请求网络请求协议一样,域名一样,端口一样就是同源
所以下面就是解决不同源问题的请求
在nodejs中有两种解决方法
1、利用nodejs的的第三方模块导入直接调用cors()方法或者在服务器请求响应头添加’Access-Control-Allow-Origin’, ‘*’,语句,能都够解决资源共享的问题
优点:前端不需要过多处理资源共享的代码,可以全部交给后端处理
2、利用jsonp格式
原理:是用script标签的src属性向后台发起接口请求,把返回来的值作为一个js处理
应用场景:只能适用于get请求接口方式,因为get请求方式把参数值拼接到url地址头上
优点:前端不需要做过多处理,在后端解决跨域问题
3、利用ajax封装好的jsonp代码来解决跨域问题
优点:ajax封装好的jsonp代码底层代码如(2)上诉代码,只不过ajax每次创建一个script标签会把之前得script给覆盖掉
4、用代理服务器解决接口跨域问题
什么是代理服务器?当我们请求访问某个页面或者接口的时候,被访问的服务器有特定的权限,不允许直接被访问,此时我们就需要借助代理服务器帮助我访问到相应数据
如何搭建代理服务器,这就是一个问题?接下来我一步一步慢慢梳理
1、首先要自己搭建一个服务器
2、在自己搭建的服务器中调用服务器方法app.use(设置请求接口, createProxyMiddleware({ target: ‘http://japi.juhe.cn/qqevaluate’, changeOrigin: true })【createProxyMiddleware是第三方模块的方法,里面第一个参数是目标的服务器,第二个参数是固定值设置】
3、到这代理服务器基本搭建完毕,直接调用即可,但此时调用又会出来报跨域问题,为什么尼?这次出现跨域问题是因为打开的地址与本地地址不同源,所有我们还要把自己本地的共享资源能力开放:用到中间件的响应内容的response.setHeader()的方法