这是我参与「第四届青训营 」笔记创作活动的第5天
HTTP实用指南:
一:初识
1. HTTP:(Hyper Text Transfer Protocol)超文本传输协议。
2. 应用层协议,基于TPC协议。
二:协议分析
1. 状态码:一般用三个数字来表示。
2. 缓存:强缓存和协商缓存。
3. HTTP/2:更快、更稳定、更简单
4. 帧:HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。
5. 消息:与逻辑请求或响应消息对应的完整的一系列帧。
6. 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息。
7. HTTP/2连接都是永久的,而且仅需要每个来源一个连接。
8. 流控制:阻止发送方向接收方发送大量数据的机制。
9. 对称加密:加密和解密都是使用同一个密钥
10. 非对称加密:加密和解密需要使用两个不同的密钥:公钥和私钥
三:常见场景
1. 抓到的状态码为200不一定发起了请求,是本地缓存响应的(强制缓存)
2. 静态资源的部署方案:缓存+CDN+文件名hash
CDN:Content Delivery Network 通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。
3. 登录:表单登录:有options的请求,是跨域(cross-origin)请求,请求之前需要预请求(获知服务端是否允许该跨源请求),是一个复杂请求。
4. 跨域解决方案:
a) 使用代理服务器(同源策略是浏览器的安全策略,不是HTTP的)
b) Iframe(诸多不便)
5. 向地址做的动作:使用POST方法,目的域名http://sso.toutiao.com,目标path/quick_login/v2/
6. 携带信息:Post body,数据格式为form,希望获取的数据格式为json,已有的cookie。
7. 返回信息:数据格式json,各种cookie的信息。
8. 记住登录态:Session+cookie、JWT(JSON web token)
9. SSO(Single Sign On):单点登录。
四:实际应用
1. Ajax之XHR(XMLHttpREquest)
a) UNSENT:代理被创建,但尚未调用open()方法。
b) OPEED:open()方法已经被调用。
c) HEADERS_RECEIVED;send()方法已经被调用,并且头部和状态已经可以获得。
d) LOASING:下载中;responseText属性已经包含部分数据。
e) DONE:下载操作已完成
2. Ajax之Fetch:
a) XMLHttpREquest的升级版
b) 使用Prommise
c) 模块化设计,Response、Request、Header对象
d) 通过数据流处理对象,支持分块读取。
3. 用户体验:网络优化、稳定性、
五:了解更多
1. 通信方式:web Socket
2. Quic:是基于udp封装的新版本协议。