HTTP协议实战分析|青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第9天
一、课程知识要点:
- 实战—浏览器篇
- 实战—node篇
- 实战—用户体验
- 了解更多
二、详细知识点介绍:
实战—浏览器篇
AJAX之XHR
XHR:XMLHttpRequest- readyState
- 0 UNSENT :代理被创建,但尚未调用open() 方法。
- 1 OPENED :open()方法已经被调用。
- 2 HEADERS_R ECEIVED :send()方法已经被调用,并且头部和状态已经可获得。
- 3 LOADING :下载中;responseText 属性已经包含部分数据。
- 4 DONE :下载操作已完成。
AJAX之Fetch
XMLHttpRequet的升级版。- 使用
Promise - 模块化设计,
Response,Request,Header对象 - 通过数据流处理对象,支持分块读取
实战—node篇
标准库:HTTP/HTTPS
- 默认模块,无需安装其他依赖
- 功能有限/不是十分友好
常用的请求库:axios
- 支持浏览器、
nodejs环境 - 丰富的拦截器
axios.defaults.baseURL="https://api.example.com";
// 添加请求拦截器
axios.interceptors.request.use(function(config){
// 在发送请求之前做些什么
return config;
},function(error){
// 对请求错误做些什么
return Promise.reject(error);
});
//发送请求
axios({
method:'get',
url:'http://test.com',
responseType:'stream'
}).then(function(response{ response.data.pipe(fs.createWriteStream('ada lovelace.ipg'))
});
实战—用户体验
稳定性
- 重试是保证稳定的有效手段,但要防止加剧恶劣情况
- 缓存合理使用,作为最后一道防线
了解更多
扩展—通信方式
WebSocket
- 浏览器与服务器进行全双工通讯的网络技术
- 典型场景:实时性要求高,例如聊天室
- URL 使用 ws://或 wss:// 等开头
Quic:Quick UDP Internet Connection
- 0-RTT 建联(首次建联除外)。
- 类似TCP的可靠传输。
- 类似TLS的加密传输,支持完美前向安全。
- 用户空间的拥塞控制,最新的BBR算法。
- 支持h2的基于流的多路复用, 但没有TCP的HOL问题。
- 前向纠错FEC。
- 类似MPTCP的Connection migration。
三、课后总结
详细讲述了三个方面的实战,值得我们认真去学习。