HTTP报文的那些事儿

来源:互联网 发布:阿香婆系统优化软件 编辑:程序博客网 时间:2024/06/05 04:15

1. 报文流

  1. HTTP报文是在HTTP应用程序之间发送的数据块。这些数据块已一些文本形式的元信息(meta-information)开头,这些信息描述了报文的内容及含义。
  2. HTTP报文是由一行一行的简单字符串组成的。HTTP报文都是纯文本,不是二进制代码,所以人们可以很方便的对其进行读写。
  3. HTTP使用术语流入(inbound)和流出(outbound)来描述事务处理的方向。HTTP报文会像河水一样流动。不管是请求报文还是响应报文,所有请求报文还是响应报文,所有报文都会向下游(downstream)流动。所有报文的发送者都在接受者的上游(upstream).

    报文流

2. 报文格式(组成部分)

HTTP报文是简单的格式化数据块。它们有三个部分组成:对报文进行描述的起始行(start line)、包含属性的首部(header)块,以及可选的、包含数据的主体(body)部分。

HTTP报文的三个部分

所有的HTTP报文都可以分成两类:请求报文(request message)和响应报文(response message)。请求报文会向Web服务器请求一个动作。响应报文会将请求的结果返回给客户端。

2.1 请求报文格式

<method> <request-URL> <version><headers><entity-body>

其中:

  • 方法(method) : 客户端希望服务器对资源执行的动作。是一个单独的词,详细请参见下表 常用的HTTP方法
  • 请求URL(request-URL) : 命名了所请求资源,或者URL路径组件的完整URL。
  • 版本(version) : 报文所使用的HTTP版本,其格式看起来是这样的 HTTP/<major>.<minor>,其中主要版本号(major)和次要版本号(minor)都是整数。
  • 首部(header) : 可以有零个或多个首部,每个首部都包含一个名字,后面跟着一个冒号( : ),然后是一个可选的空格或者是一个值,最后是一个CRLF。首部是由一个空行(CRLF)结束的,表示了首部列表的结束和实体主体部分的开始。有些HTTP版本,比如HTTP/1.1,要求有效的请求或响应报文中必须包含特定的首部。HTTP的各种首部请参见笔者的 HTTP首部的那些事儿 。
  • 实体的主体部分(entity-body) : 实体的主体部分包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分,有时,报文只是以一个CRLF结束。

常用的HTTP方法:

方法 描述 是否包含主体 GET 从服务器获取一份文档 否 HEAD 只从服务器获取文档的首部 否 POST 向服务器发送需要处理的数据 是 PUT 将请求的主体部分存储在服务器上 是 TRACE 对可能经过代理服务器传送到服务器上去的报文进行追踪 否 OPTIONS 决定可以在服务器上执行哪些方法 否 DELETE 从服务器上删除一份文档 否

2.2 响应报文格式

<version> <status> <reason-phrase><headers><entity-body>

其中:

  • 版本(version) : 报文所使用的HTTP版本,其格式看起来是这样的 HTTP/<major>.<minor>,其中主要版本号(major)和次要版本号(minor)都是整数。
  • 状态码(status-code) : 这三位数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于扫描状态的一般类别(“成功”, “出错”等)。关于HTTP规范定义的状态码及其含义的完整列表请参见笔者的 HTTP状态码的那些事儿 。
  • 原因短语(reason-phrase) : 数字状态码的可读版本,包含行终止序列之前的所有文本。原因短语只对人类有效,因此,比如说,尽管响应行HTTP/1.0 200 NOT OKHTTP/1.0 200 OK中原因短语的含义不同,但同样会被当做成功指令处理。

    注: 原因短语和状态码是成对出现的。原因短语是状态码的可读版本,应用开发者将其传送给用户,用以说明在请求期间发生了什么情况。

  • 首部(header) : 可以有零个或多个首部,每个首部都包含一个名字,后面跟着一个冒号( : ),然后是一个可选的空格或者是一个值,最后是一个CRLF。首部是由一个空行(CRLF)结束的,表示了首部列表的结束和实体主体部分的开始。有些HTTP版本,比如HTTP/1.1,要求有效的请求或响应报文中必须包含特定的首部。HTTP的各种首部请参见笔者的 HTTP首部的那些事儿 。

  • 实体的主体部分(entity-body) : 实体的主体部分包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分,有时,报文只是以一个CRLF结束。

3. 参考资料

  1. HTTP权威指南
  2. 图解HTTP

TODO

  1. HTTP首部字段总结 博文撰写
  2. HTTP状态码的那些事儿 博文撰写
0 0
原创粉丝点击