跳到主要内容

头部字段

2023年12月23日
柏拉文
越努力,越幸运

一、请求头部字段


头部字段作用可选值示例
Accept指定客户端能够接收的内容类型
  • text/plain
  • text/html
  • Accept: text/plain, text/html
Accept-Charset浏览器可以接受的字符编码集。
  • iso-8859-5
  • Accept-Charset: iso-8859-5
Accept-Encoding指定浏览器可以支持的web服务器返回内容压缩编码类型。
  • compress
  • gzip
  • Accept-Encoding: compress, gzip
Accept-Language浏览器可接受的语言
  • en
  • zh
  • Accept-Language: en,zh
Accept-Ranges可以请求网页实体的一个或者多个子范围字段
  • bytes
  • Accept-Ranges: bytes
AuthorizationHTTP授权的授权证书
  • Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
  • Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control指定请求和响应遵循的缓存机制
  • no-cache
  • Cache-Control: no-cache
Connection表示是否需要持久连接。(HTTP 1.1默认进行持久连接)
  • close
  • Connection: close
CookieHTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
  • $Version=1; Skin=new;
  • Cookie: $Version=1; Skin=new;
Content-Length请求的内容长度
  • 348
  • Content-Length: 348
Content-Type请求的与实体对应的MIME信息
  • application/x-www-form-urlencoded
  • application/json
  • text/html
  • text/plain
  • text/plain
  • video/avi
  • video/mpeg4
  • image/jpeg
  • image/png
  • Content-Type: application/x-www-form-urlencoded
Date请求发送的日期和时间
  • Tue, 15 Nov 2010 08:12:31 GMT
  • Date: Tue, 15 Nov 2010 08:12:31 GMT
Expect请求的特定的服务器行为
  • 100-continue
  • Expect: 100-continue
From发出请求的用户的Email
Host指定请求的服务器的域名和端口号
If-Match只有请求内容与实体相匹配才有效
  • “737060cd8c284d8af7ad3082f209582d”
  • If-Match: “737060cd8c284d8af7ad3082f209582d”
If-Modified-Since如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码
  • Sat, 29 Oct 2010 19:43:31 GMT
  • If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
If-None-Match如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变
  • “737060cd8c284d8af7ad3082f209582d”
  • If-None-Match: “737060cd8c284d8af7ad3082f209582d”
If-Range如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag
  • “737060cd8c284d8af7ad3082f209582d”
  • If-Range: “737060cd8c284d8af7ad3082f209582d”
If-Unmodified-Since只在实体在指定时间之后未被修改才请求成功
  • Sat, 29 Oct 2010 19:43:31 GMT
  • If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
Max-Forwards限制信息通过代理和网关传送的时间
  • 10
  • Max-Forwards: 10
Pragma用来包含实现特定的指令
  • no-cache
  • Pragma: no-cache
Proxy-Authorization连接到代理的授权证书
  • Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
  • Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Range只请求实体的一部分,指定范围
  • bytes=500-999
  • Range: bytes=500-999
Referer先前网页的地址,当前请求网页紧随其后,即来路
TE客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息
  • trailers
  • deflate;q=0.5
  • TE: trailers,deflate;q=0.5
Upgrade向服务器指定某种传输协议以便服务器进行转换(如果支持)
  • HTTP/2.0
  • SHTTP/1.3
  • IRC/6.9
  • RTA/x11
  • Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
User-AgentUser-Agent的内容包含发出请求的用户信息
  • Mozilla/5.0 (Linux; X11)
  • User-Agent: Mozilla/5.0 (Linux; X11)
