http首部

http 首部

  首部和方法配合工作,共同决定了客户端和服务器能做什么事情。本节简单讨论使用 HTTP 首部及一些没有在 HTTP/1.1 中明确规定的首部。 在请求和响应报文中都可以用首部来提供信息,有些首部是某种报文专用的,有些首部将更通用一些

  • 通用首部

客户端和服务器都可以使用的首部,可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能(比如 Date 首部就是典型的通用首部,用来说明生成报文的日期与时间)

  • 请求首部

顾名思义,这是请求报文独有的首部。它们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据:Accept: */* 表示客户端会接受与其请求相符的任意媒体类型

  • 响应首部

响应报文有自己的首部集以便为客户端提供信息(比如客户端在与哪种类型的服务器交互),例如:Server:Nginx表示正在与 Nginx 服务器进行交互

  • 实体首部

实体首部指的是用于应对实体主体部分的首部,比如可以用实体首部来说明实体主体部分的数据类型,例如:Content-type:text/html;charset=utf-8告知应用程序,数据是以 utf- 8 字符集表示的 HTML 文档

  • 扩展首部

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

通用首部

  有些首部提供了与报文相关的最基本的信息,它们被称为通用首部,无论报文是何种类型,它们都为其提供一些有用信息。例如,无论是生成请求报文还是响应报文,创建报文的日期和时间都是同一个意思。

首部 描述
Connection 运行客户端和服务器指定与请求 / 响应连接有关的选项
Date 提供日期和时间标志,说明报文是什么时间创建的
MIME-Version 给出发送端使用的 MIME 版本(关于 MIME,见前文)
Trailer如果报文采用了分块传输编码,可以用这个首部列出位于报文 trailer 部分的首部集合
Transfer-Encoding 告知客户端为了保证报文的可靠传输而采用了何种编码方式
Update 给出了发送端可能想要“升级”使用的新版本或协议
Via 显示了报文经过的中间节点(代理或网关)

通用缓存首部

  HTTP/1.0 引入了第一个允许 HTTP 应用程序缓存对象本地副本的首部,这样就不需要总是直接从源端服务器获取资源了,在以后会深入讨论缓存。

首部 描述
Cache-Control 用于随报文传送缓存指示
Pragma 另一种随报文传送指示的方式,但并不专用于缓存

请求首部

  请求首部是只在请求报文中有意义的首部,用于说明是谁或什么在发送请求、请求源自何处、或者客户端的喜好及能力。服务器可以根据请求首部给出的客户端信息试着为客户端提供更好的响应。

首部 描述
Client-IP 提供了运行客户端的机器的 IP 地址
Form 提供了客户端用户的 Email 地址
Host 给出了接收请求的服务器的主机名和端口号
Referer 提供了包含当前请求 URI 的文档的 URL
UA-Color提供了与客户端显示器的显示颜色有关的信息
UA-CPU 给出了客户端 CPU 的类型或制造商
UA-Disp 提供了与客户端显示器能力有关的信息
UA-OS 提供了运行在客户端机器上的操作系统名词及版本
UA-Pixels 提供了客户端显示器的像素信息
User-Agent 将发起请求的应用程序名称告知服务器

Accept 首部

  Accept 首部为客户端提供了“表达期望”的能力,包括它们想要什么,可以使用什么,以及 不想要什么 (最重要的)。这样服务器就可以根据这些额外信息对要发送的内容做出更合适或更明智的决定。Accept 首部会使连接的两端都受益,一方面客户端会得到它们想要的内容,服务器则不会浪费时间和带宽来发送客户端无法使用的东西。

首部 描述
Accept 告诉服务器能够发送哪些媒体类型
Accept-Charset 告诉服务器能够发送哪些字符集
Accept-Encoding 告诉服务器能够发送哪些编码方式
Accept-Language 告诉服务器能够发送哪些语言
TE 告诉服务器可以使用哪些扩展传输编码

条件请求首部

  有时客户端希望为请求加上某些限制,比如如果客户端已经有了一份文档副本,就希望只在服务器上的文档与客户端拥有的副本有所区别时,才请求服务器传输文档。

首部 描述
Expect 允许客户端列出某请求所要求的服务器行为
If-Match 如果实体标记与文档当前的实体标记相匹配,就获取这份文档
If-Modified-Since 除非在某个指定的日期之后资源被修改过,否则限制这个请求
If-None-Match 和 If-Match 正好相反
If-Range 允许对文档的某个范围进行条件请求
If-Unmodified-Since 与 If-Modified_Since 相反
Range 如果服务器支持范围请求,就请求资源的指定范围

安全请求首部

  HTTP 本身就支持一种简单的机制,可以对请求进行质询或响应认证。这种机制要求客户端在获取特定的资源之前,先对自身进行认证,这样就可以使事物稍微安全一些。在以后我们会详细讨论质询 / 响应机制。

首部 描述
Authorization 包含了客户端提供给服务器,以便对其自身进行认证的数据
Cookie 客户端用它向服务器传送有一个令牌——它并不是真正的安全首部,但却隐含了安全功能
Cookie2 用来说明请求端支持的 cookie 版本

代理请求首部

  这部分的内容也是要在以后进行详细的讨论,随着互联网上代理的普遍应用,人们定义了几个首部来协助其更好地工作

首部 描述
Max-Forward 在通往源端服务器的路径上,将请求转发给其他代理或网关的最大次数
Proxy-Authorization 与 Authorization 首部相同,但这个是在与代理进行认证时使用的
Proxy-Connection 与 Connection 首部相同,但这个是在与代理进行连接时使用的

响应首部

  响应报文有自己的响应首部集,它为客户端提供了一些额外信息,比如谁在发送响应、响应者的功能、甚至与响应相关的一些特殊指令。这些指令有助于客户端处理响应,并在将来发起更好的请求。

首部 描述
Age(从最初创建开始到现在)的响应持续时间
Public 服务器为其资源支持的请求方法列表
Retry-After 如果资源不可用的话,在此日期或时间重试
Server 服务器应用程序软件的名词和版本
Title 对 HTML 文档来说,就是 HTML 文档的源端给出的标题
Warning 比原因短语更详细一些的警告报文

实体首部

  有很多首部可以用来描述 HTTP 报文的负荷,由于请求和响应报文中都可能包含实体部分,所以在这两种类型的报文中都可能出现这些首部

  实体首部提供了有关实体及内容的大量信息,从有关对象类型的信息,到能够对资源使用的各种有效的请求方法,总之实体首部可以告知报文的接收者它在对什么进行处理

首部 描述
Allow 列出了可以对此实体执行的请求方法
Location 告知客户端实体实际位于何处,用来将接收端定向到资源(很可能是新的)URL 上去

内容首部

  内容首部提供了与实体内容有关的特定信息,说明了其类型,尺寸及处理它的其他有用信息。比如,Web 浏览器可以通过查看返回的内容类型,得知如何处理对象。

首部 描述
Content-Base 解析主体中的相对 URL 时使用的基础 URL
Content-Encoding对主体执行的任意编码方式
Content-Language 理解主体时最适宜使用的自然语言
Content-Length 主体的长度或尺寸
Content-Location 资源实际所处的位置
Content-MD5 主体的 MD5 校验和
Content-Range 在某个资源中此实体表示的字节范围
Content-Type 这个主体的对象类型

实体缓存首部

  通用的缓存首部说明了如何或什么时候进行缓存。实体的缓存首部提供了与被缓存实体有关的信息——比如,验证已缓存的资源副本是否仍然有效。在以后我们会深入探讨 HTTP 请求和响应的缓存。

首部 描述
BTag 与此实体相关的实体标记
Expires 实体不再有效,要从原始的源端再次获取此实体的日期和时间
Last-Modified 这个实体最后一次被修改的日期和时间