HTTP报文理解

HTTP报文携带着HTTP协议交互的信息,可以理解为它为搬东西的包裹,来搬运交换的信息。
其中有两种类型的报文,一是客户端发送的请求到服务器的HTTP报文叫做请求报文,二是服务器响应给客户端的叫响应报文。

avatar

请求报文组成部分

HTTP 报文大致可分为请求行、请求头、空行、请求主体四部分。

  • 请求行
  • 请求头
  • 空行
  • 请求数据

请求报文

请求行
组成:请求方式 + 请求URI + HTTP版本 + CR LF(换行)
HTTP请求是客户端发送的用于在服务器上启动操作的消息。它们的起始行包含三个元素,例如,GET /index.html HTTP/1.1。

HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

  • GET: 请求目标通常是URL,或者协议,端口和域的绝对路径通常由请求上下文来表征。此请求目标的格式在不同的HTTP方法之间有所不同。有可能绝对路径,最后跟一个“?”和查询字符串。这是最常见的形式,称为原始形式,并且与GET,POST,HEAD和OPTIONS方法一起使用。如:GET /index.html?id=1 HTTP/1.1
  • POST: 对于不适合使用GET方式的情况(比如账号登录),可以使用POST方式,因为使用POST方法可以允许客户端给服务器提供信息较多。POST方法将请求参数封装在HTTP请求数据中,以“键:值”的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中。
  • HEAD: HEAD就像GET,只不过服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。当我们只需要查看某个页面的状态的时候,使用HEAD是非常高效的,因为在传输的过程中省去了页面内容。

请求头部

avatar

请求头部由键值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

  • User-Agent:产生请求的浏览器类型。
  • Accept:客户端可识别的内容类型列表。
  • Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

空行
最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。

请求数据
请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-TypeContent-Length

响应报文

请求行
组成:HTTP版本 + 状态码 + 状态码描述 + CR LF(换行)
响应报文结构与请求报文结构唯一的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。

HTTP状态码被分为五大类:

  1. 状态代码由服务器发出,以响应客户端对服务器的请求。
  2. 1xx(信息):收到请求,继续处理
  3. 2xx(成功):请求已成功接收,理解和接受
  4. 3xx(重定向):为了完成指定的动作,必须接受进一步处理
  5. 4xx(客户端错误):请求包含错误的语法或无法满足
  6. 5xx(服务器错误):服务器不能正确执行一个正确的请求