HTTP 协议基础笔记

150 阅读6分钟

HTTP 协议基础笔记

一、什么是 HTTP 协议

HTTP(HyperText Transfer Protocol,超文本传输协议)是 Web 上客户端与服务器之间的通信协议。它是一个无状态的协议,意味着每次请求都是独立的,服务器不会保留上次请求的信息。HTTP 协议定义了客户端如何向服务器发送请求以及服务器如何返回响应,是 Web 应用程序的基础。

二、HTTP 方法(Methods)

HTTP 协议规定了多种请求方法,每种方法对应着不同的操作。常用的 HTTP 方法包括:

  1. GET
    用于请求获取指定资源GET 请求通常用于数据检索,不应当对服务器上的数据进行修改。

    • 例:GET /zoos 获取所有动物园信息。
  2. POST
    用于向服务器发送数据,通常用于创建新的资源或提交表单数据。

    • 例:POST /zoos 创建一个新的动物园。
  3. PUT
    用于更新指定资源的全部内容,如果资源不存在,可能会创建该资源。

    • 例:PUT /zoos/1 更新 ID 为 1 的动物园信息。
  4. DELETE
    用于删除指定资源。

    • 例:DELETE /zoos/1删除 ID 为 1 的动物园。
  5. HEAD
    与 GET 方法类似,但服务器只返回响应头部,不返回消息体,常用于获取资源的元信息。

    • 例:HEAD /zoos
  6. CONNECT
    用于建立到服务器的网络连接,通常在代理服务器中使用。

    • 例:CONNECT example.com:443
  7. OPTIONS
    用于查询服务器支持哪些 HTTP 方法。

    • 例:OPTIONS /zoos
  8. TRACE
    用于追踪请求路径,通过回显请求的内容来进行调试。

    • 例:TRACE /zoos
  9. PATCH
    用于对资源进行部分更新。

    • 例:PATCH /zoos/1 对 ID 为 1 的动物园进行部分更新。

三、HTTP 方法的特性

  • 安全性(Safe)
    安全的 HTTP 方法不会修改服务器的资源,常见的安全方法包括 GET、HEAD、OPTIONS。
  • 幂等性(Idempotent)
    幂等性指的是无论请求多少次,结果都是相同的。GET、PUT 和 DELETE 是幂等的,因为它们不会因多次执行而对资源状态产生不同的影响。

四、HTTP 状态码(Status Codes)

HTTP 状态码用来表示服务器对请求的处理结果。状态码被分为五个类别:

1. 信息性状态码(1xx)
状态码含义
100Continue:客户端应继续发送请求。
101Switching Protocols:服务器正在切换协议。
102Processing:服务器正在处理请求,但尚未完成。
2. 成功状态码(2xx)
状态码含义
200OK:请求成功,返回所请求的数据。
201Created:请求成功并且创建了新资源。
202Accepted:请求已被接受,但尚未处理。
204No Content:请求成功,但没有返回任何内容。
3. 重定向状态码(3xx)
状态码含义
301Moved Permanently:资源已永久移动,客户端应使用新的 URL。
302Found:资源临时移动到新的 URL,客户端可以继续使用旧的 URL。
304Not Modified:资源未修改,客户端可以使用缓存的副本。
4. 客户端错误状态码(4xx)
状态码含义
400Bad Request:请求无效,服务器无法理解。
401Unauthorized:请求未通过身份验证,客户端需要提供凭证。
403Forbidden:服务器拒绝请求,客户端无权限访问资源。
404Not Found:请求的资源不存在。
5. 服务器错误状态码(5xx)
状态码含义
500Internal Server Error:服务器内部错误,无法处理请求。
502Bad Gateway:无效的网关响应。
503Service Unavailable:服务不可用,服务器过载或维护中。

五、RESTful API 的含义

RESTful API 是一种基于 HTTP 协议的 Web 服务设计风格。它遵循一组约定,使用 HTTP 方法(如 GET、POST、PUT、DELETE)进行资源的创建、读取、更新和删除。RESTful API 设计强调无状态性、客户端-服务器架构和统一接口。

以下是几个常见的 RESTful 请求及其返回码的含义:

请求类型请求 URL返回码返回码含义
GET/zoos200 OK请求成功,返回所有动物园信息。
POST/zoos201 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 请求头及其含义:

  1. Accept:指定客户端能够处理的媒体类型,例如 Accept: application/json。
  2. Content-Type:指定请求体的媒体类型,例如 Content-Type: application/json。
  3. Authorization:包含身份验证信息,例如 Authorization: Bearer 。
  4. User-Agent:指定客户端软件的信息,如 User-Agent: Mozilla/5.0。
  5. Cookie:携带客户端的 Cookie 信息,通常用于会话管理。
  6. Host:请求的主机名和端口号。
  7. Cache-Control:定义缓存策略,例如 Cache-Control: no-cache。
  8. If-Modified-Since:指定条件请求时间,用于协商缓存。
  9. Referer:表示请求的来源页面。
  10. Accept-Encoding:客户端支持的编码方式,如 gzip。
  11. Origin:跨域请求时,指定请求的来源域。

七、常用响应头(Response Headers)

以下是常见的 HTTP 响应头及其含义:

  1. Content-Type:指定响应体的媒体类型。
  2. Content-Length:响应体的大小。
  3. Cache-Control:定义缓存策略。
  4. ETag:资源的唯一标识符,用于缓存验证。
  5. Location:指定重定向的目标 URL。
  6. Set-Cookie:服务器设置的 Cookie 信息。
  7. Access-Control-Allow-Origin:跨域资源共享(CORS)策略,指定允许访问的来源。
  8. Server:服务器软件信息。
  9. WWW-Authenticate:指定如何进行身份验证。

八、HTTP 缓存机制

HTTP 缓存机制分为强缓存和协商缓存。

  1. 强缓存(Strong Cache)
    强缓存指的是客户端根据缓存的时间戳直接使用缓存的数据,而不与服务器进行任何交互。常用的强缓存控制方法有:

    • Expires:指定缓存的过期时间。
    • Cache-Control:更细粒度的缓存控制,如 max-age 指定最大缓存时间。
  2. 协商缓存(Conditional Cache)
    如果缓存已过期,客户端会发送请求到服务器进行验证,只有在资源发生变化时才会重新获取。常用的协商缓存方法有:

    • ETag:资源的标识符,客户端通过 `If

-None-Match` 请求头发送此标识符,服务器根据其判断是否更新。

  • Last-Modified:资源的最后修改时间,客户端通过 If-Modified-Since 请求头发送时间,服务器验证是否更新。
  1. Cookie 和 Set-Cookie
    用于客户端与服务器之间存储和交换数据,如会话信息。