1 http协议和fiddler抓包
Fiddler抓包的原理:fiddler本质是一个代理服务器,默认的工作端口是8888.
Fiddler的工作原理:是以代理web服务器的形式工作的,使用的代理地址:127.0.0.1.端口:8888.
当fiddler退出时,会自动在Internet选项中取消代理,这样就不会影响别的程序。
查看Internet选项代理设置:控制面板—网络和Internet—Internet选项—连接—局域网设置—高级,可以看到代理服务器地址被fiddler设置为127.0.0.1:8888.关闭fiddler时,代理服务器地址取消。
注意:fiddler捕获Firefox的请求时,需要手动将Firefox的代理服务器配置成fiddler。打开Firefox,工具—选项—高级—网络—设置—使用系统代理设置。
Fiddler能够捕获任何程序发出的http/https请求,只要这个程序支持web代理服务器即可。
在抓包的过程中,若http响应是乱码,单击“response body is encoded. Click to decode.”
2 HTTPS协议和fiddler抓包
http协议是不安全的,浏览器发送给服务器的内容非常容易被中间人拦截。
Web通信如何做到安全:需要对http数据包进行对称加密,只有浏览器和web服务器知道如何加密和解密他们之间的消息。并且通过协商来确定使用哪种加密算法。
HTTPS就是加密过的http;HTTPS=HTTP+TLS或者SSL,采用HTTPS的网站需要去数字认证机构申请证书(certificate authority,CA)。通过这个证书,浏览器在请求数据前与web服务器有几次握手验证,以证明相互的身份,然后对http请求和响应进行加密。
Fiddler获取HTTPS会话:启动fiddler—tools—options—HTTPS,选中decrypt HTTPS traffic,在弹出的两个对话框中单击yes,同时选中ignore server certificate errors。Fiddler弹出警告信息,单击yes,信任证书,系统弹出警告,单击yes,安装证书。(可以在浏览器中输入https://www.baidu.com检查是否捕捉到了https的百度请求)
添加例外绕过https证书错误:有时候安装好了fiddler证书,使用fiddler捕获https网站的时候,仍然会出现连接错误,此时单击“我以充分了解可能的风险—添加例外—确认安全例外”,可以绕过证书错误。
Firefox需要单独安装证书,具体步骤:点击actions下面的第二个选项“export root certificate to desktop”把证书导出到桌面,证书文件名为“fiddlerroot.cer”;然后打开Firefox,工具—选项—高级—证书—查看证书,打开证书管理器—选择证书机构—单击导入fiddlerroot.cer,选择弹出对话框的3个选项,确定即可。
Fiddler可以捕获https的握手验证请求:fiddler中抓到的“tunnel to”的请求。HTTP tunnel又叫做HTTP隧道或者HTTP穿梭。
查看Windows本地安装的证书:Windows+r,在命令行窗口输入certmgr.msc;或者tools—https—actions—open Windows certificate manager。
3 HTTP协议请求方法和状态码
URL:uniform resource locator,统一资源定位符;用于完整描述Internet上某一处资源的地址。
URI:uniform resource identifier,统一资源标识符;原来唯一的标识某一个资源。
URL是一种具体的URI;
URL的基本格式:schema://host[:port#]/path/…/[query-string] [#anchor]
Schema:协议
host:域名
path:资源的路径
query-string:参数
anchor:锚
URL中的锚点是一种超链接,只是它是页面内部的超链接;
常见的http方法:get,post,put,delete,head。
理解get和post方法的区别:
http状态码,http status code
每个http响应报文都会携带一个状态码,用于告诉客户端请求是否成功;http响应报文的第一行由http协议号、状态码、状态消息3部分组成。
状态码 已定义范围 含义
1xx 100-201 信息提示,表示请求已经成功接受,继续处理
2xx 200-206 成功,表示请求已经被成功接收、理解、接受
3xx 300-305 重定向,要完成请求,必须进行进一步的处理
4xx 100-415 客户端错误,请求有语法错误或者请求无法实现
5xx 500-505 服务器错误,服务器未能实现合法的请求
4 http协议header介绍
http请求和http响应中有很多header,header的语法格式是“key:value”
5 网页抓包和fiddler修改包
打开一个网页,浏览器需要发生很多个请求;
web页面简单的性能测试:使用statistic查看性能,可以看到每个http请求的响应时间。在overall elapsed中能够看到http响应返回所需要的响应时间。
使用fiddler查看响应:raw选项可以查看完整的http响应;webview可以查看HTML文档;imageview可以查看图片;Jason选项可以查看JSON;
fiddler中设置断点修改http请求:fiddler本身是一个代理服务器,fiddler可以设置断点。拦截住http请求,修改http请求之后再放行。设置到断点之后,可以修改http的任何请求信息。设置断点的两种方法:
全局断点,单击rules—automatic breakpoint—before request,这种方法会拦截所有的会话;
单个断点:已知请求的URL地址,此时只要针对这一个请求打断点调试,其他的请求不会拦截。在fiddler左下角的quickExec命令行输入命令“bpu www.baidu.com”,要取消单个断点,在命令行输入“bpu”。
实例:fiddler修改http请求
1 启动fiddler,设置全局断点;
2 打开浏览器,输入www.baidu.com;
3 回到fiddler界面,关闭断点设置,因为此时已经拦截到想要拦截的http请求了,不需要拦截其他的http请求;
4 被拦截的http请求会有一个红色的T图标,选中需要修改的http请求,在raw选项卡中修改URL,同时修改相应的host。
5 单击绿色的run to completion按钮放行,回到浏览器可以发现打开的浏览器是新输入的地址。
6 fiddler手机抓包
fiddler要想实现手机抓包的条件:安装有fiddler的电脑和手机处于同一网络下;在fiddler中设置好捕获HTTPS。
手机抓包:
1 配置fiddler允许远程连接,启动fiddler--tools--options--connections—allow remote computers to
connect。配置完成之后记得重启fiddler。
2 获取fiddler所在机器的ip地址;
3 在手机上设置代理服务器;找到手机连接的WiFi,将代理改为手动,服务器主机名为fiddler所在电脑的IP地址,服务器端口号为8888,单击连接即可设置成功。
4 需要捕获HTTPS请求,则必须把fiddler证书安装到手机上。
Android设备安装证书的方法:
方法一:在手机浏览器输入http://hostip:8888,在打开的浏览器中单击“fiddlerroot certificate”下载证书,进行安装;
方法二:tools--options--HTTPS--点击actions下面的第二个选项“export root certificate to desktop”把证书导出到桌面,证书文件名为“fiddlerroot.cer”,然后发送到手机上。再打开手机中的设置--系统安全--凭据存储--从SD卡安装--选择fiddlerroot.cer进行安装。
在手机上设置好代理之后,fiddler会抓取到pc端和手机端的所有请求,可以设置过滤。tools--options--HTTPS--选择from remote clients only。
7 http协议中的缓存
浏览器和web服务器之间如何处理浏览器缓存:
http缓存是指当围脖服务器请求抵达缓存时,如果本地有“已缓存的副本”,就可以从本地存储设备中提取这个文档,而不是从原始服务器中提取;
缓存的优点:减少冗余的数据传输,节省了传输时间;减少了服务器的负担,提高网站的性能;加快了客户端加载网页的速度。
fiddler中可以方便的查看缓存的header;
通过最后修改时间来判断缓存的新鲜度:
1 浏览器客户端想请求一个文档,首先检查本地缓存,发现存在这个文档的缓存时,获取缓存文档的最后修改时间,通过“if-modified-since”发送http请求给web服务器;
2 服务器接收到http请求,将服务器文档的修改时间(last-modified)跟http请求header中的if-modified-since相比较,如果时间一样,说明缓存是最新的,web服务器将发送状态码304(not modified)给浏览器客户端,告诉客户端直接使用缓存里面的版本;
3 假如文档被更新了,web服务器会发送该文档的最新版本给浏览器客户端。
Etag(entity tag)实体标签,根据实体内容生成一段hash字符串,可以表标识资源的状态,当资源发生变化时,Etag也随之发生变化。ETag是web服务器产生的。
浏览器把缓存文件的ETag通过header“if-none-match”告诉web服务器,if-none-match和ETag的值一样,说明文件没有更新,服务器返回304,告诉客户端使用本地缓存文件。
使用【Ctrl+F5】快捷键强制刷新浏览器,可以让浏览器不使用缓存;
设置ie不使用缓存:打开ie--工具--Internet选项--常规--浏览历史记录--设置--选择从不;
缓存文件夹所在位置:打开ie--工具--Internet选项--常规--浏览历史记录--设置—查看文件;
8 http协议压缩和URL encode
http压缩可以将纯文本压缩至原内容大小的40%,节省了60%的数据传输;http可以对内容进行编码,http压缩就是内容编码的一种。
URL Encode(URL编码)就是将所有非英文字母、数字字符都替换成%+两位十六进制数,比如空格的编码为“%20”;
可以使用fiddler中的textwizard对字符编码:
tools--textwizard--选择transform—URLEncode
9 fiddler使用技巧
通过filter功能过滤,使网页只显示自己想要看的http请求;在filters选项卡,选中“use filters”,即可开启过滤功能;
QuickExec命令行的使用:
help:显示所有的命令;
cls:清屏;
select:选择会话;
?.png :选择后缀为.png的图片;
bpu:截获request;
fiddler比较会话的不同,可以下载Windiff工具;
fiddler插件:利用Java script formatter插件可以格式化JavaScript代码,增加可读性;
Gallery插件可以显示图片的缩略图。