HTTP协议实战分析|青训营笔记

78 阅读2分钟

HTTP协议实战分析|青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第9天

一、课程知识要点:

  1. 实战—浏览器篇
  2. 实战—node篇
  3. 实战—用户体验
  4. 了解更多

二、详细知识点介绍:

实战—浏览器篇

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, RequestHeader对象
  • 通过数据流处理对象,支持分块读取

实战—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'))  
});

实战—用户体验

image.png

稳定性

image.png

  • 重试是保证稳定的有效手段,但要防止加剧恶劣情况
  • 缓存合理使用,作为最后一道防线

了解更多

扩展—通信方式

WebSocket

  • 浏览器与服务器进行全双工通讯的网络技术
  • 典型场景:实时性要求高,例如聊天室 
  • URL 使用 ws://或 wss:// 等开头

Quic:Quick UDP Internet Connection

  • 0-RTT 建联(首次建联除外)。
  • 类似TCP的可靠传输。
  • 类似TLS的加密传输,支持完美前向安全。
  • 用户空间的拥塞控制,最新的BBR算法。
  • 支持h2的基于流的多路复用, 但没有TCP的HOL问题。
  • 前向纠错FEC。
  • 类似MPTCP的Connection migration。

三、课后总结

详细讲述了三个方面的实战,值得我们认真去学习。