Skip to content

HTTP

HTTP(超文本传输协议,Hypertext Transfer Protocol)是五层网络模型中的应用层的一种协议,用于传输超文本和媒体资源。定义了 Web 客户端(如浏览器)和 Web 服务器之间的通信规则。

特点

  • 无状态:HTTP 是一个无状态协议,每个请求都是独立的,与之前的请求或后续的请求无关。这意味着服务器不会自动保存任何请求的信息。为了维护会话状态,需要使用 Cookies、Sessions 等机制。
  • 简单:HTTP 消息是纯文本格式的,易于理解和调试。HTTP/1.x 版本中,消息由头部和主体两部分组成。
  • 灵活:HTTP 可以传输任何类型的数据,不限于文本数据,可以通过 Content-Type 头来指定数据类型。

报文

请求

HTTP 请求内容由请求行、请求头、请求体组成。

  • 请求行:由三部分内容,以空格隔开,分别为 请求方法、资源路径、http 版本,以换行结束
  • 请求头:提供关于客户端环境、请求主体和请求本身的信息,若干键值对组成,以回车隔开,双换行结束
  • 请求体:要发送给服务器的数据,数据类型对应请求头中 Content-Type 的 MIME 类型
http
POST /login HTTP/1.1
Host: http://localhost:3000
Content-Type: application/json

{
  "username": "admin",
  "password": "123123",
}

提示

1.query 参数中不能包含非 ASCII 码字符,如果有浏览器会自动编码。

2.query 参数有最大长度限制,不宜在此位置存放过长的参数。

响应

HTTP 响应内容由响应行、响应头、响应体组成。

  • 状态行:包括 HTTP 版本、状态码和状态描述。
  • 响应头:提供关于服务器和响应主体的信息(如 Content-Type、Content-Length)。
  • 响应主体:服务器返回给客户端的数据。
http
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 137

<html>
  <head><title>Example</title></head>
  <body><p>Hello, World!</p></body>
</html>

常见请求方法

HTTP 定义了一组请求方法,以表示该请求要执行的操作;实际上请求方法的本质都是一样的,只是按不同的语义进行了区分。

  • GET:获取数据
  • POST:提交数据
  • PATCH: 修改部分数据
  • PUT:修改数据
  • DELETE:删除数据
  • HEAD:获取数据的笼统信息(如大小、类型等)。不返回响应体
  • OPTIONS:用于描述请求的选项

常见 HTTP 状态码

状态码由开发服务器的人控制返回,有时候并不完全正确

1xx(信息性状态码)

  • 100 Continue:服务器收到请求的初始部分,客户端应继续发送请求的其余部分。

2xx(成功状态码)

  • 200 OK:请求成功。
  • 201 Created:请求成功并创建了新的资源。

3xx(重定向状态码)

  • 301 Moved Permanently:资源永久移动到新位置。
  • 302 Found:资源临时移动到新位置。

4xx(客户端错误状态码)

  • 400 Bad Request:请求无效。
  • 401 Unauthorized:需要身份验证。
  • 403 Forbidden:服务器拒绝请求。
  • 404 Not Found:资源未找到。

5xx(服务器错误状态码)

  • 500 Internal Server Error:服务器内部错误。
  • 502 Bad Gateway:网关或代理服务器收到无效响应。
  • 503 Service Unavailable:服务器当前无法处理请求。

安全性

HTTP 本身是不安全的,因为传输的数据是明文的。为了保护数据的安全性,可以使用 HTTPS(HTTP Secure),它在 HTTP 基础上增加了 TLS/SSL 加密层,确保数据在传输过程中不会被窃取或篡改。