HTTP权威指南--第三章 HTTP报文

如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹了。
报文是如何流动的。
HTTP报文的三个组成部分。
请求和响应报文之间的区别。
请求报文支持的各种功能。
和响应报文一起返回的各种响应码。
各种各样的HTTP首部都是用来做什么的。

3.1 报文流

报文在客户端、服务器和代理之间流动,术语“流入”、“流出”、“上游”和“下游”都是用来描述报文方向的。

3.1.1 报文流入源端服务器

3.1.2 报文向下游流动

不管是请求还是响应报文都会想下游流动。所有报文的发送者都在报文的接受者的上游。

3.2 报文的组成部分

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

3.1.2 报文的语法

请求报文格式:

<method> <require-URL> <version>
<headers>

<entity-body>

响应报文的格式:

<version> <status> <reason-pharse>
<headers>

<entity-body>

原因短语:数字状态码的可读版本,包含行终止序列之前的所有文本。

3.2.2 起始行

1.请求行

GET /test/hi-there.txt HTTP/1.1

2.响应行

HTTP/1.0 200 OK

响应报文使用的HTTP版本, 数字状态码和描述操作状态的原因短语。
3.方法

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

由于HTTP被设计的易于扩展,有些服务器可以有自己的扩展方法。
4.状态码
常见响应状态,服务器可能会告诉你:
1.请求成功完成
2.无法找到所请求的资源
3.你没有访问权限
4.资源被移动到其他地方

5.原因短语
与状态码成对出现。

6.版本号

3.2.3 首部

跟在起始行后面的就是零个、一个或多个HTTP首部字段。
1.首部分类
通用首部:既可以出现在请求报文又可以出现在响应报文中。
请求首部:提供更多有关请求的信息。
响应首部:提供更多关于响应的信息。
实体首部:描述主体的长度和内容,或者资源自身。
扩展首部:规范中没有定义的新首部。
2.首部延续行
将长的首部分为多行可以提高可读性。

3.2.4 实体的主体部分

是HTTP报文的负荷,可以是很多类型的数字数据:图片、视频、HTML文档、软件应用程序、信用卡事务、电子邮件等。

3.2.5 版本0.9的报文

很简单,请求中只包含方法和请求URL,响应中只包含实体。没有版本信息、状态码或原因短语,也没有首部。

3.3 方法

3.4 状态码

3.4.1 100-199 信息性状态码

100 Continue

3.4.2 200-299 成功状态码

对不同类型的请求有不同的成功状态码。

3.4.3 300-399 重定向状态码

要么告知客户端使用替代位置来访问他们所感兴趣的资源,要么就提供一个替代的响应而不是资源的内容。

3.4.4 400-499 客户端错误状态码

有时,客户端会发送一些服务器无法处理的东西,比如格式错误的请求报文,或者常见的是,请求一个不存在的URL。

3.4.5 500-599 服务器错误状态码

3.5 首部

首部和方法配合工作,共同决定客户端和服务器能做什么事情。可以将首部分为五个主要的类型。
1.通用首部
Date首部提供构建报文的日期和时间。
2.请求首部
比如客户端期望收到什么类型的数据。
Accept:/
3.响应首部
提供客户端一些信息。如server首部告知服务器版本。
4.实体首部
适用于对应实体主体部分的首部。比如,说明实体主体部分数据类型。

Content-Type: text/html; charaset=iso-latin-1

5.扩展首部
非标准首部,由应用程序开发者创建。即使不知道这些扩展首部的意义,HTTP程序也要接受并转发它们。

3.5.1 通用首部

3.5.2 请求首部

请求首部用于说明是谁或什么在发送请求、请求源自何处,或者客户端的喜好及能力。服务器可以根据请求首部试着为客户端提供更好的响应。
1.Accept首部:为客户端提供了一种将其喜好和能力告知服务器的方式,
Accept
Accept-Charset
Accept-Encoding
Accept-Language
2.条件请求首部:客户端希望为请求加上某些限制。要求服务器在对请求进行响应之前确保条件满足,比如客户端有一个副本文件,要求只有服务端的文件发生变更时才返回对应响应。
Except
If-Match
If-Modified-Since
If-None-Match
If-Range:允许对文档的某个范围进行条件请求。
Range:如果服务器支持范围请求,就请求资源的指定范围。
3.安全请求头部
HTTP本身就提供一种简单的机制,可以对请求进行质询/响应认证。这种机制要求在客户端获取特定的资源之前,先对自身进行认证,这样就可以使事务稍微安全一些。
Authorization
Cookie
Cookie2:用来说明请求端支持的cookie版本。
4.代理请求首部

3.5.3 响应首部

可以说明:谁在发送响应,响应者的功能,甚至与响应相关的一些特殊指令。
1.协商首部
如果资源有多种表示方法,如某文档的不同语言版本,可以协商。
2.安全响应首部
就是HTTP的质询/认证机制的响应侧。
Proxy-Authenticate:来自代理对客户端的质询列表
Set-Cookie:不是真正的安全首部,但隐含有安全功能,可以在客户端设置一个令牌,以便服务器对客户端进行标识。
Set-Cookie2:
WWW-Authenticate:来自服务器对客户端的质询列表。

3.5.4 实体首部

可以用来描述HTTP报文负荷。在请求和响应报文中都有可能出现实体首部。它提供了有关实体及其内容的大量信息,从有关对象类型的信息到能够对资源使用的各种有效的请求方法。总之,实体首部可以告知报文接受者它在对什么进行处理。
Allow:列出了可以对此实体执行什么请求方法。
Location:告知客户端实体实际上位于何处,用于将接收端定向到资源的(可能是新的)位置(URL)上去。
1.内容首部
说明了实体内容的类型、尺寸以及处理它所需的其他有用信息。

2.缓存首部
通用的缓存首部说明了如何或什么时候进行缓存。实体的缓存首部提供了与被缓存实体有关的信息-比如,验证已缓存的资源副本是否依然有效所需的信息,以及更好滴估计已缓存资源何时失效所需的线索。
ETag:与此实体相关的实体标记
Expires:实体不在有效,要从原始的源端再次获取此实体的日期和时间。
Last-Modified:这个实体最后一次被修改的日期和时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值