HTTP 协议基础笔记
一、什么是 HTTP 协议
HTTP(HyperText Transfer Protocol,超文本传输协议)是 Web 上客户端与服务器之间的通信协议。它是一个无状态的协议,意味着每次请求都是独立的,服务器不会保留上次请求的信息。HTTP 协议定义了客户端如何向服务器发送请求以及服务器如何返回响应,是 Web 应用程序的基础。
二、HTTP 方法(Methods)
HTTP 协议规定了多种请求方法,每种方法对应着不同的操作。常用的 HTTP 方法包括:
-
GET
用于请求获取指定资源GET 请求通常用于数据检索,不应当对服务器上的数据进行修改。- 例:GET /zoos 获取所有动物园信息。
-
POST
用于向服务器发送数据,通常用于创建新的资源或提交表单数据。- 例:POST /zoos 创建一个新的动物园。
-
PUT
用于更新指定资源的全部内容,如果资源不存在,可能会创建该资源。- 例:PUT /zoos/1 更新 ID 为 1 的动物园信息。
-
DELETE
用于删除指定资源。- 例:DELETE /zoos/1删除 ID 为 1 的动物园。
-
HEAD
与 GET 方法类似,但服务器只返回响应头部,不返回消息体,常用于获取资源的元信息。- 例:HEAD /zoos
-
CONNECT
用于建立到服务器的网络连接,通常在代理服务器中使用。- 例:CONNECT example.com:443
-
OPTIONS
用于查询服务器支持哪些 HTTP 方法。- 例:OPTIONS /zoos
-
TRACE
用于追踪请求路径,通过回显请求的内容来进行调试。- 例:TRACE /zoos
-
PATCH
用于对资源进行部分更新。- 例:PATCH /zoos/1 对 ID 为 1 的动物园进行部分更新。
三、HTTP 方法的特性
- 安全性(Safe)
安全的 HTTP 方法不会修改服务器的资源,常见的安全方法包括 GET、HEAD、OPTIONS。 - 幂等性(Idempotent)
幂等性指的是无论请求多少次,结果都是相同的。GET、PUT 和 DELETE 是幂等的,因为它们不会因多次执行而对资源状态产生不同的影响。
四、HTTP 状态码(Status Codes)
HTTP 状态码用来表示服务器对请求的处理结果。状态码被分为五个类别:
1. 信息性状态码(1xx)
| 状态码 | 含义 |
|---|---|
| 100 | Continue:客户端应继续发送请求。 |
| 101 | Switching Protocols:服务器正在切换协议。 |
| 102 | Processing:服务器正在处理请求,但尚未完成。 |
2. 成功状态码(2xx)
| 状态码 | 含义 |
|---|---|
| 200 | OK:请求成功,返回所请求的数据。 |
| 201 | Created:请求成功并且创建了新资源。 |
| 202 | Accepted:请求已被接受,但尚未处理。 |
| 204 | No Content:请求成功,但没有返回任何内容。 |
3. 重定向状态码(3xx)
| 状态码 | 含义 |
|---|---|
| 301 | Moved Permanently:资源已永久移动,客户端应使用新的 URL。 |
| 302 | Found:资源临时移动到新的 URL,客户端可以继续使用旧的 URL。 |
| 304 | Not Modified:资源未修改,客户端可以使用缓存的副本。 |
4. 客户端错误状态码(4xx)
| 状态码 | 含义 |
|---|---|
| 400 | Bad Request:请求无效,服务器无法理解。 |
| 401 | Unauthorized:请求未通过身份验证,客户端需要提供凭证。 |
| 403 | Forbidden:服务器拒绝请求,客户端无权限访问资源。 |
| 404 | Not Found:请求的资源不存在。 |
5. 服务器错误状态码(5xx)
| 状态码 | 含义 |
|---|---|
| 500 | Internal Server Error:服务器内部错误,无法处理请求。 |
| 502 | Bad Gateway:无效的网关响应。 |
| 503 | Service Unavailable:服务不可用,服务器过载或维护中。 |
五、RESTful API 的含义
RESTful API 是一种基于 HTTP 协议的 Web 服务设计风格。它遵循一组约定,使用 HTTP 方法(如 GET、POST、PUT、DELETE)进行资源的创建、读取、更新和删除。RESTful API 设计强调无状态性、客户端-服务器架构和统一接口。
以下是几个常见的 RESTful 请求及其返回码的含义:
| 请求类型 | 请求 URL | 返回码 | 返回码含义 |
|---|---|---|---|
| GET | /zoos | 200 OK | 请求成功,返回所有动物园信息。 |
| POST | /zoos | 201 Created | 请求成功,已创建一个新的动物园。 |
| PUT | /zoos/{id} | 200 OK | 请求成功,更新了指定 ID 的动物园信息。 |
| DELETE | /zoos/{id} | 200 OK | 请求成功,删除了指定 ID 的动物园。 |
| GET | /zoos/{id} | 200 OK | 请求成功,返回指定 ID 的动物园信息。 |
| POST | /zoos/{id} | 400 Bad Request | 请求无效,通常是缺少参数或格式错误。 |
| DELETE | /zoos/{id} | 404 Not Found | 请求的动物园 ID 不存在。 |
六、常用请求头(Request Headers)
以下是常见的 HTTP 请求头及其含义:
- Accept:指定客户端能够处理的媒体类型,例如 Accept: application/json。
- Content-Type:指定请求体的媒体类型,例如 Content-Type: application/json。
- Authorization:包含身份验证信息,例如 Authorization: Bearer 。
- User-Agent:指定客户端软件的信息,如 User-Agent: Mozilla/5.0。
- Cookie:携带客户端的 Cookie 信息,通常用于会话管理。
- Host:请求的主机名和端口号。
- Cache-Control:定义缓存策略,例如 Cache-Control: no-cache。
- If-Modified-Since:指定条件请求时间,用于协商缓存。
- Referer:表示请求的来源页面。
- Accept-Encoding:客户端支持的编码方式,如 gzip。
- Origin:跨域请求时,指定请求的来源域。
七、常用响应头(Response Headers)
以下是常见的 HTTP 响应头及其含义:
- Content-Type:指定响应体的媒体类型。
- Content-Length:响应体的大小。
- Cache-Control:定义缓存策略。
- ETag:资源的唯一标识符,用于缓存验证。
- Location:指定重定向的目标 URL。
- Set-Cookie:服务器设置的 Cookie 信息。
- Access-Control-Allow-Origin:跨域资源共享(CORS)策略,指定允许访问的来源。
- Server:服务器软件信息。
- WWW-Authenticate:指定如何进行身份验证。
八、HTTP 缓存机制
HTTP 缓存机制分为强缓存和协商缓存。
-
强缓存(Strong Cache)
强缓存指的是客户端根据缓存的时间戳直接使用缓存的数据,而不与服务器进行任何交互。常用的强缓存控制方法有:- Expires:指定缓存的过期时间。
- Cache-Control:更细粒度的缓存控制,如 max-age 指定最大缓存时间。
-
协商缓存(Conditional Cache)
如果缓存已过期,客户端会发送请求到服务器进行验证,只有在资源发生变化时才会重新获取。常用的协商缓存方法有:- ETag:资源的标识符,客户端通过 `If
-None-Match` 请求头发送此标识符,服务器根据其判断是否更新。
- Last-Modified:资源的最后修改时间,客户端通过 If-Modified-Since 请求头发送时间,服务器验证是否更新。
- Cookie 和 Set-Cookie
用于客户端与服务器之间存储和交换数据,如会话信息。