HTTP知识普及系列:HTTP首部
- HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成。在响应中,HTTP报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段3部分构成。
- 客户端和服务器端以HTTP协议进行通信的过程中,无论是请求还是响应都会使用首部字段,它能起到传递额外重要信息的作用。首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
- 当HTTP报文首部中出现了两个或两个以上具有相同首部字段名时会怎么样?这种情况在规范内尚未明确,根据浏览器内部处理逻辑的不同,结果可能并不一致。有些浏览器会优先处理第一次出现的首部字段,而有的则会优先处理最后出现的首部字段。
- HTTP四种首部字段类型
- 通用首部字段:请求报文和响应报文两方都会使用的首部。
- 请求首部字段:从客户端向服务器端发送请求报文时使用的首部。
- 响应首部字段:从服务器端向客户端返回响应报文时使用的首部。
- 实体首部字段:针对请求报文和响应报文的实体部分使用的首部。
- 通用首部字段
- Cache-Control:通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制。
- Connection:控制不在转发给代理的首部字段;管理持久连接。
- Data:表明创建HTTP报文的时间和日期。
- Pragma:只用在客户端发送的请求中,所有的中间服务器不返回缓存的资源。
- Trailer:事先说明报文主体后记录了哪些首部字段。同样可以用在分块传输编码时。
- Transfer-Encoding:规定了传输报文主体时采用的编码方式。
- Upgrade:用于检测HTTP协议及其他协议是否可以使用更高的版本进行通信。
- Via:为了追踪客户端与服务器之间的请求和响应报文的传输路径。
- Warning:通常会告知用户一些与缓存相关的问题的警告。
- 请求首部字段:请求首部字段是从客户端往服务器发送请求的报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容。
- Accept:该字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。
- Accept-Charset:用来通知服务器用户代理支持的字符集及字符集的相对优先顺序,可一次性指定多种字符集。
- Accept-Encoding:用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。
- Accept-Language:用来告知服务器用户代理嫩巩固处理的自然语言集(中文或英文等),以及自然语言集的相对优先级。
- Authorization:用来告知服务器,用户代理的认证信息。
- Expect:客户端使用首部字段Except来告知服务器,期望出现的某种指定行为。
- From:用来告知服务器使用用户代理的用户的电子邮件地址。
- Host:告知服务器,请求的资源所处的互联网主机名和端口号。Host首部字段在HTTP/1.1规范内是唯一一个必须包含在请求内的首部字段。
- If-Match:类似于If-xxx这样的请求首部,可以称为条件请求。
- If-Modified-Since:告知服务器若该字段值早于资源的更新时间,则希望能处理该请求。
- If-None-Match:该字段值得实体标记值与请求资源的ETag不一致时,它就告知服务器处理该请求。
- If-Range:它告知服务器若指定的If-Range字段值和请求资源的ETag值或时间相一致时,则作为范围请求处理。反之则返回全体资源。
- If-Unmodified-Since:告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求。
- Max-Forwards:通过TRACE方法或OPTIONS方法,发送包含首部字段Max-Forwards的请求时,该字段以十进制整数形式指定可经过的服务器最大数目。当服务器接收到Max-Forwards值为0的请求时,则不再进行转发,而是直接返回响应。
- Proxy-Authorization:客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息。
- Range:告知服务器资源的指定范围。
- TE:告知服务器客户端能够处理响应的传输编码方式及相对优先级。
- User-Agent:将创建请求的浏览器用户代理名称等信息传达给服务器。
- 响应首部字段:响应首部字段是由服务器端向客户端返回响应报文中所使用的字段,用于补充响应的附加信息、服务器信息、以及对客户端的附加要求等信息。
- Accept-Ranges:用来告知客户端服务器是否能够处理范围请求,以指定获取服务器端某个部分的资源。
- Age:告知客户端,源服务器在多久前创建了响应。单位秒。
- ETag:告知客户端实体标识,它是一种可将资源以字符串形式做唯一标识的方式。
- Location:可以将响应接收方引导至某个与请求URI位置不同的资源。
- Proxy-Authenticate:把由代理服务器所要求的认证信息发送给客户端。
- Retry-After:告知客户端应该在多久之后再次发送请求。
- Server:告知客户端当前服务器上安装的HTTP服务器应用程序的信息。
- Vary:可对缓存进行控制,源服务器回向代理服务器传达关于本地缓存使用方法的命令。
- WWW-Authenticate:用于HTTP访问认证。
- 实体首部字段:包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息。
- Allow:用于通知客户端能够支持Request-URI指定资源的所有HTTP方法。
- Content-Encoding:告知客户端服务器对实体的主体部分选用的内容编码方式。(gzip/compress/deflate/identity)
- Content-Language:告知客户端,实体主体使用的自然语言。(中文或英文等语言)
- Content-Length:表明了实体主体部分的大小。
- Content-Location:给出与报文主体返回资源对应的URI。
- Content-MD5:是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达。
- Content-Range:针对范围请求,返回响应时使用的首部字段,能告知客户端作为相应返回的实体的哪个部分符合范围请求。
- Content-Type:说明了实体主体内对象的媒体类型,该字段用type/subtype形式赋值。
- Expires:会将资源失效的日期告知客户端。
- Last-Modified:指明资源最终修改的时间。
- 管理服务器与客户端之间状态的Cookie。其工作机制是用户识别以及状态管理。调用Cookie时,由于可校验Cookie的有效期,以及发送方的域、路径、协议等信息。
- Set-Cookie字段的几个属性:
- expires属性:指定浏览器可发送Cookie的有效期。
- path属性:可用于限制指定Cookie的发送范围的文件目录。
- domain属性:指定的域名。
- secure属性:用于限制Web页面仅在HTTPS安全连接时才可以发送Cookie。
- HTTPOnly:Cookie的扩展功能,它使JavaScript脚本无法获得Cookie。其主要目的是为了防止跨站脚本攻击对Cookie的信息窃取。