HTTP报文

HTTP报文是在HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容和含义,后面跟着可选的数据部分。

报文的组成

HTTP报文是简单的格式化数据块。每一条报文都包含一条来自客户端的请求,或者来自服务器的响应。它们有三个部分组成:对报文进行描述的起始行(start line)、包含属性的首部块(header),以及可选的、包含数据的主体部分(body)。

  1. HTTP/1.0 200 OK            //起始行 
  2.   
  3. Content-type:text/plain    //首部 
  4. Content-length:19          //首部  
  5.   
  6. Hi I'm a message!          //主体 

报文的语法

所有的HTTP报文可以分为两类:请求报文(request message)和响应报文(response message)。请求报文会向服务器发送一个请求,响应报文会将结果返回个客户端。

报文的语法

请求报文的格式:

  1. <method> <request-UTL> <version> 
  2. <headers> 
  3.   
  4. <entity-body> 

响应报文格式:

  1. <version> <status><reason-phrase> 
  2. <header> 
  3.   
  4. <entity-body> 

下面是对格式中各部分的简要描述

1、方法(method) GET

客户端希望服务器对资源执行的动作。是一个单独的词,比如GET、HEAD或POST。

2、请求的URL(request-URL)

命名了所有请求资源,或者URL路径组件的完整URL。如果直接与服务器进行对话,只要URL的路径组件是资源的绝对路径,通常就不会有什么问题--服务器可以假定 义自己是URL的主机/端口。

3、版本(version) HTTP/1.1

报文所使用的HTTP版本,其格式如下:

   HTTP/<major>.<minor>

其中主要版本号(major)和次要版本号(minor)都是整数。

4、状态码(status)

这三个数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别("成功"、"出错"等)。

5、原因短语(reason-phrase)

数字状态码的可读版本,包含行终止序列之前的所有文本。原因短语只是给人类看的,它不能说明什么。客户端依然采用状态码来判断请求/响应是否成功!

例如:HTTP/1.0 200 NOT OK 客户端依然会当请求已成功处理。因为状态码是200。而原因短语只是说明而已,这对于自定义扩展状态码还是比较有用的。

6、首部(header)

可以有0个或多个首部,每个首部都包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,最后是一个CRLF。首部是由一个 空行 (CRLF)结束 的,表示了首部列表的结束和实体主体的开始。

7、实体的主体部分(entity-body)

实体的主体部分包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分。如GET请求就不包含实体。




相关内容