在Web开发的世界里,HTTP请求头和响应头就像是客户端(比如浏览器)与服务器之间交流的“秘密语言”。它们携带了各种关键信息,影响着数据的传输和处理。今天,咱们就来详细聊聊日常开发中常见的HTTP请求头和响应头,为大家的开发工作提供参考。

一、HTTP请求头

HTTP请求头是客户端在向服务器发送请求时附带的一些信息,用来告诉服务器很多关键内容,比如客户端能接收什么类型的数据、请求的来源等。下面通过表格来看看常见的请求头:

请求头名称 说明 示例
Accept 指定客户端能够接收的内容类型,比如文本、HTML、图片等多种格式。服务器会根据这个头信息,返回客户端能处理的内容格式 Accept: text/plain, text/html
Accept – Charset 浏览器能够接受的字符编码集。不同地区语言可能有不同编码,这个头能让服务器知道客户端支持哪些编码,以便正确显示内容 Accept – Charset: iso – 8859 – 5
Accept – Encoding 指定浏览器能够支持的Web服务器返回内容的压缩编码类型。使用合适的压缩编码可以减少数据传输量,加快页面加载速度 Accept – Encoding: compress, gzip
Accept – Language 浏览器可接受的语言种类。服务器可以根据这个头信息,返回对应语言版本的内容,提升用户体验 Accept – Language: en,zh
Accept – Ranges 表明客户端是否可以请求网页实体的一个或多个子范围字段。这在一些支持断点续传的场景中很有用 Accept – Ranges: bytes
Authorization HTTP授权的授权证书。当客户端需要访问受保护资源时,会在这个头中带上授权信息,让服务器验证 Authorization: Basic QWxhZGRpbjpvcGVulHNIc2FtZQ==
Cache – Control 指定请求和响应遵循的缓存机制。比如设置no – cache表示不使用缓存,每次都从服务器获取最新数据 Cache – Control: no – cache
Connection 表示是否需要持久连接。在HTTP 1.1中,默认是进行持久连接的,这样可以减少建立连接的开销 Connection: close
Cookie HTTP请求发送时,会把保存在该请求域名下的所有Cookie值一起发送给Web服务器。Cookie常用来存储用户的登录状态、偏好设置等信息 Cookie: \Version = 1; Skin = new;
Content – Length 请求的内容长度。服务器通过这个信息知道客户端发送的数据量大小 Content – Length: 348
Content – Type 请求的与实体对应的MIME信息,也就是数据的类型,比如表单数据的格式等 Content – Type: application/x – www – form – urlencoded
Date 请求发送的日期和时间。这有助于服务器了解请求的时间顺序等信息 Date: Tue, 15 Nov 2010 08:12:31 GMT
Expect 请求的特定的服务器行为。例如,客户端期望服务器先返回100 – continue响应,再继续发送请求主体 Expect: 100 – continue
From 发出请求的用户的Email。不过现在这个头用得相对较少 From: [email protected]
Host 指定请求的服务器的域名和端口号。这能让服务器知道客户端请求的具体目标 Host: www.yiidian.com
If – Match 只有请求内容与实体相匹配才有效。它通过比较实体标签(Etag)来判断 If – Match: “737060cd8c284d8af7ad3082f209582d”
If – Modified – Since 如果请求的部分在指定时间之后被修改,则请求成功,未被修改则返回304代码。这可以让客户端避免重复获取未更新的资源 If – Modified – Since: Sat, 29 Oct 2010 19:43:31 GMT
If – None – Match 如果内容未改变,返回304代码。它通过比较服务器先前发送的Etag和本次请求的Etag来判断 If – None – Match: “737060cd8c284d8af7ad3082f209582d”
If – Range 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也是Etag If – Range: “737060cd8c284d8af7ad3082f209582d”
If – Unmodified – Since 只在实体在指定时间之后未被修改才请求成功 If – Unmodified – Since: Sat, 29 Oct 2010 19:43:31 GMT
Max – Forwards 限制信息通过代理和网关传送的时间。这可以防止请求在代理链中无限循环 Max – Forwards: 10
Pragma 用来包含实现特定的指令,比如设置no – cache,和Cache – Control头有类似作用 Pragma: no – cache
Proxy – Authorization 连接到代理的授权证书。当客户端通过代理服务器访问资源时,需要这个头来向代理服务器进行授权 Proxy – Authorization: Basic QWxhZGRpbjpvcGVulHNIc2FtZQ==
Range 只请求实体的一部分,指定范围。比如在下载大文件时,可以通过这个头实现断点续传 Range: bytes = 500 – 999
Referer 先前网页的地址,也就是当前请求网页的来路。服务器可以通过这个头了解用户是从哪个页面跳转到当前页面的 Referer: http://www.yiidian.com/spring
TE 客户端愿意接受的传输编码,并通知服务器接受尾加头信息。它和Transfer – Encoding头相关 TE: trailers, deflate;q = 0.5
Upgrade 向服务器指定某种传输协议,以便服务器进行转换(如果支持)。比如从HTTP 1.1升级到HTTP 2.0 Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
User – Agent 包含发出请求的用户信息,比如使用的浏览器类型、操作系统等。服务器可以根据这个头信息,为不同的客户端提供适配的内容 User – Agent: Mozilla/5.0 (Linux; X11)
Via 通知中间网关或代理服务器地址,以及通信协议。这有助于追踪请求在代理链中的路径 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 关于消息实体的警告信息,比如数据可能存在问题等 Warn: 199 Miscellaneous warning

