协议头(一)

坑军之王的头像
坑军之王
174

HTTP(Hyper Text Transfer Protocol超文本传输协议)用于传输WWW模式的数据,采用请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本及请求修饰符、客户。信息和内容类似于MIME的消息结构。服务器以一个状态行为作为相应,响应的内容包括信息协议的版本,成功或错误编码加上包含服务器信息、实体元信息和可能的实体内容。

通常情况下HTTP消息包括客户端向服务器的请求信息和服务器向客户端发送的响应信息。这两种类型的消息由一个起始行,一个或多个头域,一个只是头域结束的空行和可选择的消息体组成。

HTTP的头域包括通用头、请求头、响应头和实体头四个部分。

每个头域由一个域名、冒号和值域三部分组成。

 

1、通用头

是客户端和服务器都可以使用的头部,可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能,如Date头部。

包含缓存头部Cache-Control、Pragma及信息性头部Connection、Date、Transfer-Encoding、Update、Via。

1.1 Cache-Control

指定请求和响应遵循的缓存机制,在请求消息或响应消息中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。指令如下:

类型

指令

说明

请求指令

no-cache

指示请求或响应消息不能缓存,实际上是可以存储在本地缓存区中的,只是在与原始服务器进行新鲜度验证之前,缓存不能将其提供给客户端使用

no-store

防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。

max-age

客户端可以接收生存期不大于指定时间(以秒为单位)的响应

min-fresh

客户端可以接收响应时间小于当前时间加上指定时间的响应

max-stale

客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息

only-if-cached

只有当缓存中有副本存在时,客户端才会获得一份副本

响应指令

Public

指示响应可被任何缓存区缓存,可以用缓存内容回应任何用户

Private

指示对于单个用户的整个或部分响应消息,不能被共享缓存处理,只能用缓存内容回应先前请求该内容的那个用户

 

1.2 Date

Date头域表示消息发送的时间,服务器响应中要包含这个头部,因为缓存在评估响应的新鲜度时要用到,其时间的描述格式由RFC822定义。例如,Date:Mon, 31 Dec 2001 04:25:57 GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

1.3 Pragma

Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同。

1.4 Connection

Connection表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。

说明

Close

告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了

Keepalive

告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求。

Keep-Alive

如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(秒),如Keep-Alive:300

1.5 Transfer-Encoding

WEB 服务器表明自己对本响应消息体(不是消息体里面的对象)作了怎样的编码,比如是否分块(chunked)

1.6 Upgrade

它可以指定另一种可能完全不同的协议,如HTTP/1.1客户端可以向服务器发送一条HTTP/1.0请求,其中包含值为“HTTP/1.1”的Update头部,这样客户端就可以测试一下服务器是否也使用HTTP/1.1了。

1.7 Via

列出从客户端到 OCS 或者相反方向的响应经过了哪些代理服务器,他们用什么协议(和版本)发送的请求。

当客户端请求到达第一个代理服务器时,该服务器会在自己发出的请求里面添加 Via 头部,并填上自己的相关信息,当下一个代理服务器 收到第一个代理服务器的请求时,会在自己发出的请求里面复制前一个代理服务器的请求的Via头部,并把自己的相关信息加到后面,以此类推,当 OCS 收到最后一个代理服务器的请求时,检查 Via 头部,就知道该请求所经过的路由。例如:Via:1.0 236-81.D07071953.sina.com.cn:80 (squid/2.6.STABLE13)

用户评论
评论列表