https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch
https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/readyState
https://developer.mozilla.org/zh-CN/docs/Web/Guide/AJAX
一、ajax 与 fetch 区别
1、当接收到一个代表错误的 HTTP 状态码时,从fetch()返回的 Promise 不会被标记为 reject,即使该 HTTP 响应的状态码是 404 或 500。相反,它会将 Promise 状态标记为 resolve (但是会将 resolve 的返回值的 ok 属性设置为 false ),仅当网络故障时或请求被阻止时,才会标记为 reject。
2、默认情况下,fetch 不会从服务端发送或接收任何 cookies, 如果站点依赖于用户 session,则会导致未经认证的请求(要发送 cookies,必须设置 credentials 选项)。自从2017年8月25日后,默认的credentials政策变更为same-originFirefox也在61.0b13中改变默认值
3、所有的IE浏览器都不会支持 fetch()方法,以及一些其他兼容问题
二、跨域是否可以带 cookie
fetch credentials: 'include' 'same-origin' 'omit'
XMLHttpRequest.withCredentials Boolean,用来指定跨域的请求是否应该使用证书(如cookie或授权header头)。
三、server 端 fetch 的 polyfill
node 端没有 fetch 方法, 而是 http=require('http');
https://github.com/lquixada/cross-fetch
四、原生 ajax 请求
![](https://img.haomeiwen.com/i7707397/ad7a02da0f90928c.png)
网友评论