Skip to content

HTTP

HTTP 属于应用层协议,基于 TCP 协议进行传输。

HTTP 请求类型一般分为 HTTP Request 和 HTTP Response,分别对应客户端发起的 HTTP 请求,服务器返回的 HTTP 响应。

HTTP 请求

一个 HTTP 请求由 3 部分组成:

  1. 起始行

起始行由 HTTP 方法(Method),URI,HTTP 协议版本组成,如 GET / HTTP/1.1

  1. 请求首部(Request Headers)

请求首部由 N 个键值对组成,它们以 CRLF 进行分隔,如

Accept: application;json, text/plain, */*

Accept-Encoding: gzip, deflate, br

  1. 请求体(Request Body)

请求体与请求首部之间会有一个空行(CRLF)

HTTP 响应

一个 HTTP 响应也由 3 部分组成:

  1. 起始行

起始行由 HTTP 协议版本,状态码(status code),状态短语(reason-phrase)组成

  1. 响应首部(Response Headers)

响应首部由 N 个键值对组成,它们以 CRLF 进行分隔,如

Connection: keep-alive

Server: nginx/1.14.2

  1. 响应体(Response body)

响应体与响应首部之间会有一个空行(CRLF)

无状态性

HTTP 协议具有无状态性,HTTP 协议本身不对请求与响应之间的通信状态进行保存。

持久连接

在初始版本的 HTTP 协议中,每进行一次通信都要进行一次 TCP 建立连接和释放连接的过程,增加了通信的开销。

因此,在 HTTP 1.1 版本中和部分的 HTTP 1.0 版本中提供了持久连接,也称作 HTTP keep-alive 或者 HTTP connection reuse。

只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。

在 HTTP 1.1 中,持久连接为默认的连接方式。

管道化

管道化指不用等待前面的 HTTP 请求接收到响应后,再发送后面的 HTTP 请求,能够并行发送多个 HTTP 请求到服务器。

状态码

状态码类别表

类别原因短语
1XXInformation接收的请求正在处理
2XXSuccess请求正常处理完毕
3XXRedirection需要附加操作以完成请求
4XXClient Error服务端无法处理请求
5XXServer Error服务端处理请求出错

2XX 成功

  1. 200 OK

正常处理请求,根据请求方法决定是否返回响应体内容,如 HEAD 方法不返回响应体。

  1. 204 No Content

不返回响应体内容。

  1. 206 Partial Content

根据 HTTP 请求首部中的 Content-Range 字段的值返回部分字节内容。

3XX 重定向

  1. 301 Moved Permanently

永久性重定向。请求的资源已被分配了新的 URI。如果用户将该资源的 URI 保存为了书签,301 会去更新书签。

  1. 302 Found

临时性重定向。请求的资源临时被分配了新的 URI。如果用户将该资源的 URI 保存为了书签,302 不会去更新书签。

  1. 303 See Other

请求的资源存在另一个 URI,希望客户端使用 GET 方法获取请求的资源。

  1. 304 Not Modified

当客户端发送的 HTTP 请求头部中含有 If-Match,If-Modified-Since,If-Non-Match,If-Range,If-Unmodified-Since 其中一个时。304 状态码返回时,不包含任何响应体内容。该状态码和重定向没有关系。

4XX 客户端错误

  1. 400 Bad Request

表示请求中存在错误,修改请求后再次发送。浏览器端会当做 200 OK 状态码进行处理

  1. 401 Unauthorized

表示请求需要通过 HTTP 认证。

  1. 403 Forbidden

表示服务端对请求的资源进行了拒绝。

  1. 404 Not Found

表示无法找到请求的资源。也可以在服务端拒绝请求并不想说明原因时使用。

5XX 服务端错误

  1. 500 Internal Server Error

表示服务端在执行请求时遇到了错误,一般是 Web 应用程序内部故障导致的。

  1. 503 Service Unavailable

表示服务端暂时处于超负载或者正在进行停机维护中,无法处理客户端的请求。