4种http首部字段
http首部字段重复了会根据浏览器内部处理逻辑不同结果可能不一致,有些优先处理第一次出现的,有些处理最后出现的
通用首部字段(General):
Cache-Control:控制缓存的行为,多个指令之间以 , 分割 缓存请求指令:
指令 | 参数 | 描述 |
---|
no-cache | 无 | 强制向源服务器再次验证(防止代理服务器返回过期缓存资源),必须把客户端请求转发给源服务器 | no-store | 无 | 不缓存请求或响应的任何内容 | max-age=[秒] | 必需 | 响应的最大Age值(对于客户端=>缓存服务器:要是缓存过期没超过age的返回给我) | max-stale=[秒] | 可省略 | 接收已过期的响应(如果指定具体数值,那么即使过期,只要在指定时间内都被客户端接受) | min-fresh=[秒] | 必需 | 期望在指定时间内的响应仍有效(指定时间后,过了指定时间的资源都无法作为响应返回) | no-transtorm | 无 | 代理服务器不可更改媒体类型(防止代理或者缓存压缩图片) | only-if-cached | 无 | 从缓存本地获取资源(该指令要求缓存服务器不重新加载响应,也不会再次确认资源有效性。若发生请求缓存服务器的本地缓存无响应,则返回状态码504GatewayTimeout。) | cache-extension | - | 新指令标记(token)(如果缓存服务器不能理解该指令会直接忽略,通过extension token实现了该指令的添加) |
对缓存的理解:https://www.cnblogs.com/yizhiamumu/p/16687989.html
缓存响应指令:
指令 | 参数 | 说明 |
---|
public | 无 | 可向任意方提供响应的缓存(明确表明其他用户也可利用缓存) | private | 可省略 | 仅向特定用户提供资源缓存服务,对其他用户发送的请求代理服务器则不会返回缓存 | no-cache | 可省略(若指定参数则对指定参数目标不缓存其他缓存) | 缓存前必须先确认其有效性(缓存服务器不能对资源进行缓存,源服务器也不再对缓存服务器的请求进行资源有效性确认,且禁止对响应资源缓存) | no-store | 无 | 不缓存请求或响应的任何内容(no-cache是不缓存过期资源) | no-transform | 无 | 代理服务器不可更改媒体类型 | must-fevalidate | 无 | 可缓存但必须再向源服务器进行确认(若无法连通源服务器则返回504,会忽略max-stale指令) | proxy-revalidate | 无 | 要求中间缓存服务器对缓存的响应有效性再进行确认 | max-age=[秒] | 必需 | 响应的最大Age值(对于服务端=>缓存服务器:age期内不必向我确认,可直接支配该缓存) | s-maxage=[秒] | 必需 | 公共缓存服务器响应的最大Age值(跟上面功能相同,但s只适用于供应多位用户使用的公共缓存服务器,使用后会忽略对Expires和max-age的处理) | cache-extension | - | 新指令标记(token) |
Connection:逐跳首部、连接的管理(在http/1.1 默认为keep-alive,如果明确要断开则改为close) Date:创建报文的日期时间 Pragma:报文指令(no-cache)只用于客户端发送请求会要求中间服务器不返回缓存资源(如果中间服务器都是http/1.1则直接Cache-Control:no-cache最理想,如若不能则两个字段都添上) Trailer:报文末端的首部一览 Transfer-Encoding:指定报文主体传输编码方式(chunked) Upgrade:用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。(使用时要指定Connection会变为Upgrade) Via:代理服务器的相关信息(为了追踪客户端和源服务器之间请求和响应的传输路径,经过代理时附加该内容信息) Warning:错误通知([警告码][警告的主机:端口号][警告内容])
警告码 | 警告内容 | 说明 |
---|
110 | Responseisstale(响应已过期) | 代理返回已过期的资源 | 111 | Revalidationfailed(再验证失败) | 代理再验证资源有效性时失败(服务器无法到达等原因) | 112 | Disconnectionoperation(断开连接操作) | 代理与互联网连接被故意切断 | 113 | Heuristicexpiration(试探性过期) | 响应的使用期超过24小时(有效缓存的设定时间大于24小时的情况下) | 199 | Miscellaneouswarning(杂项警告) | 任意的警告内容 | 214 | Transformationapplied(使用了转换) | 代理对内容编码或媒体类型等执行了某些处理时 | 299 | Miscellaneous persistent warning (持久杂项警告) | 任意的警告内容 |
请求首部字段(request)
字段 | 描述 |
---|
Accept | 用户代理可处理的媒体类型(文本文件:text/html;q=0.8,text/plain,text/css;application/json;图片文件:image/jpeg;二进制文件:application/zip…)(想要给显示的媒体类型增加优先级则使用q=(0~1)(在字段后加;q=?),不指定时默认权重q = 1.0,服务器会优先返回权重高的媒体类型) | Accept-Charset | 优先的字符集(exe:一次性指定多个字符集,同样用q指定优先级) | Accept-Encoding | 优先的内容编码(同上exe)(可以用*指定任意编码格式)常用内容编码:① | Accept-Language | 优先的语言(自然语言)(同上exe) | Authorization | Web认证信息(jwt) | Expect | 期待服务器的特定行为(会因服务器无法理解客户端的期望作出回应而发生错误,返回417 Expection Failed) | From | 告知服务器用户的电子邮箱地址,为了显示搜索引擎等用户代理的负责人的联系方式,使用代理时尽可能使用该字段 | Host | 请求资源所在服务器(必须被包含在请求内)(单台服务器会分配多个域名的虚拟主机,请求到服务器时主机名会用ip地址直接替换,需要使用首部字段host来明确指出请求的主机名;若服务器未设定主机名那直接发送一个空值即可) | //if-xxx 的请求首部字段为条件请求,只有if(true)才会执行请求 | | If-Match | 比较实体标记(ETag:与特定资源关联的确定值,资源更新后Etag也会随之更新)(if(false)返回412 Precondition Failed) | If-Modified-Since | 比较资源的更新时间(如果在指定事件后资源没更新过则返回304 Not Modified(可以通过Last-Modified字段确认资源更新日期时间)) | if-None-Match | 比较实体标记(与If-Match相反,只有字段值和Etag不一致可以处理该请求,get和head方法使用该字段可以获取最新的资源) | lf-Range | 告知服务器若字段值和Etag值或者更新时间一致时则作为范围请求处理,反之,Range范围不生效,返回全部资源(如果不使用if-Range进行范围请求时,服务端资源如果更新,客户端的持有资源有一部分也会随之无效,范围请求作为前提是无效的,服务器会返回412目的是催促客户端再次发送请求) | If-Unmodified-Since | 比较资源的更新时间(与lf-Modified-Since相反) | Max-Forwards | 最大传输逐跳数(请求可能会经过代理等多台服务器(可能会在代理服务器之间请求陷入循环),灵活使用该字段值可对以那台服务器为终点的传输路径的通信情况有所把握) | Proxy-Authorization | 代理服务器要求客户端的认证信息 | Range | 实体的字节范围请求(使用时返回206) | Referer | 告知服务器请求的原始资源URL(由于保密性可以不发该字段) | TE | 传输编码的优先级(告知服务器客户端可以处理响应的传输编码方式以及优先级,还可以指定伴随Trailer字段的分块传输方式如TE:trailers) | User-Agent | HTTP客户端的程序信息(创建请求的浏览器,用户代理名称等信息,网络爬虫发起请求时可能会在字段内添加爬虫作者的电子邮件地址) |
①:gzip:由文件压缩程序gzip(GUN zip)生成的编码格式(RFC1952) compress:由UNIX文件压缩程序compress生成的编码格式 deflate:组合使用zlib格式及由deflate(RFC1951)压缩算法生成的编码 identity:不执行压缩或 不会变化的默认编码格式
响应首部字段(response)
字段 | 描述 |
---|
Accept-Ranges | 是否接受字节范围请求(可以处理:bytes,反之:none) | Age | 推算资源创建经过时间 | ETag | 资源的匹配信息(同一个网页中文版和英文版对应的ETag就不一样;若是弱Etag(只用于提示资源是否相同,资源发生根本变化才会改变ETag,字段值在最前方附加W/ )) | Location | 令客户端重定向至指定URL(配个3XX的响应提供重定向的URL) | Proxy-Authenticate | 代理服务器对客户端的认证信息 | Retry-After | 告知客户端应该在多久之后再次发送请求(配合503或者3XX响应一起使用) | Server | HTTP服务器的安装信息(exe:nginx/1.18.0) | Vary | 代理服务器缓存的管理信息(Vary:Accept-Language;当代理服务器使用的Accept-Language字段值相同时就直接从缓存返回响应,反之需要从源服务器获取资源后响应) | www-Authenticate | 服务器对客户端的认证信息 |
实体首部字段(Entity)
字段 | 描述 |
---|
Allow | 资源可支持的HTTP方法(会以405返回,还可以把所有能支持的HTTP方法写入首部字段Allow) | Content-Encoding | 实体主体适用的编码方式(告知客户端以哪种方式压缩了,gzip) | Content-Language | 实体主体的自然语言 | Content-Length | 实体主体的大小(单位:字节)(使用内容编码Encoding时不能使用) | Content-Location | 替代对应资源的URI(访问http://www.xxx.com/)返回的对象(http://www.xxx.com/index.html类似情况) | Content-MD5 | 实体主体的报文摘要(客户端会对接受的报文主体执行相同的MD5算法然后比较)用于检查报文主体在传输过程中是否保持完整 | Content-Range | 实体主体的位置范围 | Content-Type | 实体主体的媒体类型 | Expires | 实体主体过期的日期时间 | Last-Modified | 资源的最后修改日期时间 |
为Cookie服务的首部字段(一旦Cookie从服务端发送至客户端,服务端就不存在可以显示删除Cookie的方式,可以通过覆盖已过期的Cookie实现对客户端Cookie的删除)
Set-Cookie 开始状态管理所使用的Cookie信息 响应首部字段
属性 | 说明 |
---|
NAME-VALUE | 赋予Cookie的名称和其值(必需项) | expires=DATE | cookie的有效期(若不明确指定则默认为浏览器关闭前为止 | path=PATH | 将服务器上的文件日录作为Cookie的适用对象(若不指定则默认为文档所在的文件目录) | domain=域名 | 作为Cookie适用对象的域名(指定)(若不指定则默认为创建Cookie的服务器的域名) | Secure | 仅在HTTPS安全通信时才会发送Cookie(即使域名相同http都不会进行cookie回收) | HttpOnly | 加以限制,使Cookie不能被JavaScript脚本访问(防止跨站脚本攻击XSS窃取cookie) |
Cookie 服务器接收到的Cookie信息 请求首部字段
属性 | 说明 |
---|
X-Frame-Options:(DENY or SAMEORIGIN) | 用于控制网站内容在其他web网站的Frame标签内的显示问题,主要为了防止点击劫持(clickJacking) | X-XSS-Protection:1 or 0 | 用于针对XSS的一种策略,控制浏览器XSS防护机制开关 1:将XSS过滤蛇者为有效 | DNT(do not track) | 拒绝被精准广告追踪 1:拒绝被追踪(web服务器需要做对应的支持) | P3P | 在线隐私偏好平台,可以让Web网站上的个人隐私变成一种仅供程序可理解的形式 |
|