抓包⼯具-HttpWatch(功能详细介绍)
  HttpWatch是功能强⼤的⽹页数据分析⼯具,集成在IE⼯具栏,主要功能有⽹页摘要、cookies管理、缓存管理、消息头发送/接收,字符查询、POST数据、⽬录管理功能和报告输出。HttpWatch是⼀款能够收集并显⽰深层信息的软件,它不⽤代理服务器或⼀些复杂的⽹络监控⼯具,能够在显⽰⽹页的同时显⽰⽹页请求和回应的⽇志信息,甚⾄可以显⽰浏览器缓存和IE之间的交换信息,集成在IE⼯具栏。(HttpWatch⼯具需要下载安装,这⾥就不详说了,直接搜索百度就ok了) 
HTTP基础知识之HTTP消息格式
  当⽤户使⽤浏览器访问某个URL地址、提交表单数据时,浏览器会⽣成请求消息发送给服务器,服务器收到请求后,将⽣成的响应消息返回给浏览器。浏览器发出的请求信息和服务器返回的响应信息统称为HTTP消息。HTTP消息有着严格的格式。
  ⼀个完整的请求消息包括:⼀个请求⾏、若⼲消息头及实体内容,其中⼀些消息头和实体内容是可选的,消息头和实体内容之间使⽤空⾏隔开,下⾯是HTTP请求消息内容:
