一、关于AJAX
AJAX即“Asynchronous Javascript And XML”,是指一种创建交互式网页应用的网页开发技术,它可以令开发者只向服务器获取数据;是一种在无需重新加载整个网页的情况下,能够更新部分页面内容的新方法.
AJAX是用来描述一种使用现有技术集合的‘新’方法,包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的 XMLHttpRequest。
AJAX核心是JavaScript 和 XML。但是在近些年json技术替代了XML,所以现在的Ajax的核心大部分是 :JavaScript 与 JSON (JSON相对于XML来说数据体积更小,传播速度更快;与JavaScript的交互更加方便,更容易解析处理,更好的数据交互;但JSON对数据的描述性较XML较差)
二、发送请求的多种方式
2.1 XMLHttpRequest
如果发送的是GET请求,就把请求参数加到url的末尾; 如果发送的是POST请求,就把参数放到send()方法中,作为请求主体发送。
2.2 对XMLHttpRequest进行封装的多种方式
2.2.1 $.ajax
$.ajax() 只有一个参数, 该参数为key-value设置对象;
$.ajax是jquery对原生ajax的一次封装. 通过封装ajax, jquery抹平了不同版本浏览器异步http的差异性;
2.2.2 Axios
Axios是对ajax的封装,基于Promise管理请求,解决回调地狱问题
2.3 Fetch
Fetch是ES6新增的通信方法,不是ajax,但是他本身实现数据通信,就是基于promise管理的
参考:fetch指南
三、处理跨域问题的多种方式
3.1 JSONP
JSONP是利用脚本资源请求本身就可以跨域的特性,通过与请求一起发送回调函数名,后台返回script脚本直接执行回调,但是由于资源请求是get类型,请求参数长度有限制,也不能进行post请求;同时一定需要对方服务器支持且不安全可能会遭受XSS攻击。
AJAX属于同源策略,JSONP属于非同源策略(跨域请求)
3.2 CORS
浏览器会自动进行 CORS 通信,实现 CORS 通信的关键是后端。只要后端实现了 CORS,就实现了跨域; 如果服务器设置了 CORS 相关配置,在返回浏览器的请求头会加上 Access-Control-Allow-Origin,浏览器看到这个字段的值与当前的源匹配,就会解锁跨域限制
3.3 代理实现
3.3.1 nginx反向代理
使用nginx反向代理实现跨域,是最简单的跨域方式。只需要修改nginx的配置即可解决跨域问题,支持所有浏览器,支持session,不需要修改任何代码,并且不会影响服务器性能。
3.1.2 Node中间件代理
3.4 WebSocket
WebSocket 是一种双向通信协议,在建立连接之后,WebSocket 的 server 与 client 都能主动向对方发送或接收数据