# 第四章 HTTP 报文头

HTTP 首部字段根据实际用途进行区分,被分为以下四种类型

# 通用头字段

# Date

Date 是一个通用首部,其中包含了报文创建的日期和时间
Headers Date MDN (opens new window)

Date: Wed, 18 Aug 2021 08:29:43 GMT

# Connection

Connection决定当前的事务完成后,是否会关闭网络连接。如果该值是“keep-alive”,网络连接就是持久的,不会关闭,使得对同一个服务器的请求可以继续在该连接上完成。
Headers Connection MDN (opens new window)

Connection: keep-alive
Connection: close

# Upgrade

Upgrade 用于检测 HTTP 协议及其他协议是否可用更高的版本

Status Code: 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket

# 请求头字段

# User-Agent

首部字段User-Agent告知服务器创建请求的浏览器和用户代理名称等信息

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36

# Accept

Accept请求头用来告知(服务器)客户端可以处理的内容类型,这种内容类型用 MIME 类型来表示。 此外还有Accept-ChartsetAccept-EncodingAccept-Language

Headers Accept MDN (opens new window)

accept: text/html,application/xhtml+xml,application/xml;
q=0.9,image/avif,image/webp,image/apng,*/*;
q=0.8,application/signed-exchange;
v=b3;
q=0.9
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9,la;q=0.8,zh-TW;q=0.7,en;q=0.6,so;q=0.5

# Range

如果下载中遇到网络中断的情况,那就必须重新开始下载,为了解决这个问题,需要一种可恢复的机制。所谓恢复是指能从之前下载中断处恢复下载。要实现该功能需要指定下载的实体范围。

对于只需获取部分资源的范围请求,包含首部字段Range即可告知服务器资源的指定范围。常见于较大文件下载的场景

请求头举例

Range: bytes=5001-10000
Range: bytes=5001-
Range: bytes=-3000,5000-7000

响应头举例

Content-Range: bytes 5001-10000/10000

# Host

首部字段Host告知服务器请求的资源速出的互联网主机名和端口号

Host: www.webdevelop.cn

# Referer

首部字段Referer告知服务器请求的原始资源的 URI

Referer: http://www.webdevelop.cn/Basic/HTTP/06/

# 响应头字段

# Expire

设置到期时间

# Cache-Control

Cache-Control 通用消息头字段,被用于在 http 请求和响应中,通过指定指令来实现缓存机制。

Headers Cache-Control MDN (opens new window)

指令 参数 说明
public 以被任何对象缓存
private 代理服务器不能缓存
no-cache 协商缓存
no-store 完全不缓存
max-age <seconds> 设置缓存存储的最大周期
max-stale <seconds> 设置缓存允许的过时时间

协商缓存:在发布缓存副本之前,强制要求缓存把请求提交给原始服务器进行验证,说白话,先检查一次缓存是不是最新的,不是就从原始服务器重新下载。

注意

从字面意思上看,很容易认为 no-cache 误解为不缓存,实际上是协商缓存,no-store 才是真正的不进行缓存

cache-control: max-age=31536000, public

# Last-Modified

# ETag

# 实体描述字段

Connection: keep-alive
Content-Encoding: gzip
Content-Length: 379
Content-Type: text/html

# 其他

字段 说明
Pragma 历史遗留,现在使用 Cache-Control
Transfer-Encoding 规定分块传输的编码方式
Via 追踪请求的传输路径
Warning 警告,大多与缓存相关
pragma: no-cache
via: 1.1 3aa2c5d8509af94e91f2680cf10da532.cloudfront.net (CloudFront)