HTTP协议的请求和响应报文中必定包含HTTP报文头部,也称为首部。首部内容分别为客户端和服务器处理请求和响应提供所需要的信息。本质上来说,首部包含一些名/值对的数值,类似于键值对。单个HTTP首部字段可以有多个值,用逗号分隔.
首部的分类:
- 通用首部:既可出现在请求报文中,也可出现在响应报文中。比如Date首部。
- 请求首部:请求报文才有的,描述请求数据和客户端特性。
- 响应首部:响应报文中的,描述服务端。
- 实体首部:描述是实体内容性质。
- 扩展首部:非标准的首部。
请求头:

响应头:

通用首部
通用首部是请求头和响应头、共有的,有Connection、Cache-Control、Date、Pragma、Trailer、Transfer-Encoding、Upgrade、Via、Warning。
| 首部字段名 | 作用说明 | 值 | 值说明 |
| Connection | 控制是否持久连接; 控制不再转发给代理的首部字段; | Connection:Keep-Alive | HTTP 1.1之前版本默认是短连接,旧版本需要使用持久连接需要设置Keep-Alive属性值 |
| Connection:close | HTTP/1.1版本默认持久连接,如需中断连接发送close属性值 | ||
| 请求报文头部中的Cache-Control | 规定缓存行为 用于请求头 | Cache-Control:no-store | 不缓存请求和响应的任何内容 |
| no-cache | 告知代理(中间)服务器不直使用缓存,要求直接向原服务器请求 | ||
| max-age=[seconds] | 告知服务器,客户端希望收到一个存在时间小于seconds秒的资源 | ||
| max-stale(=[seconds]) | 告知代理服务器,客户端希望收到超过缓存时间seconds秒的资源,没定义则任意时长 | ||
| min-fresh=[seconds] | 规定返回的资源在至少在seconds秒内被更新过 | ||
| only-if-cached | 只从缓存中获取资源,不到达原服务器 | ||
| no-transform | 规定服务器返回的实体数据是没有被转换(比如压缩)过的资源 | ||
| 响应报文头部中的Cache-Control | 表示是否能缓存 用于响应头 | Cache-Control:public | 表示允许客户端缓存响应信息,并可以给其他用户使用 |
private[="user-name"] | 仅供特定用户缓存,使用 | ||
no-cache | 服务器返回的响应中包含no-cache指令,说明缓存服务器不会再对资源进行缓存。 | ||
no-store | 不缓存请求或响应的任何内容 | ||
| no-transform | 缓存不能改变实体主体的媒体类型,可以防止缓存或代理压缩图片等类似操作 | ||
| must-revalidate | 使用must-revalidate指令,代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。 | ||
| Date | 首部字段Date表明创建HTTP报文的日期和时间 | | GMT格式的时间 |
| Pragma | HTTP/1.1之前版本的历史遗留字段,为了HTTP/1.0向后兼容而定义。 | | 只用在客户端发送的请求中,要求所有中间服务器不返回缓存的资源 |
| Trailer | 说明报文主体记录了哪些首部字段 | ||
| Transfer-Encoding | 规定传输报文主体时采用的编码方式 | | 仅对分块传输编码有效 |
| Upgrade | 用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议 | | |
| Via | 追踪客户端与服务器之间的请求和响应报文的传输路径 |
请求首部
请求头字段用于客户端浏览器向服务器传递附加参数信息,告知服务器关于客户端接收属性等,主要包括客户端可以接收的数据类型、压缩类型、语言、发出请求的超链接所属网页的url地址等。
| 首部字段名 | 作用说明 | 值 | 值说明 |
|---|---|---|---|
| Accept | 告知服务器,客户端浏览器能接受文本、图片等类型 | Accept: text/plain, text/html | text/html代表只接收html网页类型内容 |
| Accept-Charset | 指定浏览器可以接受的字符编码集 | Accept-Charset: iso-8859-5 | |
| Accept-Encoding | 指定浏览器可以支持的web服务器返回内容压缩编码类型 | Accept-Encoding: gzip | http定义机制,web客户端和服务端采用统一压缩方式传输内容,节约和加速,浏览器支持采用经过 gzip,deflate等压缩过的资源,deflate基本已过时 |
| Accept-Language | 浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到 | Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7 | 语言与字符集的区别:zh-CN 为汉语,gbk2312、utf8是编码,与语言不同 |
| Accept-Charset | 浏览器可以接受的字符编码集 | Accept-Charset: iso-8859-5 | |
| Authorization | 传送授权信息信息 | Authorization: Basic wergwWERF13 | 主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。 |
| Content-Length | 表示请求消息正文的长度 | Content-Length: 122 | |
| Cookie | 传递本地cookis值到服务器 | Cookie: SessionId=dfsdf; uname=zx; | http请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器 |
| Content-Type | 指定响应体的媒体资源类型 | Content-Type: application/x-www-form-urlencoded或multipart/form-data | 见https://www.jianshu.com/p/a82a9f003e8b, x-www-form-urlencoded适合传递参数,multipart/form-data更适合表单上传file文件 |
| Host | 指定请求的服务器的域名和端口号,默认80省略 | Host:www.baidu.com | 一般都是从http url当中提取出来,无需手动指定 |
| Range | 指定范围只请求实体的一部分 | Range: bytes=0-400 | |
| User-Agent | 告知服务器,客户端浏览器使用的操作系统和浏览器的名称和版本 | User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:67.0) Gecko/20100101 Firefox/67.0 | 当返回内容与浏览器相关时用处较大 |
响应首部
响应头字段用于服务器在响应消息中向客户端传递附加信息,包括服务程序名、被请求资源需要的认证方式、被请求资源已移动到的新地址等信息。
| 首部字段名 | 作用说明 | 值 | 值说明 |
|---|---|---|---|
| Accept-Ranges | 表明服务器是否接受获取某个实体的一部分及分段类型 | Accept-Ranges: bytes | |
| Age | 资源在缓存服务器存放时长,秒 | Age: 120 | |
| Expires | 资源在缓存服务器过期时间 | Expires: Mon, 08 Jul 2019 06:18:36 GMT | |
| Last-Modified | 资源最后修改时间 | Last-Modified: Mon, 08 Jul 2019 06:18:36 GMT | |
| Location | 重定向 | sendRedirect | 一般使用HttpServletResponse的sendRedirect方法设定 |
| Refresh | 指定浏览器应该在多少秒之后刷新文档或者跳转 | setHeader("Refresh", "5; URL=http://host/path") | 可在页面head属性meta中设定 |
| Server | 返回web服务器名称 | Server: BWS/1.1 | 或者是Apache服务 |
| Set-Cookie | 服务器返回,浏览器接收到立即存储在cookie当中 | Set-Cookie: delPer=0; path=/; domain=.baidu.com; Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 | cookie现如今使用非常普遍,一般网站都会实现cookie |
响应状态码
在http响应头中有一行为响应行,响应行包括http版本号、响应状态码、响应简短描述,如下图:

