青训营Day6——HTTP协议使用指南自学笔记| 豆包MarsCode AI刷题

55 阅读5分钟

HTTP(HyperText Transfer Protocol,超文本传输协议)

是用于客户端(如浏览器)与服务器之间通信的协议。它是 Web(万维网) 的基础协议,支持客户端与服务器之间的数据交换。

  • 应用层协议:HTTP 是一个 应用层协议,属于 OSI 模型 的应用层。它基于底层的传输层协议,如 TCP(传输控制协议)和 UDP(用户数据报协议)。HTTP 使用 TCP 来保证数据的可靠传输(HTTP 默认使用端口 80)。
  • 无状态协议:HTTP 是 无状态的 协议,意味着每次请求之间是相互独立的,服务器不会记住之前的请求。每次请求都会重新开始,不依赖于之前的请求或响应。为了保持某种“状态”,通常会用到 CookiesSession 等机制。
  • 无连接协议:HTTP 协议本身是无连接的,这意味着客户端与服务器之间的连接在每次请求完成后就会断开,不会持续保持。

HTTP 请求和响应模型

HTTP 请求和响应遵循 客户端-服务器模型,客户端向服务器发送请求,服务器返回响应。

  • HTTP 请求:由客户端发起,包含请求行、请求头、请求体(可选)。
  • HTTP 响应:由服务器返回,包含状态行、响应头、响应体(可选)。
1. 请求结构

一个 HTTP 请求由以下部分组成:

  • 请求行(Request Line):由 请求方法(HTTP Method)请求的 URIHTTP 版本 组成。
    • 例如:GET /index.html HTTP/1.1
  • 请求头(Request Headers):包含客户端的环境信息(如浏览器类型、操作系统、接受的响应格式等)。
  • 请求体(Request Body):可选,包含客户端发送到服务器的实体数据,通常在 POST 或 PUT 请求中使用。
2. 响应结构

一个 HTTP 响应包含以下部分:

  • 状态行(Status Line):由 HTTP 版本状态码状态消息 组成。
    • 例如:HTTP/1.1 200 OK
  • 响应头(Response Headers):包含服务器的环境信息(如服务器类型、响应内容类型、缓存策略等)。
  • 响应体(Response Body):可选,包含服务器返回的实际内容,通常是 HTML 文件、JSON 数据或图片等。

HTTP 请求方法

HTTP 协议提供了多种请求方法(也叫做 HTTP 动作),每种方法的作用和语义不同。常见的 HTTP 请求方法有:

1. GET
  • 作用:请求指定资源的表示形式。
  • 用途:获取数据,不应有副作用(例如,获取页面或图像)。
  • 特点:通常用于读取资源,数据附加在 URL 后面(通过查询字符串传递参数)。
2. POST
  • 作用:提交数据,通常用于创建或更新资源。
  • 用途:将数据提交到服务器,可能导致服务器状态变化(如提交表单、上传文件等)。
  • 特点:请求体中包含数据,适合用于提交大量数据。
3. PUT
  • 作用:用请求体中的数据替换指定资源的当前表示。
  • 用途:用于更新资源(例如,更新一个已有的资源)。
  • 特点:如果资源不存在,服务器可能会创建该资源。
4. DELETE
  • 作用:删除指定的资源。
  • 用途:用于删除指定的资源。
5. HEAD
  • 作用:与 GET 请求类似,但不返回响应体,仅返回响应头。
  • 用途:通常用于获取资源的元数据(如文件大小、最后修改时间等)。
6. CONNECT
  • 作用:建立到指定资源的隧道连接(常用于代理服务器中)。
  • 用途:通常用于 HTTPS 请求,通过代理建立加密连接。
7. OPTIONS
  • 作用:请求指定资源支持的 HTTP 方法。
  • 用途:用于探测目标资源的通信选项。
8. TRACE
  • 作用:沿着到目标资源的路径执行一个消息环回测试,帮助调试。
  • 用途:回显服务器收到的请求,通常用于诊断和调试。
9. PATCH
  • 作用:用于对资源进行部分修改。
  • 用途:与 PUT 方法类似,但 PATCH 只对资源进行部分修改。

HTTP 状态码

HTTP 响应中返回一个 状态码 来表示请求的处理结果。状态码通常由三位数字组成,分为以下几类:

1. 1xx:信息性状态码
  • 100 Continue:请求已接受,客户端应继续发送请求的其余部分。
2. 2xx:成功状态码
  • 200 OK:请求成功,服务器已成功处理请求。
  • 201 Created:请求已完成,资源已创建。
  • 204 No Content:请求成功,但没有内容返回。
3. 3xx:重定向状态码
  • 301 Moved Permanently:资源已永久移动到新的 URI。
  • 302 Found:资源临时移动到另一个 URI。
4. 4xx:客户端错误状态码
  • 400 Bad Request:请求无效,服务器无法理解。
  • 401 Unauthorized:请求需要身份验证。
  • 403 Forbidden:服务器拒绝请求。
  • 404 Not Found:请求的资源未找到。
5. 5xx:服务器错误状态码
  • 500 Internal Server Error:服务器遇到错误,无法完成请求。
  • 502 Bad Gateway:网关或代理服务器接收到的响应无效。
  • 503 Service Unavailable:服务器暂时无法处理请求。

HTTP 协议的特点与挑战

  1. 无状态性:每个 HTTP 请求都是独立的,服务器不会保存客户端的状态信息。这使得 HTTP 协议非常简单,但也带来了保持会话状态的挑战。
    • 解决方案:通过使用 CookiesSession 等机制来维护客户端和服务器之间的状态。
  2. 可扩展性:HTTP 协议设计简单,易于扩展。它允许通过 请求头响应头 传递各种自定义信息。
    • 例如,HTTP/2 提供了多路复用、头部压缩和服务器推送等增强特性,提升了性能。
  3. 安全性:HTTP 协议本身不提供安全机制。为了保证数据的安全传输,通常使用 HTTPS(基于 SSL/TLS 的 HTTP)来加密通信。
  4. 性能优化
    • 持久连接:HTTP/1.1 引入了持久连接(Connection: keep-alive),可以避免每次请求都重新建立连接。
    • 缓存机制:HTTP 头中的 Cache-ControlETag 等字段可以用来控制缓存策略,减少不必要的网络请求。