头部字段
2023年12月23日
一、请求头部字段
头部字段 | 作用 | 可选值 | 示例 |
---|---|---|---|
Accept | 指定客户端能够接收的内容类型 |
|
|
Accept-Charset | 浏览器可以接受的字符编码集。 |
|
|
Accept-Encoding | 指定浏览器可以支持的web服务器返回内容压缩编码类型。 |
|
|
Accept-Language | 浏览器可接受的语言 |
|
|
Accept-Ranges | 可以请求网页实体的一个或者多个子范围字段 |
|
|
Authorization | HTTP授权的授权证书 |
|
|
Cache-Control | 指定请求和响应遵循的缓存机制 |
|
|
Connection | 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) |
|
|
Cookie | HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。 |
|
|
Content-Length | 请求的内容长度 |
|
|
Content-Type | 请求的与实体对应的MIME信息 |
|
|
Date | 请求发送的日期和时间 |
|
|
Expect | 请求的特定的服务器行为 |
|
|
From | 发出请求的用户的Email |
| |
Host | 指定请求的服务器的域名和端口号 |
| |
If-Match | 只有请求内容与实体相匹配才有效 |
|
|
If-Modified-Since | 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 |
|
|
If-None-Match | 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 |
|
|
If-Range | 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag |
|
|
If-Unmodified-Since | 只在实体在指定时间之后未被修改才请求成功 |
|
|
Max-Forwards | 限制信息通过代理和网关传送的时间 |
|
|
Pragma | 用来包含实现特定的指令 |
|
|
Proxy-Authorization | 连接到代理的授权证书 |
|
|
Range | 只请求实体的一部分,指定范围 |
|
|
Referer | 先前网页的地址,当前请求网页紧随其后,即来路 | ||
TE | 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 |
|
|
Upgrade | 向服务器指定某种传输协议以便服务器进行转换(如果支持) |
|
|
User-Agent | User-Agent的内容包含发出请求的用户信息 |
|
|
Via | 通知中间网关或代理服务器地址,通信协议 |
|
|
Warning | 关于消息实体的警告信息 |
|
|
二、响应头部字段
头部字段 | 作用 | 可选值 | 示例 |
---|---|---|---|
Accept-Ranges | 表明服务器是否支持指定范围请求及哪种类型的分段请求 |
|
|
Age | 从原始服务器到代理缓存形成的估算时间(以秒计,非负) |
|
|
Allow | 对某网络资源的有效的请求行为,不允许则返回405 |
|
|
Cache-Control | 告诉所有的缓存机制是否可以缓存及哪种类型 |
|
|
Content-Encoding | web服务器支持的返回内容压缩编码类型。 |
|
|
Content-Language | 响应体的语言 |
|
|
Content-Length | 响应体的长度 |
|
|
Content-Location | 请求资源可替代的备用的另一地址 |
|
|
Content-MD5 | 返回资源的MD5校验值 |
|
|
Content-Range | 在整个返回体中本部分的字节位置 |
|
|
Content-Type | 返回内容的MIME类型 |
|
|
Date | 原始服务器消息发出的时间 |
|
|
ETag | 请求变量的实体标签的当前值 |
|
|
Expires | 响应过期的日期和时间 |
|
|
Last-Modified | 请求资源的最后修改时间 |
|
|
Location | 用来重定向接收方到非请求URL的位置来完成请求或标识新的资源 |
| |
Pragma | 包括实现特定的指令,它可应用到响应链上的任何接收方 |
|
|
Proxy-Authenticate | 它指出认证方案和可应用到代理的该URL上的参数 |
|
|
refresh | 应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持) |
| |
Retry-After | 如果实体暂时不可取,通知客户端在指定时间之后再次尝试 |
|
|
Server | web服务器软件名称 |
|
|
Set-Cookie | 设置Http Cookie |
|
|
Trailer | 指出头域在分块传输编码的尾部存在 |
|
|
Transfer-Encoding | 文件传输编码 |
|
|
Vary | 告诉下游代理是使用缓存响应还是从原始服务器请求 |
|
|
Via | 告知代理客户端响应是通过哪里发送的 |
|
|
Warning | 警告实体可能存在的问题 |
|
|
WWW-Authenticate | 表明客户端请求实体应该使用的授权方案 |
|
|
三、问题
3.1 请求头部字段详解
-
Referrer-Policy策略
- no-referrer: 任何情况下都不发送 Referrer 信息
- no-referrer-when-downgrade: 仅当发生协议降级时不发送Referrer信息(如 HTTPS 页面引入 HTTP 资源,从 HTTPS 页面跳到 HTTP 等)时不发送 Referrer信息。这个规则是现在大部分浏览器默认所采用的
- origin: 发送只包含host部分的 Referrer。启用这个规则,无论是否发生协议降级,无论是本站链接还是站外链接,都会发送 Referrer信息,但是只包含协议+host部分(不包含具体的路径及参数等信息)。
- origin-when-crossorigin: 仅在发生跨域访问时发送只包含host的Referrer,同域下还是完整的。它与Origin Only的区别是多判断了是否Cross-origin。需要注意的是协议、域名和端口都一致,才会被浏览器认为是同域;
- unsafe-url: 无论是否发生协议降级,无论是本站链接还是站外链接,统统都发送 Referrer 信息。正如其名,这是最宽松而最不安全的策略;
-
应用Referrer-Policy策略
- 服务端对Referrer的控制
ctx.set("Referrer-Policy","no-referrer")
- Nginx对Referer的控制
add_header Referrer-Policy "origin-when-crossorigin";
add_header 'Referrer-Policy' 'origin';
add_header 'Referrer-Policy' 'unsafe-url';- 页面中meta标签属性控制
<meta name="referrer" content="no-referrer">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta name="referrer" content="origin">- a标签单独设置指定Referer策略
<a href="#url" referrerpolicy="no-referrer|origin|unsafe-url">...</a>
3.2 Host、Origin、Referer 请求头部字段对比
- Host:
- Origin: 表示当前客户端页面地址
- 格式: 协议+域名+端口
- 应用场景: 用于
Cors
请求和同域POST
请求 - 携带情况:
- 302 重定向不会携带
Origin
- 同域请求只有
post
请求才会携带Origin
- 跨域请求都会携带
Origin
,无论是get
请求还是post
请求
- 302 重定向不会携带
- Referer: 表示当前客户端页面地址
- 格式: 协议+域名+端口号+路径+参数
- 特点:
Referer
可以隐藏,甚至可以修改 - 应用场景: 服务端一般使用Referer首部识别访问来源,可能会以此进行防盗链、统计分析、日志记录以及缓存优化等
- 携带情况:
- 来源页面协议为File或者Data URI(如页面从本地打开的) 不会携带
Referer
- 来源页面是Https,而目标URL是http 不会携带
Referer
- 浏览器地址栏直接输入网址访问,或者通过浏览器的书签直接访问 不会携带
Referer
- 使用JS的location.href跳转 不会携带
Referer
- 来源页面协议为File或者Data URI(如页面从本地打开的) 不会携带