在1.4节中了解的网页其实是前端静态网页,并没有与后端服务器进行交互。如果想了解网页前后端交互,就必须先掌握HTTP协议。
HTTP(Hyper Text Transfer Protocol)是超文本传输协议,是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个协议。设计HTTP最初的目的是提供一种发布和接收HTML页面的方法。
HTTP协议工作于客户端/服务器端架构之上。浏览器作为HTTP客户端通过URL向HTTP服务器端即Web服务器发送所有请求。Web服务器根据接收到的请求,向客户端发送响应信息。
下面详细了解一下HTTP请求、HTTP响应和抓包工具的使用。
客户端发送一个HTTP请求到服务器的请求消息包括以下格式。
(1)请求行。
(2)请求头部。
(3)空行。
(4)请求数据。
【范例1.5-1】HTTP请求(源码路径:ch01/1.5/1.5-1.html)
范例文件1.5-1.html的具体实现代码如下。
【范例分析】
(1)第一部分:请求行,第1行,指明了是post请求,以及HTTP1.1版本。
(2)第二部分:请求头部,第2~7行,包括5个键值对。
(3)第三部分:空行,第8行的空行。
(4)第四部分:请求数据,第9行。
通常情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
HTTP响应也由四部分组成,具体如下。
(1)状态行。
(2)消息报头。
(3)空行。
(4)响应正文。
【范例1.5-2】HTTP响应(源码路径:ch01/1.5/1.5-2.html)
范例文件1.5-2.html的具体实现代码如下。
【范例分析】
(1)第一部分:状态行,由HTTP协议版本号、状态码和状态消息三部分组成。
(2)第二部分:消息报头,用来说明客户端要使用的一些附加信息。第二行和第三行为消息报头,包括两个键值对。
(3)第三部分:空行,消息报头后面的空行是必需的。
(4)第四部分:响应正文,服务器返回给客户端的文本信息。空行后面的html部分为响应正文。
请求头都是一些键值对,表示不同的含义。常见的请求头信息如表1-11所示。
表1-11 常见的请求头信息
续表
续表
与请求头类似,响应头也都是一些键值对,表示不同的含义。常见的响应头信息如表1-12所示。
表1-12 常见的响应头信息
续表
续表
续表
提示
响应状态代码由3位数字组成,第一个数字定义了响应的类别,且有以下5种可能取值。
(1)1xx:指示信息——表示请求已接收,继续处理。
(2)2xx:成功——表示请求已被成功接收、理解、接受。
(3)3xx:重定向——要完成请求必须进行更进一步的操作。
(4)4xx:客户端错误——请求有语法错误或请求无法实现。
(5)5xx:服务器端错误——服务器未能实现合法的请求。
HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端与服务器端请求和应答的标准(TCP),是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。
HTTPS是以安全为目标的HTTP通道,简单来说,HTTPS是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议,用于对HTTP协议传输的数据进行加密,从而诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。
HTTPS和HTTP的区别主要如下。
(1)HTTPS协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
(2)HTTP是超文本传输协议,信息是明文传输;HTTPS是具有安全性的SSL加密传输协议。
(3)HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
(4)HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
如果想更好地了解请求和响应的数据,那么就需要借助抓包工具了。而Fiddler就是比较常用的一种抓包工具。
Fiddler可以将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也可以用来检测网络安全。
Fiddler默认仅支持Windows平台。Windows 8之后用Fiddler for.NET4,而Windows 8之前用Fiddler for.NET2比较好。
访问Fiddler官方网址,如图1-33所示。
图1-33 下载Fiddler
输入并选择相应信息后,单击【Download for Windows】按钮,下载软件安装即可。
提示
如果要在Linux平台上使用,则需要Mono框架的支持。
当浏览器访问服务器时,会形成一个请求,此时,Fiddler就处于请求之间;当浏览器发送请求时,会先经过Fiddler,然后再到服务器。当服务器有返回数据给浏览器显示时,也会先经过Fiddler,然后数据才到浏览器中显示,这样一个过程,Fiddler就爬取到了请求和响应的整个过程。
Fiddler是通过改写HTTP代理,让数据从它那通过,来监控并截取数据。当然,Fiddler很强大,在打开它的一瞬间,它就已经设置好了浏览器的代理了。当关闭时,它又把代理还原了。
Fiddler开始工作了,抓到的数据包就会显示在列表中,如图1-34所示。
图1-34 抓到的数据包信息
(1)说明。
列表页面字段选项的含义如表1-13所示。
表1-13 列表页面字段选项的含义
列表页面图标的含义如表1-14所示。
资源下载码:93351
表1-14 列表页面图标的含义
续表
(2)Statistics请求的性能数据分析。
任意选择一个请求选项,就可以看到Statistics关于HTTP请求的性能及数据分析,如图1-35所示。
图1-35 HTTP请求的性能及数据分析
(3)Inspectors查看数据内容。
Inspectors用于查看会话的内容,上半部分是请求的内容,下半部分是响应的内容,如图1-36所示。
图1-36 Inspectors查看数据内容
(4)Composer自定义请求发送服务器。
Composer允许自定义请求发送到服务器,可以手动创建一个新的请求,也可以在会话表中拖曳一个现有的请求。
Parsed模式下只需要提供简单的URLS地址即可,也可以在RequestBody中定制一些属性,如模拟浏览器User-Agent,如图1-37所示。
图1-37 Composer自定义请求发送服务器
(5)Filters请求过滤规则。
Filters是过滤请求用的,左侧的窗口不断地更新,当想看系统的请求时,刷新一下浏览器,出现一大片不知道从哪来的请求,它还一直刷新屏幕。这时就可以通过过滤规则来过滤掉那些不想看到的请求。
选中【Use Filters】复选框开启过滤器,这里有两个最常用的过滤条件:Zone和Host。Zone指定只显示内网或互联网的内容;Host指定显示某个域名下的会话。如图1-38所示。
图1-38 Filters请求过滤规则
Fiddler可以通过伪造CA证书来欺骗浏览器和服务器。Fiddler的大概原理就是在浏览器面前Fiddler伪装成一个HTTPS服务器,而在真正的HTTPS服务器面前Fiddler又伪装成浏览器,从而实现解密HTTPS数据包的目的。
解密HTTPS需要手动开启,步骤如下。
01执行菜单栏中的【Tools】→【Telerik Fiddler Options】→【HTTPS】命令。
02选中【Decrypt HTTPS Traffic】复选框。
03如果要爬取所有请求,则选中【from all processes】单选按钮。如果只爬取Web请求,则选中【from browsers only】单选按钮。
04单击【Actions】按钮,出现警告框,单击【Yes/是】按钮。
05最后单击【OK】按钮,设置完毕。
想要Fiddler爬取移动端设备的数据包,其实很简单,先来说说移动设备怎么去访问网络,如图1-39所示。
图1-39 移动设备访问网络的流程
从图1-39中可以看出,移动端的数据包都是通过Wi-Fi传出去的,所以我们可以把自己的计算机开启热点,将手机连上计算机,Fiddler开启代理后,让这些数据通过Fiddler, Fiddler就可以抓到这些包,然后发给路由器,如图1-40所示。
图1-40 抓取移动设备网络的流程
步骤如下。
01打开Wi-Fi热点,让手机连上。
02打开Fiddler,执行菜单栏中的【Tools】→【Telerik Fiddler Options】命令。
03单击【Connections】标签,设置代理端口为【8888】,选中【Allow remote computers to connect】复选框,单击【OK】按钮,如图1-41所示。
图1-41 设置代理端口
04这时在Fiddler中单击右上角的【Online】按钮,就可以看到本机无线网卡的IP了(如果没有,则重启Fiddler,或者可以在CMD窗口中使用“ipconfig”命令找到自己的网卡IP),例如,这里的IP是“192.168.137.1”。
05在手机端连接PC的Wi-Fi,连接成功后,设置代理IP与端口(代理IP就是192.168.137.1,端口是Fiddler的代理端口8888),如笔者的手机,设置如图1-42所示,点击保存。
图1-42 设置代理IP
06访问网页输入代理IP和端口,下载Fiddler的证书,点击如图1-43所示的【FiddlerRoot certificate】超链接进行下载。
图1-43 下载Fiddler证书
07点击如图1-44所示的【安装】,安装下载的证书。
图1-44 安装Fiddler证书
08安装完证书,可以用手机访问应用,就可以看到抓取到的数据包了。如图1-45所示选中的数据包是通过UC浏览器访问的。
图1-45 查看数据包