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

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

 首部的分类:

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

请求头:

解析网络通讯协议,http协议报文头部解析_第1张图片

响应头:

解析网络通讯协议,http协议报文头部解析_第2张图片

通用首部

通用首部是请求头和响应头、共有的,有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报文的日期和时间
Date:Wed, 06 Mar 2019 16:03:03 GMT
GMT格式的时间
Pragma HTTP/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/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版本号、响应状态码、响应简短描述,如下图:

解析网络通讯协议,http协议报文头部解析_第3张图片

其中,比较常见的状态码有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 协议版本

你可能感兴趣的:(后台技术)