解析网络通讯协议,http协议报文头部解析

HTTP协议的请求和响应报文中必定包含HTTP报文头部,也称为首部。首部内容分别为客户端和服务器处理请求和响应提供所需要的信息。本质上来说,首部包含一些名/值对的数值,类似于键值对。单个HTTP首部字段可以有多个值,用逗号分隔.

 首部的分类:

  1. 通用首部:既可出现在请求报文中,也可出现在响应报文中。比如Date首部。
  2. 请求首部:请求报文才有的,描述请求数据和客户端特性。
  3. 响应首部:响应报文中的,描述服务端。
  4. 实体首部:描述是实体内容性质。
  5. 扩展首部:非标准的首部。

请求头:

响应头:

通用首部

通用首部是请求头和响应头、共有的,有Connection、Cache-Control、Date、Pragma、Trailer、Transfer-Encoding、Upgrade、Via、Warning。

首部字段名作用说明值说明
Connection

控制是否持久连接;

控制不再转发给代理的首部字段;

Connection:Keep-AliveHTTP 1.1之前版本默认是短连接,旧版本需要使用持久连接需要设置Keep-Alive属性值
Connection:closeHTTP/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报文的日期和时间
Date:Wed, 06 Mar 2019 16:03:03 GMT
GMT格式的时间
PragmaHTTP/1.1之前版本的历史遗留字段,为了HTTP/1.0向后兼容而定义。
Pragma:no-cache
只用在客户端发送的请求中,要求所有中间服务器不返回缓存的资源
Trailer说明报文主体记录了哪些首部字段  
Transfer-Encoding规定传输报文主体时采用的编码方式
Transfer-Encoding:chunked
仅对分块传输编码有效
Upgrade用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议
Upgrade:TLS/1.0,HTTP/1.1
 
Via追踪客户端与服务器之间的请求和响应报文的传输路径  

请求首部

请求头字段用于客户端浏览器向服务器传递附加参数信息,告知服务器关于客户端接收属性等,主要包括客户端可以接收的数据类型、压缩类型、语言、发出请求的超链接所属网页的url地址等。

首部字段名作用说明值说明
Accept告知服务器,客户端浏览器能接受文本、图片等类型Accept: text/plain, text/htmltext/html代表只接收html网页类型内容
Accept-Charset指定浏览器可以接受的字符编码集Accept-Charset: iso-8859-5 
Accept-Encoding指定浏览器可以支持的web服务器返回内容压缩编码类型Accept-Encoding: gziphttp定义机制,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-datahttps://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网关超时服务器作为网关或代理没接收到上游服务器回应
505HTTP 版本不受支持服务器不支持请求中所用的 HTTP 协议版本

版权声明:本文为a281246240原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。