这是我参与「第五届青训营 」笔记创作活动的第5天
一、初识HTTP
什么是http
- Hyper Text Transfer Protocol
- 超文本传输协议
- 应用层协议,基于TCP协议
- 请求响应
- 简单可扩展
- 无状态
二、协议分析
发展历程
协议分析-报文
Method
| GET | 请求一个指定资源的表示形式使用GET的请求应该只被用于获取数据. |
|---|---|
| POST | 用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用 |
| PUT | 用请求有效载荷替换目标资源的所有当前表示 |
| DELETE | 删除指定的资源 |
| HEAD | 请求一个与GET请求的响应相同的响应,但没有响应体 |
| CONNECT | 建立一个到由目标资源标识的服务器的隧道。 |
| OPTIONS | 用于描述目标资源的通信选项。 |
| TRACT | 沿着到目标资源的路径执行一个消息环回测试。 |
| PATCH | 用于对资源应用部分修改。 |
请求特点
Safe (安全的) : 不会修改服务器的数据的方法 GET HEAD OPTIONS ldempotent (幂等) : 同样的请求被执行-次与连续执行多次的效果是一样的, 服务器的状态也是一样的 所有safe的方法都是ldempotent的 GET HEAD OPTIONS PUT DELETE
状态码
| 1xx | 指示情息,表示请求已接收重读处理 |
|---|---|
| 2xx | 成功,表示请求已被或功接收、理解、接受 |
| 3xx | 重定向,要完成请求必须进行更进一步的操作 |
| 4xx | 客户端错误,请求有语法错误或请求无法实现 |
| 5xx | 服务器端错误,服务器末能实现合法的请求 |
- 200OK-客户端请求成功
- 301-资源(网页等)被永久转移到其它URL
- 302 -临时跳转
- 401 Unauthorized -请求未经授权
- 404-请求资源不存在,可能是输入了错误的URL
- 500-服务器内部发生了不可预期的错误
- 504 Gateway Timeout-网关或者代理的服务器无法在规定的时间内获得想要的响应。
RESTful API 一种API设计风格
- 每一个URL代表一种资源
- 客户端和服务器之间,传递这种资源的某种表现层
- 客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”
常用请求头
常用响应头
缓存
在使用缓存会有优先级之分
cookie Set-Cookie-response
协议分析-发展
HTTP/2概述:更快、更稳定、更简单
- 帧(frame) : HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。
- 消息:与逻辑请求或响应消息对应的完整的一系列帧。
- 戳据流:已建立的连接内的双向字节流,可以承载一条或多条消息。
- 二进制
- 交错发送,接收方重组织
特点
- HTTP/2 连接都是永久的,而且仅需要每个来源一一个连接
- 流控制:阻止发送方向接收方发送大量数据的机制
- 服务器推送
https概述
- HTTPS : Hypertext Transfer Protocol Secure
- 经过TSL/SSL加密
- 对称加密:加密和解密都是使用同一个密钥
- 非对称加密,加密和解密需要使用两个不同的密钥:公钥(public key)和私钥(private key)
三、场景分析-静态资源
我们可以通过
from disk cache可知,实际上并没有发起请求,数据是从缓存中获取的。
静态资源方案:缓存+CDN+文件名hash
- CDN : Content Delivery Network
- 通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务
CDN原理图
业务场景
- 表单登录
- 扫码登陆
技术方式
- SSO
打开今日头条登录
分析两个请求
-
Session+cookie
-
JWT(JSON web token):放在请求头
-
SSO:单点登录
- 登录信息共享
跨域
-
CORS ( Cross-Origin Resource Sharing )
-
预请求:获知服务端是否允许该跨源请求(复杂请求)
-
相关协议头
- Access-ControlAllow-0rigin
- Access-Control-Expose-Headers
- Access-Contro-Max-Age
- Access-ControHAllow-Credentials
- Access-Control-Allow-Methods
- Access-ControHAllow-Headers
- Access-ControlRequest-Method
- Access-Control-Request-Headers
- Origin
跨域解决方案
-
CORS
-
代理服务器(应用较多,在webpack的插件解决调试等问题
- 同源策略是浏览器的安全策略, 不是HTTP的
-
Iframe
- 诸多不便
四、实战
浏览器篇
AJAX之Fetch
- XMLHttpRequet的升级版
- 使用Promise
- 模块化设计,Response,Request,Header对象
- 通过数据流处理对象,支持分块读取
node篇
标准库:HTTP/HTTPS
- 默认模块,无需安装其他依赖
- 功能有限/不是十分友好
常用的请求库:axios
- 支持浏览器、nodejs环境
- 丰富的拦截端
用户体验
网络优化
稳定性
- 重试是保证稳定的有效手段,但要防止加剧恶劣情况
- 缓存合理使用,作为最后一道防线
五、了解更多
扩展-通信方式
Websocket
- 浏览器与服务器进行全双工通讯的网络技术
- 典型场景:实时性要求高,例如聊天室
- URL 使用ws://或wss://等开头
QUIC:HTTP3常用部分还在研究阶段
- 0-RTT建联(首次建联除外)。
- 类似TCP的可靠传输。
- 类似TLS的加密传输,支持完美前向安全。
- 用户空间的拥塞控制,最新的BBR算法。
- 支持h2的基于流的多路复用,但没有TCP的
- HOL问题。
- 前向纠错FEC ,
- 类似MPTCP的Connection migration。