这是我参与「第四届青训营 」笔记创作活动的第4天。 本次课程的主要内容是HTTP协议的简介、基本结构、发展历程、常见应用场景等。
(一)HTTP协议初识
概念
HTTP 是一种能够获取如 HTML 这样的网络资源的通信协议。它是在 Web 上进行数据交换的基础,请求通常是由像浏览器这样的接受方发起的。一个完整的 Web 文档通常是由不同的子文档拼接而成的,像是文本、布局描述、图片、视频、脚本等等。
特点
- 简单
- 虽然下一代
HTTP/2协议将 HTTP 消息封装到了帧(frames)中,HTTP 大体上还是被设计得简单易读。HTTP 报文能够被人读懂,还允许简单测试,降低了门槛,对新人很友好。
- 可扩展
- 在
HTTP/1.0中出现的HTTP headers让协议扩展变得非常容易。只要服务端和客户端就新headers达成语义一致,新功能就可以被轻松加入进来。
- 无状态,有会话
- HTTP 是无状态的:在同一个连接中,两个执行成功的请求之间是没有关系的。这就带来了一个问题,用户没有办法在同一个网站中进行连续的交互,比如在一个电商网站里,用户把某个商品加入到购物车,切换一个页面后再次添加了商品,这两次添加商品的请求之间没有关联,浏览器无法知道用户最终选择了哪些商品。而使用 HTTP 的头部扩展,HTTP
Cookies就可以解决这个问题。把Cookies添加到头部中,创建一个会话让每次请求都能共享相同的上下文信息,达成相同的状态。 - 注意,HTTP 本质是无状态的,使用
Cookies可以创建有状态的会话。
(二)协议发展
(三)协议解析————报文
Mehod
| Method | Explanation |
|---|---|
| GET | 请求一个指定资源的表示形式。使用 GET 的请求应该只被用于获取数据。 |
| POST | 用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用。 |
| PUT | 用请求有效载荷替换目标资源的所有当前表示。 |
| DELETE | 删除指定的资源。 |
| HEAD | 请求一个与 GET 请求的响相同的响应,但没有响应体。 |
| CONNECT | 建立一个到由目标资源标识的服务器的隧道。 |
| OPTIONS | 用于描述目标资源的通信选项。 |
| TRACE | 沿着到目标资源的路径执行一个消息环回测试。 |
| PATCH | 用于对资源应用部分修改。 |
特性
-
Safe(安全):不会修改服务器数据的方法,例如 GET、HEAD。OPTIONS
-
Independent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。
- 所有 Safe 的方法 都是 Independent 的
- GET、HEAD、OPTIONS、PUT、DELETE
状态码
RESTful API
缓存
强缓存
-
Expires,时间戳
-
Cache-Control
-
可缓存性
- no-cache :协商缓存验证
- no-store :不使用任何缓存
-
到期
- max-age :单位是秒,存储的最大周期,相对于请求的时间
-
重新验证 重新加载
- must-revalidate :一旦资源过期,在成功向原始服务器验证之前,不能使用
-
协商缓存
- Etag / If-None-Match :资源的特定版本的标识符,类似于指纹
- Last-Modified / If-Modified-Since :最后修改时间
Cookie
(四)场景分析
静态资源
登录