HTTP基础知识(六)
六、HTTP首部
1、HTTP请求报文:由方法、URI、HTTP版本、HTTP首部字段等部分构成。
HTTP响应报文由HTTP版本、状态码、HTTP首部字段构成。
HTTP首部字段主要用于传递额外信息(如:报文主体大小、所使用语言、认证信息等)。
2、HTTP首部字段类型
通用首部字段(General Header Fields):请求报文和响应报文两方都会使用的首部。
请求首部字段(Request Header Fields):从客户端向服务器端发送请求报文时使用的首部。
响应首部字段(Response Header Fields):从服务器端向客户端返回响应报文时使用的首部。
实体首部字段(Entity Header Fields):针对请求报文和响应报文的实体部分使用的首部。
HTTP/1.1的首部字段介绍在之前的已有
3、HTTP首部字段的分类:
(1)端到端首部(End-to-end Header)
分在此类别中的首部会转发给请求/响应对应的最终接受目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。
(2)逐跳首部(Hop-by-hop Header)
分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。
属于逐跳首部的字段有8个,分别是:
4、HTTP/1.1通用首部字段
(1)Cache-Control
此字段用于操作缓存的行为。
指令的参数是可选的,多个指令之间通过“,”分隔。
缓存请求指令:
指令 | 参数 | 说明 |
no-cache | 无 | 强制向源服务器再次认证 |
no-store | 无 | 不缓存请求或响应的任何内容 |
max-age = [秒] | 必需 | 接受已过期的响应 |
max-stale = [秒] | 可省略 | 接受已过期的响应 |
min-fresh = [秒] | 必需 | 期望在指定时间内的响应仍有效 |
no-transform | 无 | 代理不可更改媒体类型 |
only-if-cached | 无 | 从缓存获取资源 |
cache-extrension | - | 新指令标记(token) |
缓存响应指令
指令 | 参数 | 说明 |
public | 无 | 可向任意方提供响应的缓存 |
private | 可省略 | 仅向特定用户返回响应 |
no-cache | 可省略 | 缓存前必须先确认其有效性 |
no-store | 无 | 不缓存请求或响应的任何内容 |
no-transform | 无 | 代理不可更改媒体类型 |
must-revaildate | 无 | 可缓存但必须再向源服务器进行确认 |
proxy-revalidate | 无 | 要求中间换缓存服务器对缓存的响应有效性再进行确认 |
max-age = [秒] | 必需 | 响应最大Age值 |
s-maxage = [秒] | 必需 | 公共缓存服务器响应的最大Age值 |
cache-extension | - | 新指令标记(token) |
(2)Connection
作用:控制不再转发给代理的首部字段;管理持久连接。
指令 | 参数 | 说明 |
不在转发的首部字段名 | 无 | 控制不再转发给代理的首部字段 |
close | 无 | 客户端与服务器端断开连接 |
Keep-Alive | 无 | 在旧版本的HTTP协议上维持持续连接 |
(3)Date
作用:表明创建HTTP报文的日期和时间
(4)Pragma
这是一个HTTP/1.1之前版本的历史遗留字段,仅作为与HTTP/1.0的向后兼容而定义
它只有一种定义:Pragma:no-cache
(5)Trailer
作用:事先说明在报文主体后记录了哪些首部字段。
(6)Transfer-Encoding
作用:规定了传输报文主体时采用的编码方式
HTTP/1.1的传输编码方式仅对分块传输编码有效
(7)Upgrade
作用:用于检测HTTP协议及其他协议是否可使用更高的版本进行通信。
使用Upgrade时,还需要额外指定Connection:Upgrade
(8)Via
作用:追踪客户端与服务器之间的请求和响应报文的传输路径。
Via首部经常回合TRACE方法一起使用。
(9)Warning
作用:告知用户一些与缓存相关的问题的警告。
Warning首部的格式:Warning:[警告码] [警告的主机:端口号] "[警告内容]" ([日期时间])
警告码 | 警告内容 | 说明 |
110 | Response is stale(响应已过期) | 代理返回已过期的资源 |
111 | Revalidation failed(再验证失败) | 代理再验证资源有效性时失败(服务器无法到达等原因) |
112 | Disconnection operation(断开连接操作) | 代理与互联网连接被故意切断 |
113 | Heuristic expiration(试探性过期) | 响应的试用期超过24小时(有效缓存的设定时间大于24小时的情况下) |
199 | Miscellaneous warning(杂项警告) | 任意的警告内容 |
214 | Transformation applied(使用了转换) | 代理对内容编码或媒体类型等执行了某些处理时 |
299 | Miscellaneous persistent warning(持久杂项警告) | 任意的警告内容 |
5、请求首部字段
(0)、概念:请求首部字段是从客户端网服务器端放松请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、 对响应内容相关的优先级等内容。
(1)Accept
作用:可通知服务器,用户能够处理的媒体类型及媒体类型的相对优先级。
当服务器提供多种内容时,将会首先返回权重值最高的媒体类型。
(2)Accept-Charset
作用:通知服务器用户代理支持的字符集及字符集的相对优先顺序。
可一次性指定多种字符集。
(3)Accept-Encoding
作用:告知服务器用户代理支持的内容编码及内容编码的优先级顺序。
(4)Accept-Language
作用:告知服务器用户代理能够代理的自然语言集,以及自然语言集的相对优先级。可一次指定多种自然语言集。
(5)Anthorization
作用:告知服务器,用户代理的认证信息(证书值)
(6)Expect
作用:告知服务器,期望出现的某种特定行为。
若服务器无法理解客户端的期望作出回应而发生错误时,会返回状态码417Expectation Failed
(7)From
作用:告知服务器使用用户代理的用户的电子邮件地址。
(8)Host
作用:告知服务器,请求的资源所处的互联网主机名和端口号。
(9)If-Match(条件请求)
作用:服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。
若不一致则返回412Precondition Failed的响应。
(10)If-Modified-Since
作用:告知服务器若If-Modified-Since字段值早于资源的更新时间,则希望能处理该请求。
若If-Modified-Since字段值之后的时间里资源都没有更新,则返回304Not Modified响应。
(11)If-None-Match
和首部字段If-Match作用相反。
(12)If-Range
作用:告知服务器若指定的If-Range字段值和请求资源的ETag值或时间相一致时,则作为范围请求处理。否则返回全体资源。
(13)If-Unmodified-Since
作用与If-Modified-Since相反。
(14)Max-Forwards
作用:以十进制整数形式指定可经过的服务器最大数目。
服务器在往下一个服务器转发请求之前,Max-Forwards的只减1后重新赋值。当Max-Forwards值为0时,则不再进行转发,而是直接返回响应。
(15)Proxy-Authorization
作用:告知服务器认证所需要的信息。
(16)Range
作用:对于只需获取部分资源的范围请求,此字段即可告知服务器资源的指定范围。
(17)Referer
作用:告知服务器请求的原始资源的URI。
(18)TE
作用:告知服务器客户端能够处理响应的传输编码方式及相对优先级。
(19)User-Agent
作用:将创建请求的浏览器和用户代理名称等信息传达给服务器。
6、响应首部字段
(0)概念:是由服务器端向客户端返回响应报文中所使用的字段,用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等信息。
(1)Accept-Ranges
作用:告知客户端服务器是否能处理范围请求,以指定获取服务器某个部分的资源。
(2)Age
作用:告知客户端,源服务器在多久前创建了响应。单位为秒。
(3)ETag
作用:告知客户端实体标示。是一种可将资源以字符串形式做唯一性标识的方式。
服务器会为每份资源分配对应的ETag值。资源更新时ETag值也需要更新。
(4)Location
作用:将相应接收方引导至某个与请求URI位置不同的资源。
(5)Proxy-Authenticate
作用:把代理服务器所要求的认证信息发送给客户端。
(6)Retry-After
作用:告知客户端应该在多久之后再次发送请求。
(7)Server
作用:告知客户端当前服务器上安装的HTTP服务器应用程序的信息。
(8)Vary
作用:对缓存进行控制。
(9)WWW-Authenticate
作用:用于HTTP访问认证。告知客户端适用于访问请求URI所指定的认证方案(Basic/Digest)和带参数提示的质询(challenge)
7、实体首部字段
(0)概念:包含子在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息。
(1)Content-Encoding
作用:告知客户端服务器对实体的主体部分选用的内容编码方式。
内容编码:指在不丢失实体信息的前提下所进行的压缩。
(2)Content-Language
作用:告知客户端,实体主体使用的自然语言。
(3)Content-Length
作用:表明了实体主体部分的大小,单位是字节。
对实体主体进行内容编码传输时,不能再使用Content-Length。
(4)Content-Location
作用:给出与报文主体部分相对应的URI。
(5)Content-MD5
作用:检查报文主体在传输过程汇总是否保持完整,以及确认传输到达。
(6)Content-Range
作用:告知客户端作为相应返回的实体的哪个部分符合范围请求。单位为字节。
(7)Content-Type
作用:说明了实体主体内对象的媒体类型。
(8)Expires
作用:告知客户端资源失效的日期。
(9)Last-Modified
作用:指明资源最终修改的时间。
8、为Cookie服务的首部字段
(0)概念:管理服务器与客户端之间状态的Cookie
(1)Set-Cookie
Set-Cookie字段属性
属性 | 说明 |
NAME=VALUE | 赋予Cookie的名称和其值(必需项) |
expires=DATE | Cookie的有效期(若不明确指定则默认为浏览器关闭为止) |
path=PATH | 将服务器上的文件目录作为Cookie的适用对象(若不指定则默认为文档所在的文件目录) |
domain=域名 | 作为Cookie适用对象的域名(若不指定则默认为创建Cookie的服务器的域名) |
Secure | 仅在HTTPS安全通信时才会发送Cookie |
HttpOnly | 加以限制,使Cookie不能被JavaScript脚本访问 |
expires属性
作用:指定浏览器可发送Cookie的有效期。
path属性
作用:用于限制指定Cookie的发送范围的文件目录。
domain属性
作用:通过domain属性指定的域名可做到与结尾匹配一致。
secure属性
作用:用于限制web页面仅在HTTTPS安全连接时,才可以发送Cookie
HttpOnly属性
作用:使JavaScript脚本无法获得Cookie,目的为防止跨站脚本攻击(Cross-site scrioting,XSS)对Cookie的信息窃取。
9、其他首部字段
(1)X-Frame-Options
作用:用于控制网站内容在其他Web网站的Frame标签内的显示问题。
此字段有两个可指定的字段值:DENY(拒绝)、SAMEORIGIN(仅同源域名下的页面匹配时许可)
(2)X-XSS-Protection
作用:这是针对跨站脚本攻击的一种对策,用于控制浏览器XSS防护机制的开关。
字段值分为:0(将XSS过滤设置成无效状态),1(将XSS过滤设置成有效状态)
(3)DNT(Do Not Track)
作用:拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法。
字段值分为:0(同意被追踪),1(拒绝被追踪)
(4)P3P(The Platform for Privacy Preferences,在线隐私偏好平台)
作用:可以让个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的。