其中,比较常见的状态码有200、404、500等,状态是服务器返回给浏览器的一项说明,通过状态码可以反馈出当前请求是否存在问题,存在什么问题,下面列举出不同状态码代表的意义。
| http状态码 | 意义 | 说明 |
http状态返回代码 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码 | ||
| 100 | 继续 | 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分请求。 |
| 101 | 切换协议 | 请求者已要求服务器切换协议,服务器已确认并准备切换 |
| http状态返回代码 2xx (成功) 表示成功处理了请求的状态代码 | ||
| 200 | 成功 | 请求成功,无任何问题 |
| 201 | 已创建 | 请求成功并且服务器创建了新的资源 |
| 202 | 已接受 | 服务器已接受请求,但尚未处理 |
| 203 | 非授权信息 | 服务器已成功处理了请求,但返回的信息可能来自另一来源 |
| 204 | 无内容 | 服务器成功处理了请求,但没有返回任何内容 |
| 205 | 重置内容 | 服务器完成了请求,用户代理必须复位当前已经浏览过的文件 |
| 206 | 部分内容 | 服务器已经完成了部分用户的GET请求 |
| http状态返回代码 3xx (重定向) 表示要完成请求,需要进一步操作。 一般都是由代码来操作重定向 | ||
| 300 | 多种选择 | 对于请求服务器有多种选择,服务器根据请求者属性选择 |
| 301 | 永久移动 | 请求的网页已移动新位置,服务器将自动切换到新地址 |
| 302 | 临时移动 | 请求网址已转移新位置,请求还是原来的地址,http会在response中返回新地址,浏览器自动发起request请求 |
| 303 | 查看其他位置 | 请求者应当对不同的位置使用单独的 GET 请求来检索响应 |
| 304 | 未修改 | 较上次请求未做改变,请求不会返回内容,默认先前内容,本地缓存 |
| 305 | 使用代理 | 请求者只能使用代理访问 |
| 306 | 版本重置 | 前一版本HTTP中使用的代码,现行版本中不再使用 |
| 307 | 临时移除 | 请求的资源临时性删除 |
| http状态返回代码 4xx(请求错误) 这些状态代码表示请求出错,请求端存在问题 | ||
| 400 | 错误请求 | 请求有语法错误,服务器不能理解 |
| 401 | 未授权 | 服务器需要验证请求身份,比如需要登录、禁止访问资源等 |
| 403 | 禁止访问 | 服务器收到请求后拒绝提供请求,禁止访问,ip地址不合法、要求客户证书、证书要求等 |
| 404 | 未找到 | 常见的notfound,请求正常,但服务器端没有相关页面或者资源,找不到页面 |
| 405 | 方法禁用 | 禁用请求中指定的方法 |
| 406 | 不接受 | 无法使用请求的内容特性响应请求的网页,根据用户发送的Accept属性,请求资源不可访问 |
| 407 | 需代理授权 | 需在代理服务器上得到授权 |
| 408 | 请求超时 | 服务器等候请求时发生超时 |
| 409 | 冲突 | 服务器在完成请求时发生冲突 |
| 410 | 已删除 | 服务器返回410表示请求的资源已被删除 |
| 411 | 需要有效长度 | 服务器不接受不含有效内容长度标头字段的请求,请求时需要定义的Content-Length属性 |
| 412 | 未满足前提条件 | 一个或多个请求头字段在当前请求中错误,服务器无法满足 |
| 413 | 请求实体过大 | 请求的资源大于服务器允许的大小,服务器处理不了 |
| 414 | 请求URI过长 | 请求的资源URL长于服务器允许的长度 |
| 415 | 不支持的媒体类型 | 请求的格式不受请求页面的支持 |
| 416 | 请求范围不符合要求 | 请求时无法提供请求的范围,服务器返回416,应定义Range请求头字段属性 |
| 417 | 未满足期望值 | 服务器不满足请求Expect头字段指定的期望值 |
| http状态返回代码 5xx(服务器错误) 表示服务器发生内部错误。 不是请求不合理。 | ||
| 500 | 服务器内部错误 | 服务器遇到错误,无法完成请求,服务器关闭、服务器太忙、应用程序无效等 |
| 501 | 尚未实施 | 服务器不具备完成请求的功能,无法识别请求方法等 |
| 502 | 错误网关 | 服务器作为网关或代理,从上游服务器收到无效响应 |
| 503 | 服务不可用 | 服务器目前暂时无法使用,超载或停机维护等 |
| 504 | 网关超时 | 服务器作为网关或代理没接收到上游服务器回应 |
| 505 | HTTP 版本不受支持 | 服务器不支持请求中所用的 HTTP 协议版本 |