HTTP实用指南学习笔记 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第5天
初识HTTP
-
HTTP全称超文本传输协议(Hyper Text Transfer Protocol)
-
HTTP属于计算机网络,OSI七层模型中的应用层,基于TCP协议。
-
HTTP包含请求与响应两个过程。
-
HTTP可在Header中自定义数据,具有简单可扩展的特点。
-
HTTP不知道上一次传输的数据内容,具有无状态的特点
协议分析
- HTTP/0.9 单行协议:响应中只有HTML文档
- HTTP/1.0 构建可扩展性:增加了Header,状态码,支持多种文档类型
- HTTP/1.1 标准化协议:链接复用、缓存、内容协商
- HTTP/2 更优异的表现:二进制协议、压缩Header、服务器推送
报文
| 请求报文 | 响应报文 |
|---|---|
| GET / HTTP/1.1 | HTTP/1.1 200 OK |
| Host: lcoalhost:8080 Accept: text/html Accept-Language: en-US,en; | Server: Nginx Content-type: text/html; charset: utf-8 Content-length: 19 |
<!DOCTYPE HTML ... |
以上是get请求的简单报文。
| Method | 描述 |
|---|---|
| GET | 请求某一指定资源 |
| PSOT | 讲实体提交到某一特定资源 |
| PUT | 用请求有效荷载替换目标资源的所有当前表示 |
| DELETE | 删除某一资源 |
| HEAD | 请求一个与GET请求的响应相同的响应,但没有响应体 |
| CONNECT | 建立一个到目标资源标识的服务器的隧道 |
| OPTIONS | 用于描述目标资源的通信选项 |
| TRACE | 沿着到目标资源的路径执行一个消息回环测试 |
| PATCH | 用于对资源应用部分修改 |
请求的特点:
Safe(安全的):不会修改服务器数据的方法,如:GET HEAD OPTIONS
Idempotent(幂等):同样的请求被执行一次与连续执行多次效果相同,服务器状态也相同的所有safe的方法都是Idempotent的
如: GET HEAD OPTIONS PUT DELETE
状态码:
| 状态码 | 描述 |
|---|---|
| 1XX | 指示信息,表示请求已接收 |
| 2XX | 成功,表示请求已被成功接收 |
| 3XX | 重定向,完成请求需更进一步的操作 |
| 4XX | 客户端错误,请求出现问题 |
| 5XX | 服务器端错误,服务器未能实现合法请求 |
RESTful API
API设计风格
- 每个URI代表一种资源
- 客户端和服务器之间,传递这种资源的某种表现层
- 客户端通过http方法,对服务器端资源进行操作,实现”表现层状态转化“
| 请求 | 返回码 |
|---|---|
| GET /ResPath | 200 OK |
| POST /ResPath | 201 CREATED |
| PUT /ResPath/ID | 400 INVALID REQUEST |
| DELETE /ResPath/ID | 204 NO CONTENT |
缓存
| 强缓存 | 协商缓存 |
|---|---|
| Expires时间戳 | Etag/If-None-Match: 资源的特定版本标识符 |
| Cache-Control | Last-Modified/If-Modified-Since: 最后修改时间 |
当浏览器发起Get请求后,会首先检查是否有缓存,如果有,会继续判断强缓存是否新鲜,若是则读取缓存,否则进入协商缓存判断。
发展
HTTP/2 概述:更快、更稳定、更简单
帧(frame):帧是HTTP/2通信的最小单位,每个帧包含帧头。至少会标识当前帧所属数据流
消息:与逻辑请求或响应信息对应的完整的一系列帧。
数据流:已建立的连接内的双向字节流,可以承载一条或多条消息。
流控制:阻止发送方向接收方发送大量数据的机制。
HTTPS概述:
HTTPS:Hypertext Transfer Protocol Secure
经过了TSL/SSL加密
两种加密方式:
- 对称加密:加密与解密使用同一密钥
- 非对称加密:加密和解密需要使用两个不同的密钥,分为公钥与私钥
总结
- http请求分为请求头,请求体,空行
- http响应也分为请求头,请求体,空行
- http协议建立于tcp/ip协议之上
- http是一种超文本传输协议,在其之上有https,也就是对http明文的加密传输
- 在http请求中,请求体不一定存在,如get请求