• 本章知识点很多,不仅仅是HTTP首部字段的罗列,涉及很多HTTP的核心知识;
  • 通用首部字段:Cache-Control(代理服务器缓存控制)、Connection(控制连接)、Trailer(分块传输)、Pragma(历史遗留缓存字段)、Via(通信路径)……
  • 请求首部字段:Accept系列、Host、Authorization、Referer、If-Match、If-Range、User-Agent……
  • 响应首部字段:Etag、Location、Retry-After、WWW-Authenticate……
  • 实体首部字段:Content系列(Content-Type、Content-Range……)、Allow、
  • Cookie、Cookie首部字段:
    • HttpOnly放跨站脚本攻击XSS;
  • 其他首部字段:X-Frame-Options(iframe相关)、安全相关(X-XXS-Protection、DNT、P3P)。

    疑问:

  • http请求中最常见的的Content-type代表什么?

    • 答:代表报文主体的对象类型。
  • 前端更包后的浏览器刷新问题能否通过设置http首部字段cache-control解决?
    • 答:应该不能,更包后的旧资源问题是浏览器是使用了本地临时文件,而首部字段cache-control是和缓存服务器息息相关的。问题的本质在于“没有请求”,而不是请求到了旧文件。
  • Authenticate与Authorization的区别是什么?
    • Authenticate系列为响应首部字段,由服务器发出,记载了证书认证信息。
    • Authorization系列为请求首部字段,由客户端发出,记载了证书信息。
  • Auth认证字段系列加不加proxy前缀的区别是什么?
    • 加proxy-前缀代表了代理服务器。
  • Set-Cookie的HttpOnly字段不是为了XSS诞生的?那是为了什么?

    • 答:

      心得

  • 4种首部字段

    • 通用首部字段:请求/响应报文均会使用的首部字段。
    • 请求首部字段
    • 响应首部字段
    • 实体首部字段
      • 补充资源内容的更新时间等与实体相关的信息。
      • Content-type就在这个角落里。

首部字段很多,笔记只记录常用字段和特殊字段,其余用时再翻书查看

HTTP/1.1通用首部字段

image.png

Cache-Control:操作缓存的工作机制。image.png

  • 缓存请求指令、缓存响应指令【详见书p.86】
  • 该首部字段应该更适用于有中间代理缓存服务器的应用情况。

    Connection:管理连接

  • 控制不再转发给代理的首部字段image.png

  • 管理持久连接

    • 一般都是Keep-Alive
    • 想主动断开则为close
    • HTTP/1.1之前Connection的默认值是非持久连接,因此在旧版本的HTTP上要设置为Keep-Alive

      其他详见书本

  • Trailer:记录在报文主体后的首部字段,常用于HTTP/1.1分块传输编码。

  • Pragma:历史遗留字段,仅作为HTTP/1.0的向后兼容,用于规范缓存。image.png
  • Via:追踪客户端服务端的报文传输路径。

    请求首部字段

  • 用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等。

    Accep:客户端可以希望得到的资源格式image.png

    Accept-Charset:页面的字符解析模式image.png

  • 可以指定多种字符集,并用q来规定权重。

    Host:用于区分虚拟主机image.png

  • 亦可发送空值

    Authorization:认证相关

  • 用来告知服务器用户代理的认证信息(证书值)

  • 接收到401状态码后,通常会把Authorization字段加入请求

    If-Match:条件请求。

  • 只有当If-Match的值与Etag(资源标识符)相等时,服务器才会接收请求。

    其他详见书本。

  • Accept-Encodeing:用来告知服务器客户端支持的报文主体编码方式。

  • Accept-Language:用来告知支持的语言。
  • Expect:客户端期望服务端能做到的事
    • 服务端做不到时会返回417 Expectation Failed状态码
  • From:用户代理的电子邮件地址。
  • If-Modified-Since:资源于XXX后发生了变更则服务器接收请求。
  • If-Unmodified-Since:与上相反。
  • If-None-Match:与If-Match相反。
  • If-Range
    • 值与Etag或时间匹配则作为条件请求返回资源。
    • 不匹配则返回所有资源。
  • Rerferer:用于告知请求的发起者
    • P.S. Referer的正确拼写是Referrer,不知为何大家一直沿用了错误拼写哈哈哈
  • User-Agent:用于传达浏览器的种类。
  • Max-Forwards:请求可被转发的最大次数。
    • 通过Trace或Option方法发送请求时使用。
    • 到达最大转发次数时则直接返回响应。
  • Proxy-Authorization:接收到代理服务器的质询时,返回的认证信息

    响应首部字段

  • 用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等 信息。

    Etag:资源标识

  • 有点像资源的id,资源更新时随之更新

  • 资源被缓存时就会被分配Etag
  • 强弱Etag

    • image.png

      Location:将响应接收方引导至其他URI

  • 该字段通常会配合3xx状态码

  • 几乎所有浏览器在接收包含Location的响应后都会强制重定向。

    Retry-After:多久后再次请求

  • 通常搭配状态码3xx 5xx

    WWW-Authenticate

  • 用于HTTP访问认证

  • 状态码401响应中,肯定带有该首部字段

    其他详见书本。

  • Accept-Range:服务器是否能接受范围请求

  • Age:服务器在多久前创建了响应
  • Proxy-Authenticate:认证信息相关。
  • Server:记载服务器HTTP服务信息
  • Vary:源服务器向代理服务器传递如何使用缓存。

    实体首部字段

    用于补充与实体内容相关的字段。

    Allow

  • 用于通知客户端服务端支持的所有HTTP方法。

image.png

Content-Location

  • 报文主体返回资源对应的URI
  • 与Location不同
  • 当访问的内容与实际请求的对象不同时,该字段会写明URIimage.png

    Content-MD5

  • 一种验证内容准确性的算法

    • image.png
  • 无法防止内容篡改,因为MD5字段值同样可以被篡改

    Content-Type

  • 要丝撒,最常见的字段居然在这种角落

  • 报文主体的对象类型。

    其他

  • Content-Encoding:服务器对内容主题的编码格式。

  • Content-Language:告知客户端实体使用的语言。
  • Content-Length:告知客户端实体大小。
  • Content-Range:针对范围请求,记录服务器返回的实体内容范围和大小。
  • Expires:资源缓存时限。
    • 当字段Cache-Control中包含max-age时,max-age优先。
  • Last-Modified:资源最终修改时间。

    为Cookie服务的首部字段

  • 关于cookie

    • 工作机制:用户识别、状态管理
    • web网站会把数据临时写入用户计算机内
    • 调用cookie时会校验cookie的有效期、发送方的域、路径、协议等信息

image.png

Set-Cookie

响应首部字段
image.png
特别注意HttpOnly属性

  • 使用HttpOnly属性后,就无法使用javascript的document.cookie获取cookie了
  • 因此就无法在跨站脚本攻击XSS中利用javascript劫持cookie了
  • 另外,该扩展并不是为了XSS而开发的(那是为了啥?)

    Cookie

    请求首部字段
    image.png

    其他首部字段

  • X-Frame-Options【132】

    • 响应首部字段
    • 用于控制网站内容在其他Web网站的Frame标签内的显示问题。
    • 主要用于防止点击劫持攻击。
  • X-XXS-Protection
    • 响应首部字段
    • 针对跨站脚本攻击(XXS)的一种对策
    • 用于控制浏览器XXS防护机制的开关。(为啥要开关啊,一直开着不香么)
  • DNT(Do Not Track)
    • 请求首部字段
    • 拒绝个人信息被收集
    • image.png
  • P3P
    • 响应首部字段
    • 用于保护用户隐私