Age
header 包含以秒计的对象一直在代理缓存的时间。
Age 的 header 通常接近于零。如果是这样Age: 0,它可能只是从原始服务器获取;
否则它通常是根据代理的当前日期和Date HTTP 响应中包含的通用头部之间的差异来计算的。
个人理解,Age用在Cache-control: max-age=N的响应中,
第一次请求,响应返回的Age:0,
10s后再次请求,若N>10,则代理服务器返回Age:10,如果10>N,代理服务器去请求服务器,即使304,Age重置0;
Content-Disposition
HTTP 上下文中的第一个参数是inline(默认值,表示它可以显示在网页内,或作为网页)或 attachment(表示它应该下载;大多数浏览器呈现“另存为”对话框,预先填入filename如果存在参数的值
Content-Disposition: inline Content-Disposition: attachment; filename=”filename.jpg”
Content-Location
报头指示为返回的数据的备用位置。主要用途是指示作为内容协商结果传输的资源的 URL Location和Content-Location是不同的。 Location指示重定向的 URL ,Content-Location指示用于访问资源的直接 URL ,而未来未进一步内容协商。 Location是与响应关联的头部,Content-Location与返回的数据相关联。没有示例,这种区分看起来很抽象。
以不同格式从服务器请求数据
假设一个网站的 API 可以以 JSON ,XML 或 CSV 格式返回数据。 如果特定文档的 URL 位于https://example.com/documents/foo,网站可能会返回不同的 URL 以Content-Location取决于请求的Accept标题:
Request header | Response header |
---|---|
Accept: application/json, text/json | Content-Location: /documents/foo.json |
Accept: application/xml, text/xml | Content-Location: /documents/foo.xml |
Accept: text/plain, text/* | Content-Location: /documents/foo.txt |
这些 URL 是示例 - 该网站可以使用它希望的任何 URL 模式来提供不同的文件类型, 例如查询字符串参数:/documents/foo?format=json,/documents/foo?format=xml等等。 然后,客户端可以记住 JSON 版本在该特定的 URL 上可用,在下次请求文档时跳过内容协商。 服务器也可以考虑其他内容协商头,例如Accept-Language。
Content-Range
响应的 HTTP 报头指示其中一个完整的body信息的部分消息所属。
Content-Range: unitrange-start>-range-end>/size>Content-Range: unitrange-start>-range-end>/*
Content-Range: unit*/size>
unit指定范围的单位,通常这是bytes。 range-start给定单位中的一个整数,表示请求范围的开始 range-end给定单位中的一个整数,表示请求范围的结束 size文件(或如果未知时为’*‘)。
ETag:
ETag: W/"etag_value"
ETag: "etag_value"
W/可选’W/’(区分大小写)表示使用弱验证程序。弱验证器很容易生成,但对于比较来说却不太有用。强大的验证器是进行比较的理想选择,但可能非常难以高效生成。
Etag相同资源的两个表示的弱值可能在语义上是等价的,但不是字节一致的。“etag_value”实体标记唯一地表示请求的资源。它们是放在双引号(像是”675af34563dc-tr34”)之间的 ASCII 字符串。
Forwarded & X-Forwarded-For
包含来自被改变或丢失时代理参与请求的路径代理服务器的面向客户端的信息。
此标头的替代方案和事实上的标准版本是X-Forwarded-For,X-Forwarded-Host与X-Forwarded-Proto的 header 。 此标题用于调试,统计和生成依赖于位置的内容,并且通过设计它可以显示隐私敏感信息,例如客户端的 IP 地址。因此,在部署此标头时必须牢记用户的隐私。
Forwarded: by=<identifier>;for=<identifier>;host=<host>;proto=<http|https>
从X-Forwarded-For过渡到Forwarded
X-Forwarded-For: <client>, <proxy1>, <proxy2>
<client> 客户端 IP 地址 <proxy1>,<proxy2> 如果请求经过多个代理,则会列出每个连续代理的IP地址。
这意味着,最右侧的 IP 地址是最近代理的 IP 地址,最左侧的 IP 地址是始发客户端的 IP 地址。
X-Forwarded-For: 192.0.2.43, "[2001:db8:cafe::17]"
Forwarded: for=192.0.2.43, for="[2001:db8:cafe::17]"
Origin
请求报头指示其中从取起源。它不包含任何路径信息,但仅包含服务器名称。它与 CORS 请求以及POST请求一起发送。它与Referer标题相似,但与此标题不同,它没有公开整个路径。
Referrer-Policy
Referrer-Policy: no-referrer //Referer头将被完全省略
Referrer-Policy: no-referrer-when-downgrade //如果没有指定策略,这是用户代理的默认行为。
//安全降级不会发送,其余情况会发送真个引用路径,包括query
Referrer-Policy: origin //只发送host
Referrer-Policy: origin-when-cross-origin
Referrer-Policy: same-origin
Referrer-Policy: strict-origin
Referrer-Policy: strict-origin-when-cross-origin
Referrer-Policy: unsafe-url //在执行同源或跨源请求时发送完整的 URL
Referer: url url之前网页的绝对地址或部分地址,从该地址到当前请求的页面的链接被遵循。不包含 URL 碎片(即“#部分”)和用户信息(即 “ https:// username:password@example.com/foo/bar/ ” 中的 “ 用户名:密码 ”)。
Policy | Document | Navigation to | Referrer |
---|---|---|---|
no-referrer | https://example.com/page.html | any domain or path | no referrer |
no-referrer-when-downgrade | https://example.com/page.html | https://example.com/otherpage.html | https://example.com/page.html |
no-referrer-when-downgrade | https://example.com/page.html | https://mozilla.org | https://example.com/page.html |
no-referrer-when-downgrade | https://example.com/page.html | http://example.org | no referrer |
origin | https://example.com/page.html | any domain or path | https://example.com/ |
origin-when-cross-origin | https://example.com/page.html | https://example.com/otherpage.html | https://example.com/page.html |
origin-when-cross-origin | https://example.com/page.html | https://mozilla.org | https://example.com/ |
origin-when-cross-origin | https://example.com/page.html | http://example.com/page.html | https://example.com/ |
same-origin | https://example.com/page.html | https://example.com/otherpage.html | https://example.com/page.html |
same-origin | https://example.com/page.html | https://mozilla.org | no referrer |
strict-origin | https://example.com/page.html | https://mozilla.org | https://example.com/ |
strict-origin | https://example.com/page.html | http://example.org | no referrer |
strict-origin | http://example.com/page.html | any domain or path | http://example.com/ |
strict-origin-when-cross-origin | https://example.com/page.html | https://example.com/otherpage.html | https://example.com/page.html |
strict-origin-when-cross-origin | https://example.com/page.html | https://mozilla.org | https://example.com/ |
strict-origin-when-cross-origin | https://example.com/page.html | http://example.org | no referrer |
unsafe-url | https://example.com/page.html | any domain or path | https://example.com/page.html |
Retry-After
响应的 HTTP 报头指示所述用户代理在发送下一个请求前要等待多长时间。有三种主要的情况使用这个头文件:
- 响应503时,表示服务现在不可用
- 响应429(请求太多了)
- 当使用重定向响应(如301永久移动)发送时,它表示用户代理在发出重定向请求之前要求等待的最短时间。
Retry-After: <http-date> Retry-After: <delay-seconds> ------------------------------------------------------ Retry-After: Wed, 21 Oct 2015 07:28:00 GMT Retry-After: 120
Set-Cookie
SameSite=Lax Optional:允许服务器声明 Cookie 不应与跨站点请求一起发送,这为跨站点请求伪造攻击(CSRF)提供了一些保护。
不包含原始服务器的域的 cookie 应该被用户代理拒绝。如果以下 cookie 由托管在 originalcompany.com 上的服务器设置,则它将被拒绝。 Set-Cookie: qwerty=219ffwef9w0f; Domain=somecompany.co.uk; Path=/; Expires=Wed, 30 Aug 2019 00:00:00 GMT
Strict-Transport-Security
响应报头(通常缩写为 HSTS)是一种安全功能,可以让一个网站告诉大家,它应该只使用 HTTPS,而不是使用 HTTP 进行通信的浏览器。
Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; preload
max-age=expire-time以秒为单位,浏览器应该记住,该站点只能通过 HTTPS 访问。 includeSubDomains可选如果指定了此可选参数,则此规则也适用于所有网站的子域。 preload:Google 维护一个 HSTS 预加载服务。按照指南并成功提交您的域名,浏览器将永远不会使用不安全的连接连接到您的域名。 虽然该服务由 Google 托管,但所有浏览器都表示有意使用(或实际开始使用)预加载列表。 有关 Chrome 中的 HSTS 预加载列表的信息:https://www.chromium.org/hsts Firefox HSTS 预载列表的咨询:nsSTSPreloadList.inc
浏览器如何处理它
您的网站首次使用 HTTPS 访问并返回Strict-Transport-Security标题时,浏览器会记录此信息,以便将来尝试使用 HTTP 加载网站时会自动使用 HTTPS。 当 Strict-Transport-Security 标头指定的到期时间过去时,下一次通过 HTTP 加载站点的尝试将照常进行,而不是自动使用 HTTPS。 无论何时将 Strict-Transport-Security 头传递给浏览器,它都会更新该站点的到期时间,以便站点可以刷新此信息并防止超时过期。如果需要禁用严格传输安全性,则将 max-age 设置为0(通过 https 连接)将立即使Strict-Transport-Security标题失效,从而允许通过 http 访问。
Transfer-Encoding
指定用于将安全地传输编码的形式的实体提供给用户。
Transfer-Encoding是一种逐跳报头,即应用于两个节点之间的消息,而不是资源本身。 多节点连接的每个段可以使用不同的Transfer-Encoding值。 如果要在整个连接上压缩数据,请改为使用端到端标Content-Encoding头。 当出现在对HEAD没有主体的请求的响应中时,它指示将应用于相应GET消息的值。
Upgrade-Insecure-Requests
请求头向服务器发送一个信号,表示客户对加密和认证响应的偏好,并且它可以成功处理upgrade-insecure-requests CSP 指令。
客户端向服务器请求它支持以下升级机制的信号upgrade-insecure-requests:
GET / HTTP/1.1 Host: example.com
Upgrade-Insecure-Requests: 1
服务器现在可以重定向到该网站的安全版本。一个Vary可以使用的头,这样的网站不会被缓存投放到不支持升级机制的客户。
Location: https://example.com/
Vary: Upgrade-Insecure-Requests
Vary
响应头决定如何满足未来的请求头,以决定一个缓存的响应是否可以使用,而不是请求从源服务器一个新的一个。
服务器使用它来指示在内容协商算法中选择资源表示时使用哪个标头。
当缓存服务器收到一个请求,只有当前的请求和原始(缓存)的请求头跟缓存的响应头里的Vary都匹配,才能使用缓存的响应。
Vary头的内容如果是多条则用“,”分割。缓存服务器会将某接口的首次请求结果缓存下来(包括响应头中的Vary),
后面在发生相同请求的时候缓存服务器会拿着缓存的Vary来进行判断。
比如Vary: Accept-Encoding,User-Agent,那么Accept-Encoding与User-Agent两个请求头的内容,就会作为判断是否返回缓存数据的依据,
当缓存服务器中相同请求的缓存数据的编码格式、代理服务与当前请求的编码格式、代理服务一致,那就返回缓存数据,
否则就会从服务器重新获取新的数据。当缓存服务器中已经缓存了该条请求,那么某次服务器端的响应头中如果Vary的值改变,
则Vary会更新到该请求的缓存中去,下次请求会对比新的Vary内容。
Via
一般报头由代理加入,正向和反向代理,并且可以在请求头和响应标头出现。它用于跟踪消息转发,避免请求循环,并识别请求/响应链中发送者的协议功能。
Via: [ <protocol-name> "/" ] <protocol-version> <host> [ ":" <port> ]or
Via: [ <protocol-name> "/" ] <protocol-version> <pseudonym>
<协议名称>可选。所使用协议的名称,如 “HTTP”。
<protocol-version> 所用协议的版本,例如“1.1”。
<host> 和 <port> 公共代理 URL 和端口
<pseudonym> 名称/别名的内部代理人。
例子
Via: 1.1 vegur
Via: HTTP/1.1 GWA
Via: 1.0 fred, 1.1 p.example.net
X-Content-Type-Options
由服务器使用以指示在通告的 MIME 类型的标记Content-Type标头不应该被改变,并且被遵循。 这允许选择不使用 MIME 类型的嗅探,换句话说,它可以说网站管理员知道他们在做什么。 X-Content-Type-Options: nosniff nosniff仅适用于“ script”和“ style”类型。同样适用nosniff于图像原来与现有的网站不兼容。 nosniff阻止请求,如果请求的类型是 “ style”,而 MIME 类型不是“ text/css”,或者 “ script”,而 MIME 类型不是 JavaScript MIME 类型。
X-Frame-Options
HTTP 响应报头可以被用来指示一个浏览器是否应该被允许在一个以呈现页面frame,iframe或object。 通过确保其内容未嵌入其他网站,网站可以使用此功能来避免 点击劫持 攻击。
X-Frame-Options: DENY //是否同一个网站,使用frame等都会加载失败; X-Frame-Options: SAMEORIGIN X-Frame-Options: ALLOW-FROM https://example.com/
X-XSS-Protection
在检测到反射的跨站点脚本(XSS)攻击时阻止页面加载。
X-XSS-Protection: 0
X-XSS-Protection: 1 //默认,如果检测到跨站点脚本攻击,浏览器将清理页面(删除不安全的部分)
X-XSS-Protection: 1; mode=block //如果检测到跨站点脚本攻击,浏览器将阻止页面的呈现,而不是删除内容
X-XSS-Protection: 1; report=<reporting-uri> //report = <reporting-URI>(仅限 Chromium)启用 XSS 筛选。
如果检测到跨站点脚本攻击,浏览器将清理页面并报告违规行为。这使用 CSP report-uri指令的功能发送报告。