这是我参与「第四届青训营 」笔记创作活动的第 6 天
HTTP 实用指南
初识 HTTP
概念
Hyper Text Transfer Protocol 超文本传输协议=
- 应用层协议, 基于 TCP 协议
特点
- 请求, 响应
- 简单可扩展
- 无状态
协议分析
发展
- 0.9: 请求 GET, 响应只有 HTML
- 1.0: 增加了 Header, 状态码, 支持多种文档类型
- 1.1: 链接服用, 缓存, 内容协商
- 2: 二进制协议, 压缩 header, 服务器推送
- 3: 限制只有草案
报文
Method:
- GET, POST, PUT, DELETE, HEAD, CONNECT, OPTIONS, TRACE, PATCH
- Safe: 不会修改服务器数据的方法: GET, HEAD, OPTIONS
- ldempotent(幂等): 多次请求结果一致
状态码:
-
1xx: 已经接受, 继续处理
-
2xx: 请求已被成功接受
- 200 OK, 请求成功
-
3xx: 重定向
- 301 永久转移
- 302 临时跳转
-
4xx: 客户端错误, 请求无法实现
- 401 请求未经授权
- 404 请求资源不存在
-
5xx: 服务端错误
- 500 服务器发送不可预期的错误
- 504 Gateway Timeout 无法在规定时间内获得想要的响应
常用请求头
- Accept
- Content - Type: 实体类型
- Cache - Control: 缓存不缓存
- If - Modified - Since
- Expires: 时间戳
- Max - age: 本地存活多长时间
- If - None - Match
- Cookie: 同域自动携带
- Referer
- Origin
- User - Agent
常用响应头
- Content - Type
- Cache - Control
- Last - Modified
- Expires
- Max - age
- ETag
- Set - Cooike
- Server
- Access - Control - Allow - Origin
缓存
- 先查缓存
cookie
- Name
- Expires
- Path
- Domain
- secure
- HttpOnly
- SameSite
Http2
- 更快, 更稳定, 更简单
- 帧: HTTP/2 通信的最小单位, 没个帧都包含帧头, 至少也会标识出当前帧所属的数据流
- 消息: 与逻辑请求或响应消息对应的完整的一系列帧
- 数据流: 已建立的连接内的双向字节流, 可以承载一条或多条消息
- 连接都是永久的, 仅需要每个来源一个连接
- 流控制: 组织发送方向接受方发送大量数据的机制
HTTPS
- Hypertext Transfer Protocol Secure
常见场景
静态资源部署
- 方案: 缓存 + CDN + 文件名 hash
登录
- 跨域场景下的 options 请求
跨域
CORS (Cross = Origin Resoource Sharing)
- 代理服务器
鉴权
- Session + cookie
- JWT (JSON web token)
SSO
- 单点登录(Single Sign On)
实际应用
浏览器篇
-
AJAX 之 Fetch
- XMLHttpReqquet
- Promise
- 模块化设计, Response, Request, Header
- 数据流处理对象
实战 - node 篇
- 标准库 HTTP / HTTPS
- 默认模块, 但是功能有限
Other
- axios
了解更多
-
WebSocket
-
QUIC: Quick UDP Internet Connection
- 0-RTT 建联
- 类似于 TCP d1kekaochuanshu1
- 前向纠错 FEC
END
\