一、AJAX
1、网络层基础知识:
1 请求信息:
行: POST 头:host cookie Context-Type User-Agent
空格: 体:
2、ajax GET请求
3、ajax POST请求
3、ajax 返回JSON格式
4、ajax在get请求下的缓存
1、随机数:Math.random()。 xhr.open('GET','https='+Math.random(),true)
2、事件戳:new Date().getTime()
3、设置请求头:xhr.setRequestHeader('If-Modified-Since','0');
4、服务端禁用缓存:header('Cache-Control:no-cache,must-revalidate') 如果不想缓存一个静态文件。解决办法:在请求的css路径后面加个参数。'?version=2';
5、网络超时
6、取消请求
7、重复请求
8、同源策略,跨域问题解决:jsonp,cors
一、同源策略:(请求同一个来源的)netspace公司提出,网页url和ajax请求的url 协议http,域名 127,端口号 8000,必须完全相同。因为请求的服务器可能不在一个主机上面。 违背同源策略就是跨域。
二、跨域的所有解决方法: www.zhihu.com/tardis/sogo…
1、JSONP:JSON with padding,只支持get请求。 原理:有些标签就是本身具有跨域功能,scirpt,link,iframe。img。a。
2、CORS: cross-origin resouerce sharing ,跨域 ,资源,共享。官方解决方案。客户端需不要做任何处理,在服务器进行。新增http字段,允许那些源站通过浏览器有权限。 设置一个响应头,告诉浏览器,该请求允许跨域,浏览器收到响应会对响应放行。
源,请求头部,请求方法, responce.setHeader(Access-Control-Allow-Origin,'') responce.setHeader(Access-Control-Allow-Headers,'') responce.setHeader(Access-Control-Allow-Method,'*')
3、Nginx代理跨域
4、nodejs中间件代理跨域
5、document.domain + iframe跨域(此方案仅限主域相同,子域不同的跨域应用场景。)
6、location.hash + iframe跨域
7、window.name + iframe跨域
8、postMessage跨域
9、WebSocket协议跨域
1jsonp(只支持get请求,支持老的IE浏览器)适合加载不同域名的js、css,img等静态资源;
2CORS(支持所有类型的HTTP请求,但浏览器IE10以下不支持)适合做ajax各种跨域请求;
34Nginx代理跨域和nodejs中间件跨域原理都相似,都是搭建一个服务器,直接在服务器端请求HTTP接口,这适合前后端分离的前端项目调后端接口。
567document.domain+iframe适合主域名相同,子域名不同的跨域请求。
89postMessage、websocket都是HTML5新特性,兼容性不是很好,只适用于主流浏览器和IE10+。
二、jq
三、axios
四、fetch
目前一般是axios和fetch使用的多,其中fetch和axios的对比: zhuanlan.zhihu.com/p/353492075