做为一个程序猿,了解经常使用的HTTP首部的意思及它的使用场景是必须的,可是因为http首部数量太多,日常常常接触到的就那么一些,不经常使用的很容易忘记具体意思,为了方便查看特整理以下。浏览器
http首部主要分为五大部分:缓存
1. 通用首部:各类类型的报文(请求、响应报文)均可以使用,提供有关报文最基本的信息。
2. 请求首部:专用于请求报文的首部,用于给服务器提供相关信息,告诉服务器客户端的指望和能力。
3. 响应首部:专用于响应报文的首部,用于告诉客户端是谁在响应以及响应者的能力。
4. 实体首部:用于描述http报文的负荷(主体),提供了有关实体及其内容的相关信息。
5. 扩展首部:非标准首部,由应用开发者定义的首部。
复制代码
通用首部
通用首部又能够分为如下几类:安全
1. 通用信息性首部。
2. 通用缓存首部。
复制代码
通用信息性首部
- Connection:客户端和服务器能够指定与请求/响应链接相关选项;connection首部具备两个功能,第一个就是去除标准的逐跳首部(Connection、Transfer-Encoding、TE、Proxy-Authorization、Proxy-Authenticate、Upgrade、Keep-Alive和Trailer),也就是去掉再也不转发给代理的首部,这些须要去除的首部在Connection首部中列出;第二个就是保持持久链接,HTTP1.1默认就是持久链接,若是客户端和服务器任意一端想中断链接就可使用Connection: close,HTTP1.1之前的版本默认不是持久链接,所以若是想开启持久链接可使用Connection: Keep-Alive。
- Date:报文建立日期和时间。
- MIME-Version:报文发送方遵循的MIME版本。
- Trailer:若是报文采用分块传输编码(chunked transfer encoding),那么这个首部将会列出拖挂部分的首部集合(报文主体后面使用的首部集合)。
- Transfer-Encoding:传输的报文采用的编码方式。
- Update:发送方想要使用的升级版本或者协议。
- Via:报文通过的中间节点(代理、网关等)。
- Upgrade:用于检测http协议或者其余协议是否有可用的更高版本,其值也能够指定一个彻底不一样的协议名。
通用缓存首部
-
Cache-Control:传输缓存指令,用于实现缓存机制,大体上能够分为缓存请求指令和缓存响应指令两大类:服务器
-
Pragma:HTTP1.0规范中的首部,具体表现取决于实现,所以可能具备不同的效果;除非是在只支持HTTP1.0版本的应用程序中才使用该首部,不然其余状况下都应该优先考虑Cache-Control首部;理论上该首部的效果和Cache-Control: no-cache的效果同样,可是由于具体表现得参考实现。spa
请求首部
请求首部还能够分为如下几类:操作系统
1. 请求信息性首部。
2. 条件请求首部。
3. 安全请求首部。
4. 代理请求首部。
复制代码
请求信息性首部
- Client-IP:提供了客户端的IP地址。
- From:提供了客户端用户的邮件地址。
- Host:提供了接受请求的服务器主机名和端口号。
- Referer:提供了包含当前请求的文档URI。
- UA-Color:提供了客户端显示器颜色相关信息。
- UA-CPU:提供了客户端CPU的类型或制造商。
- UA-Disp:提供了客户端显示器能力的相关信息。
- UA-OS:提供了运行在客户端的操做系统名称和版本。
- UA-Pixels:提供了客户端显示器的像素信息。
- User-Agent:将发起请求的应用程序告诉服务器。
💡ps:UA-*和Client-IP首部并非规范中的内容,只是有客户端实现。
代理
- Accept:告诉服务器客户端能够接受(处理)的媒体类型,使用MIME类型表示。
- Accept-Charset:告诉服务器客户端能够接受(处理)的字符集类型。
- Accept-Encoding:告诉服务器客户端能够接受的内容编码方式。
- Accept-Language:告诉服务器客户端能够接受哪些语言。
- TE:告诉服务器可使用哪些扩展传输编码。
条件请求首部
- Expect:能够向服务器列出所指望的行为,HTTP1.1规范只列出了一个指望条件:100 Continue。
- If-Match:若是实体标记与文档当前的实体标记一致,那么就获取此文档。
- If-Modified-Since:若是在指定的日期时间(响应头Last-Modified)以后资源有被修改过,就从新获取这份资源,不然就使从缓存中取资源的副本。
- If-None-Match:若是实体标记(Etag)与文档当前的实体标志不一致,就获取此文档。
- If-Range:在必定条件下Range首部生效,值能够为etag或者时间。
- If-Unmodified-Since:若是在指定的日期时间以后资源没有被修改过,就从新获取这份资源,不然就使从缓存中取资源的副本。
- Range:若是服务器支持范围请求,则请求资源的指定的范围。
安全请求首部
- Authorization:向服务器提供可以验证客户端身份的数据,由两部分组成 <type> <credetials>,type表明验证类型;credetials表明验证令牌。
- Cookie:从客户端传送数据给服务端,一般状况下用于传输会话ID,传送给服务器的数据按理来讲是来自于服务器上一次返回给客户端的。
- Cookie2:用来讲明请求端的cookie版本。
代理请求首部
- Max-Farward:在将请求发送给源端服务器时,通过代理服务器和网关等中间节点的最大次数。
- Proxy-Authorization:与Authorization首部的做用同样,只是这里是客户端提供给代理服务器的用于验证身份的凭证,一般是在服务器返回407状态码及Proxy-Authenticate的时候发送。
- Proxy-Connection:与Connection首部的做用同样,只是这里是在与代理创建链接的时候使用。
响应首部
响应首部也能够分为如下几类:
1. 响应信息性首部。
2. 协商首部。
3. 安全响应首部。
复制代码
响应信息性首部
- Age:表示响应已存在时间(从建立响应开始计算,单位秒)。
- Public:表示服务器为该资源支持的请求方法列表。
- Retry-After:若是资源不可用的话,应该在时间点以后再次进行尝试;一般用于503状态码服务器暂时维护或者升级的时候,用于告诉客户端服务大概多久会恢复。
- Server:服务器应用程序名称和版本号。
- Title:对HTML文档来讲,就是HTML文档的源端给出的标题。
- Warning:对报文当前状态可能存在问题进行说明,ps:《HTTP权威指南》说它只是一个响应首部,可是MDN说它是一个通用首部。
协商首部
- Accept-Ranges:告诉客户端服务器支持范围请求,具体值说明的是范围请求使用的单位。
- Vary:须要查看其余首部的列表,会影响以后的响应,以后的请求只有vary列出来的全部首部的值彻底相同时才会使用缓存(MDN的例子彷佛代表请求首部和响应首部对应),不然不会看成是同一个请求。
安全响应首部
- Proxy-Authenticate:代理对客户端的质询,表示获取代理上资源须要采用的身份验证方式。
- Set-Cookie:服务器向客户端设置cookie,一般状况下使用该首部来设置会话ID传送给客户端。
- Set-Cookie2:与Set-Cookie首部的做用同样,可是目前已经被废弃。
- www-Authenticate:服务器客户端的质询,表示获取服务器上的资源须要采用的身份验证方式。
实体首部
实体首部能够细分为如下几类:
1. 实体信息性首部。
2. 内容首部。
3. 实体缓存首部。
复制代码
实体信息性首部
- Allow:列出了能够对此资源执行的请求方法列表。
- Location:用于告诉客户端,资源的实际位于何处(URL)。
内容首部
- Content-Base:解析主体中的相对URL时使用的基础URL。
- Content-Encoding:对主体执行的编码方式。
- Content-Language:解析主体时最适应使用的语言。
- Content-Length:主体长度或者尺寸。
- Content-Location:资源实际所在的位置。
- Content-MD5:主体的md5校验和。
- Content-Range:在整个资源中此实体表示的字节范围。
- Content-Type:该主体的对象类型(MIME类型)。
实体缓存首部
- Etag:实体特定版本的标志符,用于缓存的强校验。
- Expires:该值指定日期时间以后资源失效,须要重新进行对资源进行验证。
- Last-Modified:资源最后一次被修改的日期和时间。
参考资料