HTTP请求与响应报文

HTTP请求报文

HTTP 请求报文由四部分组成,分别是请求行、请求头、空行和请求体,其中空行也是组成部分之一,作用是进行分隔,必不可少。

01_HTTP请求与相应报文.png

请求行

第一行为请求行,由请求方法、URI 和 HTTP 协议版本 3 个字段组成,它们之间用空格分隔,最后以回车和换行符结尾进行内容分割,表示接下来的内容(下一行开始的)不是请求行的内容例如。举例,GET /index.php HTTP/1.1,GET是请求方法,/index.php 是 URI,HTTP/1.1 表示使用的 HTTP 版本为 1.1。

这一行比较好理解,只有请求方法的类型比较多,有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT,其中 GET、POST 最为常用。

请求头

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

  • User-Agent:产生请求的用户代理信息(浏览器信息),比如 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 等;
  • Accept:客户端可识别的内容类型列。比如:text/html,application/xhtml+xml,application/xml;
  • Accept-Language:客户端可接受的自然语言,比如 zh-CN,zh;q=0.8,en;q=0.6,id;q=0.4;
  • Accept-Encoding:客户端可接受的编码压缩格式,比如 gzip, deflate, sdch, br;
  • Host:请求的主机名,允许多个域名同处一个 IP 地址,即虚拟主机;
  • connection:连接方式,有 close 和 keep-alive 两种;
  • close:告诉 WEB 服务器或代理服务器,在完成本次请求的响应后,断开连接;
  • keep-alive:告诉 WEB 服务器或代理服务器。在完成本次请求的响应后,保持连接,以等待后续请求;
  • Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的 cookie;

空行

用户进行内容分割,表示请求头到此为止,下一行的内容不再是请求头。

请求体

请求体包含的就是请求数据,正如上文提高的,当使用的是 GET 方法的时候,没有请求体。

HTTP响应报文

客户端向服务端发送请求之后,服务器接收并处理客户端发过来的请求后正常情况下会返回一个 HTTP 的响应消息,这个就是响应报文。

HTTP 响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。形式上除了状态行之外,其他三个部分与请求报文类似。

02_HTTP请求与相应报文.png

状态行

格式为:HTTP-Version Status-Code Reason-Phrase CRLF 。 其中,HTTP-Version 表示服务器 HTTP 协议的版本;Status-Code 表示服务器发回的响应状态代码;Reason-Phrase 表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

响应头

和请求报文的请求头类似,响应头也由键值对组成,每行一对,键和值用英文冒号 : 分隔。响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和 Request-URI 进一步的信息,典型的响应头有:

响应头 描述
Server 包含处理请求的原始服务器的软件信息
Date 服务器日期
Content-Type 返回的资源类型 (MIME)
Connection 连接方式
close 连接已经关闭
keep-alive 连接已保持,在等待本次连接的后续请求
Cache-Control 缓存控制
Expires 设置过期时间
Set-Cookie 设置 Cookie 信息

空行

作为内容分割,表示以下不再是响应头的内容。

响应体

是服务器返回给浏览器的响应信息。