前端开发程序员Web前端之路

HTTP首部字段详解

2017-12-13  本文已影响193人  落沙w

《图解HTTP》笔记(一)

HTTP报文结构

其中首部字段包括通用首部字段,请求首部字段,响应首部字段,实体首部字段

通用首部字段

Cache-Control

字段可选,多个参数用,隔开

Cache-Conrtrol: private, max-age=0, no-cache

常用指令

Connection

常用指令

http 都是无连接的,所以要使用keep-alive命令保持持久连接,这个命令一般在HTTP1.0中使用,HTTP1.1默认时持久连接

Date

表示HTTP报文的创建时间

Pragma

HTTP/1.0的遗留字段,也是用于缓存控制
所以一般缓存控制时都添加两个字段:

Cache-Control: no-cache
Pragma: no-cache

Trailer

用于事先说明报文主体记录了哪些首部字段

Transfer-Encoding

规定报文主体采用的编码方式

Upgrade

用于检测HTTP协议是否可以使用更高的版本进行通信,参数值:一个不同的通信协议

Upgrade: TLS/1.0, HTTP/1.1
Connection: Upgrade

Upgrade 需要与 Connection 配合使用

via

追踪客户端与服务端之间的请求、响应报文的传输路径

Warning

告知用户关于缓存的警告信息
格式:

Warning: [警告码] [警告的主机:端口号] "[警告内容]" ([日期时间])
Warning: 113 a.baidu.com:8080 "Warning Content" Tue, 03 Jul 2012 05:09:00

常见警告码和警告内容

请求首部字段

Accept

客户端可以处理的媒体类型及媒体类型的优先级
常见媒体类型

优先级:使用参数q表示,参数值范围0-1,精确到小数点后三位,默认优先级为1

示例:

