AJAX原生,jq,axios,fetch全部知识

229 阅读2分钟

一、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

zhuanlan.zhihu.com/p/89089088