二、HTTP响应头

HTTP响应头是服务器在向客户端返回响应时附带的信息,它告诉客户端很多关于响应的关键信息,比如缓存策略、资源位置等。以下是常见的响应头:

响应头名称 说明 示例
Accept – Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求。这对于支持断点续传的服务很重要 Accept – Ranges: bytes
Age 从原始服务器到代理缓存形成的估算时间(以秒计,非负)。可以帮助客户端了解响应数据的新鲜度 Age: 12
Cache – Control 告诉所有的缓存机制是否可以缓存及哪种类型。比如设置no – cache让客户端不要缓存响应数据 Cache – Control: no – cache
Content – Encoding Web服务器支持的返回内容压缩编码类型。客户端根据这个头信息来解压缩响应数据 Content – Encoding: gzip
Content – Language 响应体的语言。客户端可以根据这个头信息,正确显示响应内容的语言 Content – Language: en,zh
Content – Length 响应体的长度。客户端通过这个信息知道要接收的数据量大小 Content – Length: 348
Content – Location 请求资源可替代的备用的另一地址。当资源有多个访问地址时,服务器可以通过这个头告诉客户端 Content – Location: /index.htm
Content – MD5 返回资源的MD5校验值。客户端可以用这个值来验证接收到的资源是否完整 Content – MD5: Q2hlY2sgSW50ZWdyaXR5IQ
Content – Range 在整个返回体中本部分的字节位置。在处理部分请求(如断点续传)时,这个头很关键 Content – Range: bytes 21010 – 47021/47022
Content – Type 返回内容的MIME类型。客户端根据这个头信息,正确解析响应数据,比如是HTML、JSON还是图片等 Content – Type: text/html; charset = utf – 8
Date 原始服务器消息发出的时间。客户端可以通过这个时间了解响应的时效性 Date: Tue, 15 Nov 2010 08:12:31 GMT
ETag 请求变量的实体标签的当前值。可以用于判断资源是否有变化,和If – Match等请求头配合使用 ETag: “737060cd8c284d8af7ad3082f209582d”
Expires 响应过期的日期和时间。客户端根据这个时间来判断是否可以使用缓存的响应数据 Expires: Thu, 01 Dec 2010 16:00:00 GMT
Last – Modified 请求资源的最后修改时间。客户端可以通过这个时间判断资源是否更新 Last – Modified: Tue, 15 Nov 2010 12:45:26 GMT
Location 用来重定向接收方到非请求URL的位置来完成请求或标识新的资源。比如用户访问的页面已迁移,服务器通过这个头将用户重定向到新页面 Location: http://www.yiidian.com/spring
Pragma 包括实现特定的指令,可应用到响应链上的任何接收方。和请求头中的Pragma类似,比如设置no – cache Pragma: no – cache
Proxy – Authenticate 指出认证方案和可应用到代理的该URL上的参数。当客户端通过代理服务器访问受保护资源时,代理服务器通过这个头要求客户端进行认证 Proxy – Authenticate: Basic
Refresh 应用于重定向或一个新的资源被创造,在指定时间之后重定向(由网景提出,被大部分浏览器支持)。比如在5秒后重定向到另一个页面 Refresh: 5;url = http://www.yiidian.com/spring
Retry – After 如果实体暂时不可取,通知客户端在指定时间之后再次尝试。比如服务器维护时,告知客户端多久后再访问 Retry – After: 120
Server Web服务器软件名称。可以让客户端知道是哪种服务器在提供服务,比如Apache、Nginx等 Server: Apache/13.27 (Unix) (Red – Hat/Linux)
Set – Cookie 设置Http Cookie。服务器通过这个头在客户端设置Cookie,用于存储用户相关信息 Set – Cookie: UserlD = JohnDoe; Max – Age = 3600; Version = 1
Trailer 指出头域在分块传输编码的尾部存在。在一些特殊的数据传输场景中使用 Trailer: Max – Forwards
Transfer – Encoding 文件传输编码。比如使用chunked编码进行分块传输 Transfer – Encoding: chu

掌握这些HTTP请求头和响应头,对于Web开发中的调试、优化以及实现各种功能都有着至关重要的作用。希望这篇文章能帮助大家在开发过程中更好地理解和运用它们,让我们的Web应用更加高效、稳定!