今天我们来说一下每个程序员基本都会遇见的问题,跨域。
一、什么是跨域
首先我们要知道,浏览器有一个很重要的安全策略,叫同源策略。它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。同源策略规定只要是端口号、协议、域名其中有一个不满足,那就是不同源。他主要是为了防止跨站脚本攻击(xss),说白了,只要不是一个源下的那都不能相互访问、交互。
跨域其实跟这个差不多,当你访问时,你的端口号、协议、域名与正在访问的URL有一个不要要,那就是跨域。非同源这玩意有很多限制啊:
- 无法获取非同源的 Cookie、LocalStorage、SessionStorage 等
- 无法获取非同源的 dom
- 无法向非同源的服务器发送 ajax 请求
所以接下来我就说一下在Node中我常用的两种解决跨域问题的方法。
二、cors
首先就是CORS方法,我个人非正常喜欢用这个,在Node中,只需要下载之后导入,在配置一下中间件就可以。
CORS 跨域的原理实际上是浏览器与服务器通过一些 HTTP 协议头来做一些约定和限制。可以查看 HTTP-访问控制(CORS)
直接上代码!
首先在终端输入npm i cors 将其安装好
然后导入
就这样Node后端的跨域就做好了,是不是很简单粗暴。关于CORS的原理,咳咳,百度百科上很多,三言两语也说不清楚,就不再过多赘述,感兴趣的兄的可以去搜一下了解一波。
三、jsonp
首先我们要知道,jsonp和cors可不一样,它根ajax一样是接口,但是接口也是有区别的,举个例子,如:
1-jsonp接口只能使用get请求 ajax接口接收多种请求方式
2-jsonp接口的返回值是对象 原生ajax接口的返回值是字符串
3-jsnop的接口至少有一个参数,这个参数是一个函数,表示回调函数 http://localhost:3000/jsonp?callback=fn
而ajax的接口可以没有任何参数 http://localhost:3000/list
好,那么接下来不说废话,直接上代码!
四、中间件
刚刚我们在说cors的时候提到了一个中间件的知识点,对于Node来说用处很大。
中间件说白了就是客户端请求和服务器响应之间应该做的一些事情,中间件分为三种,分别是路由中间件,全局中间件,全局错误处理中间件
老规矩,上代码!
1、全局中间件
一般定义在所有路由的最上面,当执行某个路由时,必须先执行全局中间件,而且在全局中间件中可以定义全局数据,以供其他路由使用。
2、路由级中间件
3、全局错误处理中间件
一般定义在所有路由的最下面 当程序出现错误了就会执行
ok今天就说这么多,希望可以帮助到大家,有什么问题可以在评论区说出来,兄弟们一起讨论,感谢观看!