HTTP首部编程主要涉及在HTTP请求和响应中添加和解析特定的字段。这些字段用于传递额外的信息,如客户端信息、服务器信息、缓存控制、认证等。以下是一些常见的首部字段及其用法:
通用首部字段
这些字段在请求和响应报文中都会使用:
Cache-Control
`public`: 表明资源可以被任何用户缓存。
`private`: 表明资源只能被创建它的用户缓存。
`no-cache`: 防止缓存过期资源,要求每次请求都要向服务器验证。
`no-store`: 不允许缓存请求或响应的内容,适用于包含敏感信息的情况。
Connection
用于管理连接,如`keep-alive`可以保持连接打开,减少建立和关闭连接的开销。
Date
报文的创建日期和时间。
Pragma
某些情况下用于控制缓存行为,例如`Pragma: no-cache`与`Cache-Control: no-cache`是等价的。
Trailer
报文末端的首部一览,通常在分块传输编码中使用。
Transfer-Encoding
指定报文主体的传输编码方式,如`chunked`。
Upgrade
指定是否升级到其他协议,如HTTP/2。
Via
代理服务器的相关信息,用于跟踪请求经过的代理。
Warning
错误通知,用于提供关于报文内容可能存在的问题的信息。
请求首部字段
这些字段仅在请求报文中使用:
Accept
用户代理可处理的媒体类型,如`Accept: image/png, image/jpeg`。
Accept-Charset
优先的字符集,如`Accept-Charset: utf-8, iso-8859-1`。
Accept-Encoding
优先的内容编码,如`Accept-Encoding: gzip, deflate`。
Accept-Language
优先的语言(自然语言),如`Accept-Language: en-us, en`。
Authorization
用户的认证信息,如`Authorization: Bearer
From
用户的电子邮箱地址,如`From: user@example.com`。
Host
请求资源所在的服务器,如`Host: www.example.com`。
If-Match
比较实体标记(ETag),如`If-Match: "abc123"`。
If-Modified-Since
比较资源的更新时间,如`If-Modified-Since: Wed, 15 Nov 2023 08:12:31 GMT`。
If-None-Match
比较实体标记(与If-Match相反),如`If-None-Match: "def456"`。
If-Range
资源未更新时发送实体,如`If-Range: "abc123"`。
Max-Forwards
最大传输逐跳数,如`Max-Forwards: 10`。
Proxy-Authorization
代理服务器要求客户端的认证信息,如`Proxy-Authorization: Basic base64(username:password)`。
Range
实体的字节范围请求,如`Range: bytes=0-1023`。
Referer
请求的原始资源的URI,如`Referer: http://www.example.com/page.html`。
TE
传输编码的优先级,如`TE: gzip, deflate`。
响应首部字段
这些字段仅在响应报文中使用:
Cache-Control
控制缓存行为,如`Cache-Control: public, max-age=3600`。
Connection
逐跳首部、连接的管理,如`Connection: close`。
Date
报文的创建日期和时间。
Pragma
报文指令,如`Pragma: no-cache`。
Server
-