阅读 184

HTTP系列(三)—— HTTP报文

什么是HTTP报文

HTTP报文是简单的格式化数据块,通俗的说,它是用于数据传输的文本字符串。

每条报文都包含一条来自客户端的请求或者一条来自服务器的响应,它们都由三个部分组成:

  • 对报文进行描述的起始行
  • 包含属性的首部
  • 包含数据的主体

HTTP报文可以分为两类:请求报文和响应报文。请求报文会向服务器请求一个动作,响应报文会将请求的结果返回给客户端。无论是请求报文还是响应报文,它们都由上面提到的三个部分组成,不同的是起始行。

请求报文:

方法 请求URL 协议版本号

首部

主体

响应报文:

协议版本号 响应状态码 原因短语

首部

主体

起始行

所有的 HTTP报文都以起始行开始,请求报文的起始行说明了要做些什么,响应报文的起始行说明发生了什么。

请求行

请求报文的起始行又称为请求行,包含了一个方法、请求URL以及协议版本号。这个方法描述了服务器应该执行的操作,请求URL就是定位了一个资源,协议的版本号就是告知服务器,客户端使用的是哪种协议。

方法,可以理解为一个动作,要求服务器如果处理,常用的方法如下:

  • GET,从服务器上获取一个资源,这种方法不包含主体。
  • POST,向服务器发送需要处理的数据(常见的是发送表单数据),这种方法包含主体。
  • PUT,将请求的主体部分储存在服务器上,这种方法包含主体。
  • DELETE,从服务器上删除一个资源,这种方法不包含主体。

响应行

响应报文的起始行也称为响应行,包含了协议版本号,状态码,以及处理结果的原因短语。

状态码是一个由三位数组成的数字,用于告知客户端发生了什么,结果怎样。状态码大致可以分为五类:

  • 100 - 199 表示信息提示
  • 200 - 299 表示成功
  • 300 - 399 表示重定向
  • 400 - 499 表示客户端错误
  • 500 - 599 表示服务器错误

原因短语是响应行最后一个组件,它为状态码提供了文本形式的解释,也就是说,状态码和原因短语是成对出现的,每个状态码对应着不同的原因短语,比如状态码200就对应着OK。

首部

首部和方法配合工作,共同决定了客户端和服务器能做什么。首部大致可以分为以下五类:

  • 通用首部,请求报文和响应报文都可以使用的首部
  • 请求首部,请求报文特有的首部,他们为服务器提供了一些额外的信息
  • 响应首部,响应报文特有的首部
  • 实体首部,用于应对实体主体部分的首部
  • 扩展首部,非标准首部,可以由开发者创建。

通用首部

通用首部,就是请求报文和响应报文都可以使用的首部,常见的通用首部如下:

  • Connection —— 允许客户端和服务器指定与请求/响应连接有关的选项
  • Date —— 说明报文是什么时候创建的
  • MIME-Version —— 说明发送端使用的 MIME 版本
  • Transfer-Encoding —— 告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式
  • Via —— 显示了报文经过的中间节点(代理、网关)

请求首部

请求首部,就是只有请求报文能够使用的首部字段。常见的请求首部如下:

  • Host —— 给出了接收请求的服务器的主机名和端口号
  • User-Agent —— 发起请求的应用程序名称
  • Accept —— 告知服务器能够发送哪些媒体类型
  • Accept-Language —— 告知服务器能够发送哪些语言
  • Accept-Encoding —— 告知服务器能够发送哪些编码方式
  • Authorization —— 客户端提供给服务器的验证数据
  • Cookie —— 客户端使用该字段向服务器发送一个令牌
  • Cache-Control —— 用于随报文传送缓存指示

响应首部

响应首部,只有响应报文能够使用的首部。常见的响应首部如下:

  • Set-Cookie —— 在客户端设置一个令牌,以便对客户端进行标识

实体首部

实体首部,请求和响应报文中都有可能包含实体部分,所以这两种类型的报文都有可能出现这些首部。常见的实体首部如下:

  • Content-Encoding —— 对主体执行的任意编码方式
  • Content-Type —— 这个主体的对象类型
关注下面的标签,发现更多相似文章
评论