(技术文章翻译)HTTP 消息(一)

本贴最后更新于 4146 天前,其中的信息可能已经事过境迁

  HTTP消息 

     如果把http比作互联网的快递员,那么http消息就是向全世界发送的包裹。在第一章,我们展示了http程序如何彼此发送消息,从而使得它能工作,在这一章中,将告诉你关于http消息--如何创建他们,以及如何理解他们。在读完这一章之后,你将会明白你自己编写的http应用的大多数细节。尤其是你将理解:

消息如何传输

http消息的三个组成部分(开始行,头部行,主体行)

request和response之间的不同之处

request所支持的一些方法

response 消息返回的状态码

http 头部行做了些什么

消息的传输

      http消息是http应用之间传输的数据块,这些数据块以一些元信息(meta-information)文本内容开始,其次是一些可选的数据。这些消息传输与客户端和服务器之间。用术语"inbound","outbound","upstream","downstream"来描述信息传输的方向。http rfc 

上游和下游描述了消息的流动:所有消息都从上游流到下游.
向内/向外(inbound/outbound)
向内和向外指的是消息的请求和响应路径:"向内"即"移向源服务器","向外"即"移向用户代理(user agent)".

消息流向源服务器

http常常使用向内(inbound),向外(outbound)来描述传输方向,http消息向内移向源服务器,向外就是移向用户代理(user agent)

  3-1

消息向内移向源服务器,向外则返回客户端。

 

消息流向下游

http消息流向像河流。无论它是request消息还是response消息,所有的消息都在向下游流动。消息的发送者也就是上游的接受者。

图3-2,当发送request请求时代理1(proxy1)是上游对于代理3(proxy3)来说,反之,当发送response为下游

3-2

3-2

消息的组成部分

http消息是简单的,格式化的数据块。观察一下图3-3这个例子

3-3

每一个消息包含一个来自客户端的request请求,和一个来自服务器的响应。他们主要包括三部分:一个开始行描述协议,一个头部行包含属性,和一个主体行包含数据。

开始行和头部行是ascii的文本,一横线分割。每一行结束,以双字符序列,一个回车符(ascii13)和一个换行符(ascii10)结尾。尾部序列被写作“CRLF”(表示换行)。它对指出http规范以换行(“CRLF”)结尾是有价值的,健壮的应用应该接受这个换行字符。一些比较陈旧的http应用不会发送这个换行字符。

实体,或者消息体是简单的数据块。和开始行和头部行不同。消息体包括文本或者二进制数据,或者可以为空。

在例子3-3中,消息头给你了一些关于主体的信息。content-type行告诉你主体信息,在3-3例子中。他是一个plain-text文本。content-length告诉你这个主体有多大。这里表示有19个字节。

消息语法

所有的http消息分为两种类型:request消息,和response消息。request消息是请求web server的行为。response消息将request请求的结果返回给客户端(client)。request和response消息有相同的消息结构。图-3-4展示了请求一个gif图片的消息。这里是一个规范的request消息

<method> <request-URL> <version>

<headers>

<entity-body>

3-4

图3-4

这里是一个规范的response消息(注意:只有在开始行的语法不一样)

<version> <status> <reason-phrase>

<headers>

<entity-body>

这里是对这几部分的快速描述

方法(method):

 客户端从服务器请求资源的的行为。他们是一个简单的词,如:“get”,“head”,“post”,我们将详细讨论这些方法的细节,在后续的章节中。

request-url:

一个完整的url名称表示了所要请求的资源。关于url路径的组成部分,如果你想直接和服务器交互,最好的方式就是用绝对路径,去请求服务器如host/port的方式,在第二章有关于url的语法细节。

version:

 版本号在http消息中被使用。他的规范如下:

HTTP/<major>.<minor>

这里的major,minor表示整数。我们将在这一章节小幅的讨论http版本。

status-code:

一个三位数,用来描述在request请求中发生了什么。每一个状态吗的第一位表示一种状态(“success”,“error”,等等);

详尽的状态吗在http规范中列出,他们的意思,在这一章将会说明。

reason-phrase(原因):

一个可读数字状态码,包含所有的文本直到换行结束。每一种状态码代表一种原因在http规范中。这些原因为了使人们更好的理解。例如:response 消息中包含“HTTP/1.0 200 NOT OK” and “HTTP/1.0 200 OK”等同与请求成功。否则用其他状态码来表示。

headers:

0或多个headers,每一个名字后面跟着(:)后面加一个空格,然后再跟一个值。再跟一个回车换行。头部行结束用一行空格和回车换行来表示。意味着头部消息结束,主体开始。在http1.1中用一些标题来表示request和response是有效的。

entity-body:

在主体行包括一个任意大小的数据块。并不是所有的消息都包含一个实体。有时,一个消息头只包含一个回车换行。我们将在第15章中讨论实体的细节。

在图3-5中演示了假想的request和response消息

3-5

 

  • HTTP
    75 引用 • 128 回帖 • 1 关注
  • 翻译
    58 引用 • 84 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • someone

    你博客里的所有图片我都看不到啊。

  • someone

    嗯,已经发现这个问题了,是我的图片链接有问题。。[em02],马上会更正过来

  • someone

    平时还是少上传文件,空间不够用的,注意检查服务器的内存使用情况

  • someone

    我空间有 20g 数据盘,内存的话,521mb,通常只会用一般,在我跑了 2 个 tomcat,一个虚拟机,一个数据库的情况下。就是带宽有点低。。