Via通知中间网关或代理服务器地址,通信协议
  • 1.0 fred
  • 1.1 nowhere.com (Apache/1.1
  • Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 关于消息实体的警告信息
  • 199 Miscellaneous warning
  • Warn: 199 Miscellaneous warning

二、响应头部字段


头部字段作用可选值示例
Accept-Ranges表明服务器是否支持指定范围请求及哪种类型的分段请求
  • bytes
  • Accept-Ranges: bytes
Age从原始服务器到代理缓存形成的估算时间(以秒计,非负)
  • 12
  • Age: 12
Allow对某网络资源的有效的请求行为,不允许则返回405
  • GET
  • HEAD
  • Allow: GET, HEAD
Cache-Control告诉所有的缓存机制是否可以缓存及哪种类型
  • no-cache
  • Cache-Control: no-cache
Content-Encodingweb服务器支持的返回内容压缩编码类型。
  • gzip
  • Content-Encoding: gzip
Content-Language响应体的语言
  • en
  • zh
  • Content-Language: en,zh
Content-Length响应体的长度
  • 348
  • Content-Length: 348
Content-Location请求资源可替代的备用的另一地址
  • /index.htm
  • Content-Location: /index.htm
Content-MD5返回资源的MD5校验值
  • Q2hlY2sgSW50ZWdyaXR5IQ==
  • Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Content-Range在整个返回体中本部分的字节位置
  • bytes 21010-47021/47022
  • Content-Range: bytes 21010-47021/47022
Content-Type返回内容的MIME类型
  • text/html
  • charset=utf-8
  • Content-Type: text/html; charset=utf-8
Date原始服务器消息发出的时间
  • Tue, 15 Nov 2010 08:12:31 GMT
  • Date: Tue, 15 Nov 2010 08:12:31 GMT
ETag请求变量的实体标签的当前值
  • “737060cd8c284d8af7ad3082f209582d”
  • ETag: “737060cd8c284d8af7ad3082f209582d”
Expires响应过期的日期和时间
  • Thu, 01 Dec 2010 16:00:00 GMT
  • Expires: Thu, 01 Dec 2010 16:00:00 GMT
Last-Modified请求资源的最后修改时间
  • Tue, 15 Nov 2010 12:45:26 GMT
  • Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT
Location用来重定向接收方到非请求URL的位置来完成请求或标识新的资源
Pragma包括实现特定的指令,它可应用到响应链上的任何接收方
  • no-cache
  • Pragma: no-cache
Proxy-Authenticate它指出认证方案和可应用到代理的该URL上的参数
  • Basic
  • Proxy-Authenticate: Basic
refresh应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)
Retry-After如果实体暂时不可取,通知客户端在指定时间之后再次尝试
  • 120
  • Retry-After: 120
Serverweb服务器软件名称
  • Apache/1.3.27 (Unix) (Red-Hat/Linux)
  • Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Set-Cookie设置Http Cookie
  • UserID=JohnDoe; Max-Age=3600; Version=1
  • Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
Trailer指出头域在分块传输编码的尾部存在
  • Max-Forwards
  • Trailer: Max-Forwards
Transfer-Encoding文件传输编码
  • chunked
  • Transfer-Encoding:chunked
Vary告诉下游代理是使用缓存响应还是从原始服务器请求
  • *
  • Vary: *
Via告知代理客户端响应是通过哪里发送的
  • 1.0 fred, 1.1 nowhere.com (Apache/1.1)
  • Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning警告实体可能存在的问题
  • 199 Miscellaneous warning
  • Warning: 199 Miscellaneous warning
WWW-Authenticate表明客户端请求实体应该使用的授权方案
  • Basic
  • WWW-Authenticate: Basic

三、问题


3.1 请求头部字段详解

  • Referrer-Policy策略

    1. no-referrer: 任何情况下都不发送 Referrer 信息
    2. no-referrer-when-downgrade: 仅当发生协议降级时不发送Referrer信息(如 HTTPS 页面引入 HTTP 资源,从 HTTPS 页面跳到 HTTP 等)时不发送 Referrer信息。这个规则是现在大部分浏览器默认所采用的
    3. origin: 发送只包含host部分的 Referrer。启用这个规则,无论是否发生协议降级,无论是本站链接还是站外链接,都会发送 Referrer信息,但是只包含协议+host部分(不包含具体的路径及参数等信息)。
    4. origin-when-crossorigin: 仅在发生跨域访问时发送只包含host的Referrer,同域下还是完整的。它与Origin Only的区别是多判断了是否Cross-origin。需要注意的是协议、域名和端口都一致,才会被浏览器认为是同域;
    5. unsafe-url: 无论是否发生协议降级,无论是本站链接还是站外链接,统统都发送 Referrer 信息。正如其名,这是最宽松而最不安全的策略;
  • 应用Referrer-Policy策略

    1. 服务端对Referrer的控制
    ctx.set("Referrer-Policy","no-referrer")
    1. Nginx对Referer的控制
    add_header  Referrer-Policy  "origin-when-crossorigin";
    add_header 'Referrer-Policy' 'origin';
    add_header 'Referrer-Policy' 'unsafe-url';
    1. 页面中meta标签属性控制
    <meta name="referrer" content="no-referrer">
    <meta name="referrer" content="no-referrer-when-downgrade">
    <meta name="referrer" content="origin">
    1. 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请求
  • Referer: 表示当前客户端页面地址
    • 格式: 协议+域名+端口号+路径+参数
    • 特点: Referer 可以隐藏,甚至可以修改
    • 应用场景: 服务端一般使用Referer首部识别访问来源,可能会以此进行防盗链、统计分析、日志记录以及缓存优化等
    • 携带情况:
      • 来源页面协议为File或者Data URI(如页面从本地打开的) 不会携带 Referer
      • 来源页面是Https,而目标URL是http 不会携带 Referer
      • 浏览器地址栏直接输入网址访问,或者通过浏览器的书签直接访问 不会携带 Referer
      • 使用JS的location.href跳转 不会携带 Referer