HTTP报文首部、空行、报文主体
HTTP的首部字段:
首部字段值:字段值 比如Content-Type:text/html 表示主题的对象类型
4种HTTP首部字段类型:
通用首部字段:请求报文和响应报文都会用
请求首部字段:Request 从客户端向服务端发送时用的首部
响应首部字段:Response 从服务器端向客户端返回响应报文
实体首部字段:请求和响应报文肢体部分都会用的首部
非HTTP / 1.1首部字段,比如Cookie等统一归纳在RFC4229 HTTP Header Field Registration中
End to end首部和Hop by hop首部
端到端首部:会转发给请求/响应对应的最终接收目标,且必须保存在由缓存生成的响应中,规定必须被转发
逐跳首部:只对单次转发有效,会通过缓存或代理而不再转发
HTTP/1.1 通用首部字段
Cache-Control 能操作缓存的工作机制
表示能否缓存的指令:
public指令 Cache-Control:public表示其他用户也可以利用缓存
private指令 响应只以特定的用户作为对象
no-cache指令 防止从缓存中返回过期的资源
如果是客户端发送的:表示不接受缓存过的响应
如果是服务器端返回的响应指令中包含no-cache指令,name缓存服务器不能对资源进行缓存
控制可执行缓存的对象的指令
no-store指令
暗示请求或响应中包含机密信息
并不是不缓存,而是不缓存过期的资源
指定缓存期限和认证的指令
s-maxage指令
只适用于供多位用户使用的公共缓存服务器
max-age指令
缓存事件比指定时间数值小,就接收缓存,另外当max-age=0时,缓存服务器将请求转发给源服务器。
在HTTP/1.1中,优先级max-age>Expires,在HTTP/1.0中 max-age<Expires
min-fresh指令
在限定时间内有超过有效期限的资源无法作响应返回
max-stale指令
指定缓存资源,即使过期也照样接收
only-if-cached指令
指令要求缓存服务器不能重新加载响应,也不会再次确认资源有效性。若请求缓存服务器的本地缓存无响应,则返回状态码504
must-revalidate指令
会向服务器再次验证即将返回的响应缓存是否仍然有效,无法获取返回504,而且这个指令会忽略请求的max-stale指令
proxy-revalidate指令
要求缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性
no-transform指令
无论在请求还是响应中,缓存不能改变主体的媒体类型,可以防止代理压缩图片
Cache-Control扩展
通过cache-extension标记token,可以扩展Cache-Control首部字段内的指令
比如Cache-Control: private, community=“UCI”可以扩展
Connection首部字段
有两个作用:控制不再转发给代理的首部字段、管理持久连接
Connection:不再转发的首部字段名
管理持久连接:Connection: close 断开时使用close
HTTP/1.1默认是持久连接,HTTP:1.1之前是非持久连接。所以要想持续连接,需要指定Connection: Keep-Alive
Date
表明HTTP报文的创建时期和时间
Pragma
是HTTP/1.1之前的历史遗留字段,属于通用首部字段
Pragma: no-cache 要求所有中间服务器不返回缓存的资源
如果中间服务器是以HTTP/1.1为标准,则直接用Cache-Control: no-cache
Trailer
会事先说明在报文主体后记录了那些首部字段,可以应用在HTTP/1.1分块传输编码时
Transfer-Encoding
规定了传输报文主体时采用的编码方式
HTTP/1.1的传输编码仅对于分块传输编码有效
Upgrade
用于监测HTTP协议是否可以使用更高版本进行通信
Upgrade对象仅限于客户端和相邻服务器,所以想要使用首部字段Upgrade时,还需要额外指定的Connection: Upgrade
Via
首部字段Via是为了追踪客户端与服务器之间的请求和响应报文的传输路径
Via不仅用于追踪报文的转发,还可以避免请求回环的发生,所以必须在经过代理时附加该首部字段的内容
Via首部是为了追踪传输路径,所以经常会和TRACE方法一起使用
Warning
从HTTP/1.0的响应首部演变过来的,通常会告知用户一些与缓存相关的问题的警告
格式: Warning: [警告码] [警告的主机:端口号] “[警告内容]” ([日期时间])
请求首部字段
请求首部字段是从客户端向服务器端发送请求报文中所使用的字段,用来补充请求的附加信息、客户端信息。
Accept
Accept-Charset
可以通知服务器用户代理支持的字符集及字符集的相对优先顺序
Accept-Encoding
告知服务器用户代理支持的内容编码及内容编码的优先级顺序,内容编码的例子gzip、compress、deflate、identity
Accept-Language
告知服务器用户代理能够处理的自然语言集,可以按照权重q来表示相对优先级
Authorization
告知服务器,用户代理的认证信息(证书值)
Expect
告知服务器期望出现某种特定行为
From
告知服务器使用用户代理的用户的电子邮件地址
Host
虚拟主机运行在同一个IP上,因此使用首部字段HOST加以区分
If-Match
形如If-XXX这样的请求都可以称为条件请求,只有判断指定条件为真时,才会执行请求。
只有当If-Match的字段值根ETag值匹配一致时,服务器才会接收请求
If-Modified-Since
在这个字段指定的日期时间后,资源发生了更新,服务器就会接收请求。
If-None-Match
与If-Match作用相反,当这个字段指定的字段值与请求资源的ETag不一致时,处理该请求
If-Range
字段值若跟ETag值或更新的日期时间匹配一致,那么就作为范围请求处理。
不一致则忽略范围请求,返回全部资源。
如果不适用首部字段If-Range则需要进行二次处理
If-Unmondified-Since
与If-Modified-Since作用相反,只有指定的请求资源在指定的日期时间后未发生更新的情况下才能处理请求。
Max-Forwards
可以以十进制整数的形式指定可经过服务器的最大数目。
字段值为0时,服务器会立即返回响应。
Proxy-Authorization
告知服务器认证所需要的信息
Range
获取部分资源的范围请求,包含首部字段Range即可以告知服务器资源的指定范围
Referer
可以查看URI是从那个web页面发起的
TE
可以告知服务器客户端能够处理响应的传输编码方式及相对优先级
User-Agent
会将创建请求的浏览器和用户代理名称等信息传达给服务器
响应首部字段
是由服务器端向客户端返回响应报文中所使用的字段
Accept-Ranges
服务器告诉客户端能否处理范围请求
Age
告知客户端源服务器在多久前创建了响应
Etag
首部字段ETag告知客户端实体标识,服务器会为每份资源分配对应的ETag值。
资源更新时,ETag也会更新
比如访问中文和英文版的网页,URI相同,但是对应的资源不同
强ETag,不论实体发生多么细微的变化都会改变其值。
弱ETag,提示资源是否相同。
Location
可以将响应接收方引导至某个与请求URI位置不同的资源。
几乎所有浏览器在接收到包含首部字段的Location后都会强制性的尝试对已提示的重定向资源的访问。
Proxy-Authenticate
会把代理服务器要求的认证信息发给客户端
Retry-After
告诉客户端多久之后再次发送请求
Server
告诉客户端当前服务器上安装的HTTP服务器应用程序的信息。
Vary
首部字段可对缓存进行控制,源服务器会向代理服务器传达关于本地缓存使用方法的命令。
WWW-Authenticate
用于HTTP访问认证
实体首部字段
包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新事件等与实体相关的信息
Allow
通知客户端能够支持Request-URI指定资源的所有HTTP方法
Content-Encoding
告知客户端主体部分选用的内容编码方式
Content-Language
告知客户端实体主体使用的自然语言
Content-Length
表明了实体主体部分的大小
Content-Location
表示报文主体返回资源对应的URI
Content-MD5
客户端会对接收的报文主体执行相同的MD5算法,然后与首部字段Content-MD5的字段值比较
要经过Base64编码处理,因为HTTP不能记录二进制值
Content-Range
告诉客户端作为响应返回的实体那部分符合要求
Content-Type
说明了实体主体内对象的媒体类型
Expires
会将资源失效的日期告知客户端
Last-Modified
指明资源最终的修改的时间
为Cookie服务的首部字段
Set-Cookie
属性:
expires:指定浏览器发送cookie的有效期
path: 指定Cookie的发送范围的文件目录
domain:指定的域名可做到与结尾匹配一致
secure:限制Web页面仅在HTTPS安全连接时,才可以发送Cookie,当省略这个属性时,无论HTTP还是HTTPS都会对Cookie进行回收
httpOnly: 使JS脚本无法获得Cookie,防止XSS对Cookie信息的窃取
Cookie
会告知服务器,当客户端想要获得HTTP状态管理支持时,就会在请求在包含从服务器接收到的Cookie
其他首部字段
X-Frame-Options
响应首部,用于控制网站内容在其他Web网站的Frame标签内的显示问题,主要防止点击劫持攻击
X-XSS-Protection
控制浏览器XSS防护机制的开关
DNT
HTTP的请求首部,Do Not Track意思是拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法
P3P
利用在线隐私偏好平台把个人隐私变成仅供程序可理解的形式,达到保护隐私的目的