博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(技术文章翻译)HTTP消息(一)
阅读量:6989 次
发布时间:2019-06-27

本文共 2407 字,大约阅读时间需要 8 分钟。

hot3.png

  HTTP消息

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

消息如何传输

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

request和response之间的不同之处

request所支持的一些方法

response 消息返回的状态码

http 头部行做了些什么

消息的传输

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

上游和下游描述了消息的流动:所有消息都从上游流到下游.

向内/向外(inbound/outbound)
向内和向外指的是消息的请求和响应路径:"向内"即"移向源服务器","向外"即"移向用户代理(user agent)".

消息流向源服务器

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

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

消息流向下游

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

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

3-2

消息的组成部分

http消息是简单的,格式化的数据块。观察一下图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

这里是一个规范的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消息

转载于:https://my.oschina.net/u/731676/blog/268092

你可能感兴趣的文章
mysql 数据类型
查看>>
【逻辑题】逃出生天~
查看>>
【数学题】概率问题之-学生的生日
查看>>
Facebook专家:Hadoop不足以处理大数据
查看>>
gcc常用命令
查看>>
独家专栏 | 为什么国外的无人驾驶原型车,都选择混动车型?
查看>>
相机的照片不小心误删除了怎么办?如何恢复呢?
查看>>
瞎谈“认知计算”
查看>>
抢占云安全管理高地 启明星辰先发云SOC
查看>>
再见,汉堡菜单,我们有了新的 Android 交互设计方案
查看>>
关于selenium&amp;nbsp;IDE找不到元素
查看>>
[WCF安全系列]认证与凭证:用户名/密码认证与Windows认证
查看>>
戴尔科技集团调研表明 数字危机迫在眉睫
查看>>
英特尔Atom推16内核芯片更新至强单片机
查看>>
思科警告:旗下某些产品可能存在无法修补的WannaCrypt漏洞
查看>>
《中国人工智能学会通讯》——9.14 从多标记学习到标记分布学习
查看>>
Verizon PCI报告:防火墙合规性、安全测试是主要问题
查看>>
镖狮网裴向宇谈互联网营销的创业之路
查看>>
构建物联网云平台 “搞活”数据价值
查看>>
国家命脉产业涉密数据 需制度技术双保险
查看>>