首页 > 代码库 > HTTP基础知识(六)

HTTP基础知识(六)

 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,在线隐私偏好平台)
作用:可以让个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的。

HTTP基础知识(六)