这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天。
今日学习内容为:HTTP使用指南
一、初识HTTP
经典面试题:从输入网址到渲染完毕,中间发生了什么?
即:解释HTTP流程
- 浏览器解析
url地址,并查找自身缓存- 若缓存未命中,则查找操作系统缓存
- 若仍未命中,则发起
DNS,获取目标服务器ip地址- 根据收取到的
ip地址,建立TCP连接- 客户端发起
HTTP请求- 服务端收到请求,响应数据
- 客户端收到请求,并存入自身缓存
- 关闭
TCP连接
什么是HTTP:超文本传输协议,处于应用层,基于TCP协议,请求-响应式,简单可扩展,无状态
二、协议分析
1. 报文结构分析:
请求报文:
Method Path HTTP-Version
HTTP Headers
Empty Line
Body
响应报文:
Version StatusCode StatusMessage
HTTP Headers
Empty Line
Body
根据RFC规范:
- 安全:不会修改服务器数据的方法
GET、HEAD、OPTIONS - 幂等:同样的请求被执行一次和连续执行多次的效果是一样的,服务器的状态也是一样的。所有安全的方法都是幂等的。
GET、HEAD、OPTIONS、PUT、DELETE
2. 状态码
更多详细的HTTP状态码:
- 201:Created,请求已被成功处理
- 204:No Content,客户不需要离开当前页面
- 206:Partial Content,主题包含所请求的数据区间
- 304:Not Modified,缓存相关
- 307:Temporary Redirect,临时重定向
- 501:Not Implemented,服务器不支持的请求
- 502:Bad Gateway:网关从上游接收到的响应无效
- 503:Service Unavailable,服务器尚未处于可以接受请求的状态
RESTful API:一种API风格Representational State Transfer
- 每一个URI代表一种资源
- 客户端与服务器之间,传递这种资源的某种表现层 3.客户端通过HTTP方法,对服务器资源进行操作,实现表现层状态转化
3. Headers
4. 缓存
5. cookie
6. HTTP2概述
HTTP2最小通信单位:帧,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。更快、更稳定、更简单
消息:与逻辑请求或响应消息对应的完整的一系列帧
数据流:已建立的连接内的双向字节流,可以承载一条或多条消息
交错发送,由接收方重组织
HTTP/2连接都是永久的,而且仅需要每个来源一个连接
流控制:阻止发送方向接收方发送大量数据的机制
7. HTTPS
加密方式:
- 对称加密:加密和解密都是使用同一个密钥
- 非对称加密:加密和解密需要使用两个不同的密钥:
公钥(Public Key)和私钥(Private Key)
三、场景分析
Q:状态码200一定发起了请求吗?
不一定。
from disk cache表示从缓存中获取数据
静态资源方案:缓存 + CDN + 文件名hash
CDN:通过用户就近性和服务器负载的原则,确保内容以一种极为高效的方式为用户的请求提供服务
跨域
同源策略:协议名 + 主机 + 端口号相同
如果三者有任一不同,则会发生跨域
跨域解决方案:
-
CORS
-
代理服务器:同源策略是浏览器的安全策略,而非HTTP的
-
Iframe:有诸多不便,不使用
登陆
记住登陆状态:登录鉴权
-
Cookie + Session:
-
JWT(Json Web Token)
SSO单点登录:
四、实战
1. 浏览器篇
AJAX之XHR:XMLHttpRequest
AJAX之fetch:
- XHR的升级版
- 使用Promise
- 模块化设计,Response、Request、Header对象
- 通过数据流处理对象,支持分块读取
2. node篇
- 标准库:HTTP/HTTPS:默认模块,无需安装其他依赖;功能有限,不是特别友好
axios:支持浏览器、node环境,丰富的拦截器
3. 用户体验
网络优化方面:
稳定性方面:
重试是保证稳定的有效手段,但要防止加剧恶劣情况
缓存合理使用,作为最后一道防线
五、了解更多
WebSocket:
- 浏览器与服务器进行全双工通讯的网络技术
- 典型场景:实时性要求高(聊天室)
- URL使用
ws://或wss://开头
QUIC: