04.Fiddler主界面SessionList区介绍

在之前的几篇文章中,我们学会了Fiddler的基本原理和抓取手机流量的设置,我们已经能够在Fiddler上看到五颜六色的报文在欢快的跑动了。在之前的第一讲中我们大体介绍了Fiddler主界面的几个组成部分,接下来的几篇教程我们主要来介绍一下各个功能的简单的操作和实用的快捷键,今天我们先学习的是花花绿绿的报文跑动着的SessionList区。

Session是什么?

对HTTP协议有些许了解的同学应该知道,一个完整的HTTP会话是由Request和Response两部分组成的,客户端向服务器发出请求(Request),服务器针对性的给出回应(Response),他们总是成对出现的,在Fiddler中我们把这样的一对消息称做一个Session。一个Session的生命周期大体可以分成四个部分:

  • 客户端发送请求给Fiddler
  • Fiddler处理后转发请求给Server
  • Server返回Response给Fiddler
  • Fiddler处理后转发Response给客户端
    Fiddler在收到客户端发来的报文后就在SessionList列表中添加一个新记录,在没收到服务器Response之前,仅能查看Request相关的信息,同时在界面中Result列也显示一个横杠表示没有收到Response,收到Response后会显示实际的状态码。实际上Session的生命周期和之前讲过的代理的原理是息息相关的,后续所有涉及到修改HTTP报文的操作都要对这个生命周期有深刻的认识才能准确的进行。

SessionList中的表头

SessionList的表头区和大部分列表的功能一致,决定了各个内容的显示顺序,在边界拖动可以更改显示大小,点击表头还可以将所有内容按照该列排序,我们先看看常见的表头及其内容含义:

#

显示Session编号和当前Session状态/类型,编号是按照Request到达Fiddler的顺序记录的,清空全部后从新从1计数,否则从当前最大值开始计数,只要是经过了Fiddler的流量均会被计数,故部分被脚本隐藏的项会导致看起来列表中的编号不连贯,这并不会产生任何的问题。编号是Fiddler赋予给每一个Session的,与客户端和服务器的交互无关。

除了编号以外,每个Session还会匹配一个图标来标示当前session的状态和类型,这里有一张表简述了各种状态及其图标:


04.Fiddler主界面SessionList区介绍_第1张图片

04.Fiddler主界面SessionList区介绍_第2张图片

Result

Result列显示的是Response中的状态码,也就是HTTP协议中的Response Status Code。如前文所说在没有收到Response Header之前,这个项会用横杠表示。常见的状态码如下:

  • 200 OK:请求已成功,请求所希望的响应头或数据体将随此响应返回。
  • 206 Partial Content:服务器已经成功处理了部分 GET 请求。类似于 FlashGet 或者迅雷这类的 HTTP下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。
  • 301 Moved Permanently:被请求的资源已永久移动到新位置,新的永久性的URI 应当在响应的 Location 域中返回。
  • 302 Move temporarily:请求的资源临时从不同的 URI响应请求,新的永久性的URI 应当在响应的 Location 域中返回。
  • 304 Not Modified:304表明服务器根据请求判断本地缓存无需更新,节省流量。
  • 401 Unauthorized:需要提供身份认证信息
  • 403 Forbidden:服务器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助。
  • 404 Not Found:请求失败,请求所希望得到的资源未被在服务器上发现。
  • 407 Proxy Authentication Required:与401响应类似,只不过客户端必须在代理服务器上进行身份验证。
  • 500 Internal Server Error:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。
  • 502 Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
  • 504 Gateway Timeout:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。

Protocol

显示当前Session使用的Protocol类型,通常为HTTP或HTTPS。

Host

Host列显示当前访问网站的HOST,即“HTTP://”或“HTTPS://”与第一个“/”之间的部分,DNS根据HOST会把请求转发给不同的IP地址。

URL

URL列显示访问请求URL除HOST之外的部分

Body

Body列显示ResponseBody的大小(字节为单位),这里的大小是仅包含ResponseBody的大小而不包含ResponseHeader,如果需要统计流量是需要把Header也计入的,我们可以通过自定义列的方法来实现这个需求,在后续几期中会介绍,请持续关注哦。

Caching

Caching列显示的是缓存相关的有效性信息,缓存实际上就是本地对服务器信息的存储,如果本地缓存是有效的,服务器就不用再传输一份已节省网络流量,缓存的基本处理流程如下:

  • 请求处理:用户发起一个http请求,缓存获取到URL,根据URL查找是否有匹配的副本,这个副本可能在内存中,也可能在本地磁盘。
  • 新鲜度检测:如果缓存中存在所请求资源的副本,则进行新鲜度检测。新鲜度检测举个简单的例子,我们在商店买了一瓶汽水,汽水瓶上肯定会标有过期时间,我们会根据这个过期时间和现在的时间做对比,看看饮料过期了没,如果没过期,我们正常喝就行了,如果已经过期,我们肯定要找商家。。。其实这就是一个新鲜度检测的过程,HTTP请求的新鲜度检测流程也是这样的,HTTP发起一个请求时,发现缓存中有相应的副本,接着就会检查这个副本有没有过期,如果没有过期,直接使用。如果已经过期,则进行再验证。具体的实现在下面会介绍。
  • 服务器再验证:缓存中的文档过期了并不代表他和服务器上的不一样,所以这个时候就需要问问服务器,过期的这段时间里这个文档到底有没有改变。如果改变了,缓存就会获取一份新的文档副本,然后发送给客户端。如果没有改变,缓存只需要获取新的首部,包括一个新的过期时间,并对缓存中的首部更新。
  • 创建响应并返回:我们希望缓存看起来就像是来自原始服务器一样,缓存将已缓存的服务器响应首部作为响应首部,发送给客户端。

简单了解下服务器再验证的实现:缓存要问问服务器,牛奶已经过期了,到底还能不能喝。我说错了,是文档,不是牛奶。HTTP中,使用两个请求请首部来完成这个功能:If-Modified-Sice和If-None-Match。为啥又要两个首部来完成这个功能了?答案还是因为历史的原因。一开始使用 If-Modified-Sice:首部,date是上一次缓存牛奶时,响应中Last-Modified首部的值。客户端拿着这个值,问服务器,这段时间内这个牛奶你有没有修改过?服务器看了看这个牛奶的修改时间,如果没有修改过,会返回一个304 Not Modified的响应;如果修改过,把最新的牛奶返回给客户端。后来,人们发现这样有问题,因为就算修改时间变化了,文档也不一定发生改变!于是乎,就有了 If-None-Match:首部,tag是上一次缓存文档时,响应中Etag的值,Etag是一种唯一标识资源的方式,就像java中的hashcode,如果hashcode不一样,那么两个对象肯定不一样!

缓存部分内容节选自HTTP协议:缓存,作者:夕水溪下

Content-Type

Content-Type是ResponseHeader中的一个关键字段,用来标示该Response的类型,客户端在收到Response后可以根据不同的类型做不同的处理。

Process

Process列显示触发该请求的进程,仅对PC机的流量生效,远程代理流量是无法显示进程信息的

Remark

Remark列显示用户对该Session做的备注,主要用于将给他人展示时使用,点击快捷工具栏中的Remark可以快速添加备注信息

SessionList的上下文菜单

上下文菜单即鼠标右键菜单,在选中一条或若干条Session记录后(Ctrl可间隔选中,Shift可以选中一片,空白区域拖动也可完成选中操作),右键可以打开,菜单是可以通过FiddlerScript扩展的,或者随版本变化,可能造成每个人的上下文菜单不尽相同,我们来看看他们的用途:


04.Fiddler主界面SessionList区介绍_第3张图片
  • Decode Selected Sessions:解码选中的Sessions
  • AutoScroll Session List:开启/关闭自动滚动
  • Copy:复制选中的Sessions,有子选项:
    • Just Url:复制当前Session的URL
    • This column:复制当前Session鼠标点击列的内容
    • Terse summary:复制Request的Method和URL,以及Response的状态码(如果是301或302还会列出目标Location)
    • Headers only:以文本复制Request和Response的Header部分
    • Session:以文本复制Request和Response的全部内容
    • Full Summary:复制当前显示的所有列的信息
  • Save:保存选中的Sessions,有子选项:
    • Selected Sessions:针对所有选中项的操作,有子选项:
      • in ArchiveZIP:使用自带的saz格式保存选中的请求,可以用于回放(在File->Load Achieve中可以load保存的saz文件)
      • as Text…:以文本格式保存选中的请求
      • as Text(Header Only):以文本格式保存选中的请求(仅保留Header不保存正文)
    • Request:针对选中Session的Request的保存操作,有子选项:
      • Entire Request…:保存完整的Request
      • Request Body…:仅保存正文部分(注:通常只有POST请求才会带有正文部分,GET请求只有URL而无正文)
    • Response:针对选中Session的Response的保存操作,有子选项:
      • Entire Response…:保存完整的Response
      • Response Body…:仅保存正文部分(即服务器返回的内容),这里重申下这两个选项在Response中的区别,Entire Response在Response Body之外还包含了状态码和Headers等其他信息,可以视不同的需要进行选择。
      • …And Open as Local File:将所有选中的Session依次保存并用文本编辑器打开。
  • Remove:删除指定的Sessions,有子选项,字面意思很简单,不翻译了:
    • Selected Sessions:
    • Unselected Sessions:
    • All Session:
  • Filter Now:在当前列表中使用过滤器清除掉指定条件的Sessions,被过滤的Sessions无法重新显示,右键点击状态栏上方的过滤项可以取消该项的过滤
  • Comment:针对当前Session添加备注
  • Mark:将选中Sessions做各种颜色的标注
  • Replay:回放选中的请求,有子选项供各种不同的回放方式选择:
    • Reissue Requests:重新回放该请求(回放是由Fiddler触发的,而不是客户端程序发起的)
    • Reissue Unconditionally:无条件回放,和前一项的区别是不会发送If-Modified-Since或If-None-Match的Header,所以服务器不会返回304而是正常返回资源。
    • Reissue and Edit:编辑后回放请求,会重新请求并生成上行断点,可以在Inspectors中编辑请求相关信息,后续介绍断点和Inspectors时会详细介绍。
    • Revisit in IE:在IE中请求该请求
  • Select:按照条件选择指定的Sessions,有子选项:
    • Parent Request:选择父Session,通常会选择Reffer Header指向的URL
    • Child Requests:选择子Session,通常会选择Location Header指向的URL
    • Duplicate Requests:选择重复的请求
    • Matching Values:选择与该列重复的Sessions(根据右键选择的不同的列会有不同选择结果)

SessionList中常用的快捷键

下面来整理下使用过程中会经常接触到的快捷键:

快捷键 对应操作
空格 选中焦点Session
CTRL+A 全选Sessions
ESC 取消Session的选择
CTRL+I 反选
CTRL+X 删除全部Session
Delete 删除选中的Sessions
Shift+Delete 删除未选中的Sessions
R 重新触发当前的请求
Shift+R 重新触发当前的请求若干次(所有Reissue类的快捷键都可以和Shift配合,比如E,U,V)
U 无条件重新触发当前请求,忽略本地缓存信息
E 编辑后重新触发当前请求
P 定位到当前请求的父请求(通过Referer Header决定)
C 定位到当前请求的子请求(通过Referer Header或者重定向Location决定 Header)
D 选中全部有相同URL,Method,Status Code的Sessions
ALT+回车 查看当前Session的属性(尽在选中一个Session时有效)
Shift+回车 在新的窗口中查看当前Session的观察器
Backspace 选中上一次选中的Session
Insert 标记当前Session红色字体加粗
CTRL+1到CTRL+6 各种标记颜色
M 针对当前Session添加Comment
Alt+鼠标单击 选中全部和当前列一致的Sessions
F2 解锁为可编辑状态(具体使用在后续Inspectors章节中介绍)
Ctrl+U 复制当前Session的URL部分

你可能感兴趣的:(04.Fiddler主界面SessionList区介绍)