Accept: text/html,application/xhtml+xml;q=0.9, */*;q=0.8

Accept-Charset

客户端支持处理的字符集及字符集处理优先级

Accept-Charset: iso-8859-5, unicode-1-1;q=0.8

Accept-Encoding

客户端支持处理的内容编码内容编码的优先级
常见内容编码:

Accept-Encoding: gzip, deflate

Accept-Language

客户端支持处理的自然语言集自然语言集的优先级

Accept-Language: zh-cn,zh;q=0.9, en-us,en;q=0.3

Authorization

用来告知服务器,用户代理的认证信息

Expect

客户端期望服务器出现的某种特定行为;
例如,等待状态码100响应的客户端在发送请求时,需要指定Expect

Expect: 100-continue

From

用来告知服务器使用用户代理的用户的电子邮件地址;其目的是为了显示搜索引擎等用户代理的负责人的电子邮件的联系方式

Host

用来告知服务器请求资源的主机名称和端口号;通常,相同IP地址下部署了多个域名,因此需要使用Host字段去理解请求的是哪个域名

Host: www.baidu.com

If-Match

条件请求,与Etag搭配使用,只有当If-Match的值与Etag值匹配时,服务器才会接受请求,否则,返回412 Percondition Failed

If-Modified-Since

条件请求,与Last-Modified搭配使用,只有当Last-Modified的时间在If-Modified-Since之后,服务器才会接受请求;即只有在If-Modified-Since字段指定的日期后资源发生了更新,服务器才会接受请求。否则,返回304 Not-Modified

//客户端
If-Modified-Since: Thu, 15 Apr 2017 00:00:00 GMT 
//服务端返回示例一
200 OK
Last-Modified: Sun, 29 Apr 2017 14:11:22 GMT
//服务端返回示例二
304 Not Modified

If-None-Match

用法与If-Match相反,不再赘述;一般,在GET或HEAD方法中使用If-None-Match可获取最新的资源,与If-Modified-Since有些类似

If-Range

只有当If-Range的值与Etag值或更新的日期时间匹配一致,这个请求可以作为范围请求处理,状态码 206 Partial Content;否则返回全部资源,状态码200;

//客户端
If-Range: "123456"
Range: bytes=5001-10000
//服务端 Etag= 123456 范围请求
206 Partial Content
Content-Range: bytes=5001-10000/10000
Content-length: 5000
//服务端 Etag= 456789 返回全部资源
200 OK
Etag: "456789"

If-Unmodified-Since

If-Modified-Since作用相反,不再赘述;即指定的资源只有在字段值指定的日期后未发生更新,才处理请求,否则返回412 Precondition Failed

Max-Forwards

指定报文可经过的服务器最大数目,每经过一个服务器,值减1,当Max-Forwards值为0时,不再进行转发,直接返回响应

Max-Forwards: 10

Proxy-Authorization

接受到代理服务器发出来的认证质询时,客户端会发送包含首部字段proxy-Authorization的请求,以告知服务器认证所需要的信息;与Authorization不同的是,认证行为发生在客户端与代理之间

Proxy-Authorization: Basic dGjwdiSDsngd5

Range

范围请求,告知服务器请求资源的指定范围,请求成功时返回206 Partial Content;若无法处理请求则返回全部资源

Range: bytes=5001-10000

Referer

告知服务器请求的原始资源的URI

TE

客户端能够处理响应的传输编码方式相对优先级,它与Accept-Encoding的区别是它是传输编码,而Accept-Encoding内容编码;

TE: gzip, deflate;q=0.5

TE的另一种用法是,指定伴随trailer字段的分块传输编码方式

TE: trailers

User-Agent

将创建请求的浏览器和用户代理名称等信息传达给服务器

响应首部字段

Accept-Ranges

告知客户端是否能处理范围请求,能处理返回值为bytes,不能则返回none

Accept-Ranges: bytes

Age

告知客户端,源服务器在多久前创建了响应,字段值单位为;若创建该响应的服务器是缓存服务器,则Age值是指缓存后的响应再次发起认证到认证完成的时间值。代理创建响应时间必须加上首部字段Age

ETag

告知客户端实体标识,是一种可将资源以字符串形式做唯一性标识的方式。当资源更新时,ETag值也会更新;

强ETag值和弱ETag值
强ETag值:实体发生任何细微的变化都会改变其值
ETag: "uasg-1234"
弱ETag值:只用于提示资源是否相同。只有资源发生根本改变,才会改变ETag值。弱ETag值会在字段最开始附加/W
ETag: W/"usag-1234"

Location

将响应接收方引导至另一个不同的资源,配合3XX:Redirection 响应,提供重定向的URI

Proxy-Authenticate

该字段会把由代理服务器所要求的认证信息发送给客户端,其认证行为是在客户端与代理之间进行的。

Proxy-Authenticate: Basic realm="Usagidesign Auth"

Retry-After

告知客户端多久之后再次发送请求,常配合503 Service Unavailable3XX Redirect响应,字段值:具体时间/秒数

Retry-After: 600

Server

告知客户端服务器上的应用程序信息

Server: Apache/2.2.17 (Unix)

Vary

用于缓存控制,在代理服务器接收到源服务器返回包含Vary指定项的响应后,仅对请求中含有相同Vary指定首部字段的请求返回缓存。
例如:

Vary: Accept-Language

当代理服务器接收到带有Vary首部字段指定获取资源的请求时,如果使用的Accept-Language字段的值相同,那么就直接从缓存返回响应;反之,则需要从源服务器端获取资源后才能作为响应返回

vary的意义在于告诉代理服务器/缓存/CDN,如何判断请求是否一样,vary中的组合就是服务器/缓存/CDN判断的依据,比如Vary中有User-Agent,那么即使相同的请求,如果用户使用IE打开了一个页面,再用Firefox打开这个页面的时候,CDN/代理会认为是不同的页面,如果Vary中没有User-Agent,那么CDN/代理会认为是相同的页面,直接给用户返回缓存的页面,而不会再去web服务器请求相应的页面。

WWW-Authenticate

用于HTTP访问认证。它会告诉客户端适用于访问请求URI所指定资源的认证方案(Basic 或 Digest)和带参数提示的质询(challenge)

WWW-Authenticate: Basic realm="Usagidesign Auth"

实体首部字段

Allow

通知客户端支持的HTTP方法;当服务器接收到不支持的HTTP方法时,会返回405 Method Not Allowed,同时会返回所有支持的方法

Allow: GET, HEAD

Content-Encoding

告知客户端服务器对实体的主体部分选用的内容编码方式

Content-Encoding: gzip

Content-Length

表示实体主体部分的大小,单位字节

Content-Location

给出与报文主体部分相对应的URI。和首部字段Location不同,Content-Location 表示的是报文主体返回资源对应的URI

Content-MD5

该字段是由一串 MD5 算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达

Content-Range

该字段针对范围请求,告诉客户端返回的实体哪个部分符合范围请求。

Content-Range: 当前发送部分/整个实体大小
Content-Range: bytes 5001-10000/10000

Content-Type

说明实体主体内对象的媒体类型,字段值用type/subtype形式赋值

Content-Type: text/html; charset=UTF-8

Expires

该字段会将资源失效的日期告诉客户端,在指定日期之间,会一直使用该资源

Expires: Wed, 04 Jul 2017 08:11:11 GMT

Last-Modified

该字段会指明资源最终修改的时间

为Cookie服务的首部字段

Set-Cookie

用于开始管理客户端状态(配置Cookie)(响应首部字段)
常用字段:

Set-Cookie: status=true; expires=Wed, 04 Jul 2017 08:11:11 GMT; path=/; domain= .baidu.com; Secure; HttpOnly;

Cookie

服务器接收到的Cookie信息(请求首部字段)

上一篇 下一篇

猜你喜欢

热点阅读