(Request-Line)    GET /get.do?prod=wmail_lbp&ver=1&uid=nt@163&domain=163&mobUser=0&callback=themeHandler.callback&rnd=0.13562542999267713 HTTP/1.1 Accept    application/javascript, */*;q=0.8
Accept-Encoding    gzip, deflate
Accept-Language    zh-CN
Connection    Keep-Alive
Cookie    starttime=; logType=
Host    ir3.mail.163
Referer    mail.163/
User-Agent    Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
HTTP请求消息内容
  ⼀个完整的响应消息包括:⼀个状态⾏、若⼲消息头及实体内容。与请求消息⼀样,响应消息中的⼀些消息头和实体内容也是可选的,消息头和实体内容之间也要⽤空⾏隔开。下⾯是HTTP响应消息内容:
(Status-Line)    HTTP/1.1200 OK
Connection    keep-alive
Content-Length    25037
Content-Type    application/json;charset=utf-8
Date    Mon, 05 Jun 201713:13:25 GMT
Server    nginx
Vary    Accept-Encoding
X-Cache    from ngx118-192.163
HTTP响应消息内容
  HTTP请求和HTTP响应消息头都是⽤于描述HTTP消息本⾝的信息,通常也把这种描述信息称为元信息,消息头相当于服务器和浏览器之间的暗号指令,主要实现HTTP客户机与服务器之间的条件请求和应答。
  通常情况下消息头分为4类:信息头、请求头、响应头和实体头:
1)通⽤信息头:即能⽤于请求信息,也可以⽤于响应消息,但与被传输的实体内容没有关系,如date、pragma。
2)请求头:⽤于在请求消息中向服务器传递附加消息,主要包括客户机可以接受的数据类型、压缩⽅法、语⾔,以及客户计算机上保留的cookie 信息和发出该请求的超链接源地址等。
3)响应头:⽤于在响应消息中向客户端传递附加信息,包括服务程序的名称、要求客户端进⾏认证的⽅式、请求的资源已移动到的新地址等。4)实体头:⽤做实体内容的元信息,描述了实体内容的属性,包括实体信息的类型、长度、压缩⽅法、最后⼀次修改的时间和数据的有效期等。  请求消息的请求⾏中包括3部分:请求⽅式、资源路径以及所使⽤的HTTP协议版本,各部分之间使⽤空格分隔,语法格式如下:
请求⽅式资源路径  HTTP版本号<CRLF>
其中<CRLF>表⽰回车和换⾏两个字符的组合。
  响应消息的状态⾏中包括3部分的内容:HTTP协议的版本号、⼀个表⽰成功或失败的整数代码(状态码)和对状态码进⾏描述的⽂本信息,各部分内容之间使⽤空格分隔,语法格式如下:
HTTP版本号状态码原因叙述<CRLF>
HttpWatch⼯具之Request Grid
  安装好后在IE-⼯具下启动HTTPWatch,输⼊地址后点击record按钮即开始进⾏录制,点击stop按钮即停⽌录制,如图1所⽰,录制了163邮箱的登录操作
图1(request grid图)
  Time Chart:耗时⽐例图,即整个请求应答过程各部分所花时间⽐例图。
  Time:请求所消耗的时间。
  Sent:提交该请求所发送的字节数。
  Received:提交请求后服务器返回的字节数。
  Method:提交请求的⽅法。
  Result:请求处理的结果。
  Type:服务器返回内容的类型。
URL:请求的URL地址。
  在测试过程中主要关注Time、Received、Result三项的值,Time是请求的耗时,需要注意耗时⼤的请求,因为在整个业务响应时间过程中,耗时长的请求是最有可能需要调优的;Received是返回的字节数,在测试过程中需要关注返回字节数较⼤的需要,因为返回的字节数较⼤,会影响整个请求的耗时,它也是调优需要重点关注的内容;Result是指请求响应的状态,需要关注其响应状态为⾮200的值,请求响应状态只有200是正确的,其他的都是异常的,如果请求出现异常情况,说明事务很有可能操作失败,这样直接影响了事务的成功率。
HttpWatch⼯具之Request View
Request View内容详细记录了每个请求的信息,主要包括下⾯列举的内容:
⼀、Overview,如图2所⽰
图2(Overview内容)
  Display URL:表⽰请求的URL;
  Started At:表⽰该请求开始的时间;
  Submit Form:表⽰表单被提交到URL,只有POST操作时才会有该项;
  Connecte:表⽰TCP连接操作;
  HTTP Request:表⽰⼀个请求被发出去;
  HTTP Response:表⽰⼀个应答被收回;
  Read Cache:表⽰该次请求是从cache中读取应答消息;
⼆、Time Chart,如图3所⽰
图3(Time Chart图)
显⽰了⼀次请求应答过程中每个时间⽚段所花费的时间。⼀次完整的请求应答过程需要经历的时间⽚段如下:Blocked->DNS Lookup->Connect ->Send ->Wait ->Receive。
各时间⽚段含义如下:
  Blocked(阻塞):阻塞的时间主要包括预处理时间(如缓存查)和⽹络排队等待时间,导致阻塞最主要原因是下载页⾯中的图⽚;
  DNS Lookup(域名解释):域名解释时间主要是将主机名(如le)转化为相应的IP地
址(216.239.59.99)的时间,在访问URL地址时,地址本⾝不能被直接访问,需要将它对应为相应的IP地址才能访问;
  Connect(连接):连接时间是指与web服务器(或代理服务器)建⽴起TCP连接需要的时间,⼀个安全的HTTPS连接应该包含SSL握⼿的过程,让系统处于⼀种保持连接的状态,可以节约重复创建TCP连接的时间
  Send(发送):发送时间是指从客户端发送HTTP请求到服务器所花费的时间,并且发送数据⼤⼩会影响发送的时间,如上传⽂件花费的时间就⽐较长;
  Wait(等待):等待时间是指服务器响应请求的时间,这个值包括⽹络延迟和服务器处理请求所花费的时间;
  Receive(接收):接收时间是指服务器返回数据到客户端所花费的时间,这个时间受所返回消息内容⼤⼩、⽹络带宽和HTTP压缩⽐的影响;
  Cache Read(读cache):读缓存时间是指从浏览器缓存中读取内容的时间;
三、Headers,如图4所⽰
图4(Headers的内容)
Headers Sent的内容如下:
  (Request-Line):包括HTTP提交请求⽅法、HTTP版本和URL⼦路径;
  Accept:可接受的⽂件类型;
  Accept-Encoding:可接受的纯⽂本之外的内容编码的类型;
  Accept-Language:可接受的返回数据的语⾔种类;
  Connection:指定该次请求回应结束后,如何处理连接;
  Cache-Control:指定请求和响应遵循的缓存机制;
  Location:⽤于重定向接收者到⼀个新URL地址;
  Host:请求连接的主机名;
Headers Received的内容如下:
  (Status-Line):包括HTTP请求的状态码和HTTP版本信息; 
  Connection:指定该次请求回应结束后,如何处理连接;
  Cache-Control:指定请求和响应遵循的缓存机制;
  Content-Language:内容数据的语⾔种类;
  Content-Length:传输的内容长度;
  Content-Type:内容数据的类型(Mini Type);
  Last-Modified:服务器上保存内容的最后修订时间;
  Expires:内容数据被缓存的过期时间;
四、Cookies,如图5所⽰
图5(Cookies的内容)
  Cookie Name:cookie的名称;
  Direction:表明该cookie是由客户端发送到服务器的还是从服务器接收的;
  Value:cookie的内容;
  Path:该cookie所在站点的路径;
  Domain:显⽰该cookie所属的域名或主机名;
  Expires:指该cookie失效时间,当浏览器关闭时该cookie值将被删除;
五、Cache,如图6所⽰
图6(Cache的内容)
  URL in cache?:该项内容是否写⼊浏览器缓存;
iframe参数传递  Expires:cache失效⽇期和时间;
  Last Modification:当cache内容被存储或更新时,那么更改⽇期将会修改为最近的⽇期;
  Last Cache Update:cache内容被更新的最近时间;
  Last Access:最近⼀次读cache的时间;
  ETag:⽤来匹配服务器上的实体,使⽤的⽅式为模糊匹配;
  Hit Count:读cache内容的次数;
六、Query String,如图7所⽰
图7(Query String的内容)
  Query String是通过URL来传递参数的⼀种⽅式,格式通常为:...?name1=value1&name2=value2&...
  Query String内容中可以显⽰当前URL中所有的参数名及对应的值,图7所对应的URL如下:
七、POST Data,如图8所⽰,显⽰以POST⽅式请求的数据信息,其中Mime Type:application/json,是指POST⽅式提交数据的编码⽅式。
图8(POST Data的内容)
⼋、Content,如图9所⽰,显⽰接收到的HTTP响应信息,包括MIME的类型,总的字节数和这些内容是否从服务中下载或从缓存中读取,如果对HTTP进⾏了压缩,还应该显⽰压缩的⽅式、压缩后的⽂件⼤⼩及压缩⽐。
图9(Content的内容)
九、Stream,如图10所⽰,主要是显⽰客户端发送的内容和服务器返回的内容。左边显⽰的是客户端发送的内容,显⽰了数据流⼤⼩和发送到哪个服务器,如图所⽰,发送的字节数为2173个字节,服务器的IP地址为220.181.12.208,端⼝号为80。右边显⽰的是服务器返回的内容,包括返回的字节数和返回到客户端的IP地址。
图10(Stream的内容)
左边为客户端向服务器提交的请求,内容如下:
  GET /entry/cgi/ntesdoor?df=loginjustnowmail163&funcid=loginjustnow&iframe=1 HTTP/1.1:GET表⽰请求⽅式,‘/’表⽰URI(uniform resource identifier,是web上访问可⽤资源的⼀种通⽤资源标识符),HTTP/1.1表⽰使⽤的协议和协议版本;
  Accept:表⽰接受返回数据的类型, */*表⽰允许接受所有的数据类型;
  Accept-Language: 表⽰接受返回数据的语⾔,如zh-CN表⽰接受返回数据语⾔为中⽂;
  Accept-Encoding: 表⽰浏览器可接受除纯⽂本外的内容编码的类型,如gzip压缩, deflate压缩内容;
  User-Agent:标识客户端浏览器类型及相关版本信息;
  Host:主机标识地址;
  Connection: 表⽰连接状态,如Keep-Alive表⽰保持TCP的连接状态;
右边的内容为服务器向客户端返回的数据内容,如下:
  HTTP/1.1 200 OK:表⽰协议、协议版本、请求的状态;
  Date:表⽰发送HTTP消息的⽇期;
  Expires:表⽰实体的有效期;
  Content-Type:表⽰服务器返回请求类型,如text/html;
  Last-Modified:表⽰被请求资源上次修改的⽇期和时间;
  Age:表⽰HTTP接受请求操作响应的缓存时间;
⼗、!Warnings,如图11所⽰,显⽰了单个请求出现警告的内容,显⽰的内容包括警告ID、警告类型和
警告的详细描述,关于警告类型主要3种:performance(性能)、security(安全)和Functional(功能)
<img