BLOG

Josh's Blog

How to Using FiddlerEverywhere

发布于 # 测试

Fiddler EveryWhere 环境安装

1. 安装

Fiddler 功能强大,同时占用空间小,能记录所有的客户端和服务器端的 http 和https 请求,方便测试人员进行接口测试。官方下载地址:https://www.telerik.com/fiddler/fiddler-everywhere 由于笔者使用的是Mac OS,而经典版的只支持Windows,所以我们这里下载最新版的Fiddler EveryWhere,安装步骤如下:

  1. 打开下载好的Flddler Everywhere.dmg, 弹出如下界面,点击Agree同意

image.png

图1 同意许可证协议
  1. 将左侧Fiddler的LOGO拖拽到右侧的Applications文件夹即可完成安装

image.png

图2 拖拽到Applications完成安装
  1. 软件安装过程非常简单,读者可自行完成安装。笔者安装的 Fiddler Everywhere 为 3.0.1 版。安装完成后,启动 Fiddler Everywhere,出现如下图的欢迎界面(需要注册并登陆)。意思是你可以有三种方法去使用Fiddler:

image.png

图3 欢迎界面

2. 使用

程序界面如下图所示: image.png 图4 Fidder Everywhere界面示意图

目前许多网站都会采用https 协议来进行传输,相比于 http 协议,主要是增加了传输加密和安全认证等功能,从而提高了传输的安全性。但需要注意的是,Fiddler 刚安装完成是并不能显示 https 协议的会话,需要进行相应的设置,并进行证书安装。Mac下操作步骤如下:

  1. 进入设置

image.png 图5 进入设置

  1. Trust root certificate,信任根证书,并勾选Capture HTTPS trafficIgnore server certificate errors(unsafe)即可,如下图所示:

image.png 图6 设置

为什么要先学fiddler? 学习接口测试必学http协议,如果直接先讲协议,为了更好的理解协议,先从抓包开始。结合抓包工具讲http协议更容易学一些。 为什么使用Fiddler Everywhere而不是经典版的Fiddler? Fiddler Everywhere是一款跨平台(Windows、Mac、Linux)的Web调试代理工具,本文将用Mac系统进行演示

Fiddler Everywhere 的使用

1. 证书问题

为什么需要证书?

image.png 先说结论:捕获HTTPS必须要导入Fiddler的证书。 知道什么是证书之前需要了解下 “非对称加密”

非对称加密有两个秘钥,公钥和私钥,而这两个秘钥只要用一个加密,另一个就能解密,我们正常加密数据用公钥加密,用私钥解密 而我们还有一种用法就是服务器发数据用私钥加密,客户端用公钥解密,那么客户如果用公钥正确解密出数据,那么就证明这个数据一定是服务器发的,因为私钥只有它知道,这个过程我们一般不叫加密,叫签名,也就是服务器对数据签个名,代表这个确确实实是它发的。 其实我们正常情况下因为对称加密效率虽高,但是不安全,因为它告诉对方秘钥的时候这个秘钥容易被截获,但是我们如果用非对称加密,安全是安全,效率又太低,所以一般采用对称加密来加密数据,非对称加密配送对称加密的秘钥。 因为公钥是在网络上进行传输的,那么假如遭遇了如下图所示的中间人攻击,那么A的私钥就可能是伪造的。那么如何验证公钥的合法性呢?------证书

什么是证书?

证书就是由认证机构,采用它们自己的私钥,对发送方的公钥和发送方的信息进行数字加密。各大CA(认证机构)的证书已经默认被添加到了浏览器和操作系统中。 服务器生成自己的密匙对——公钥和私钥 服务器在认证机构注册自己的公钥 认证机构(CA)用自己机构的私钥对,服务器的公钥进行数字签名并生成证书(里面带了这个签名过得公钥和服务器一些信息) 认证机构把证书给客户端 客户端用认证机构的公钥验证数字签名 认证成功后用里面带的服务器的公钥加密并发消息给服务器 服务器用自己的私钥解密 这样一来就可以解决数据传输的安全问题了 问题:

  1. 如果黑客在服务器在认证机构注册公钥的时候截取数据呢?

这个完全不用担心,CA证书的申请,流程很多,而且较为严格,比如准备很多文件,再比如CA那边如果通过后还会要申请方这边的管理员验证之类的。

  1. 认证机构的公钥咋传输的?如果黑客改了呢? 如果改了那么这个证书就不会验证成功,其实各大CA的公钥已经在系统和浏览器中内置了。看下边的例子:

百度的证书信息: image.png 系统自带的CA证书: image.png

抓包工具为什么需要导入证书?

1.客户端发一个HTTPS请求,被Fiddler拦截并且Fiddler伪装成客户端发请求给服务器

  1. 服务器向假装成客户端的FIddler返回了CA证书
  2. 自己制作了一张证书,假装服务器给客户端发了自己做的证书。获取服务器的公钥
  3. 客户端生成对称秘钥,并用Fiddler假冒的公钥加密发送
  4. Fiddler用自己的私钥解密获取对称秘钥
  5. …… 这样的话Fiddler能完全获取解析到双方加密的数据。 实验证明: 当我们正常访问百度,查看证书: image.png 开启Fiddler后,我们再访问百度: image.png

安装根证书

  1. 点击Trust root certificate (Mac会需要输入系统密码)
  2. 勾选Capture HTTPS traffic
  3. Save保存即可安装成功,就可以开始抓HTTPS啦(可能需要重启Fiddler Everywhere)

image.png

删除证书

如果之前装过一些fiddler证书,安装的姿势不对,导致新的证书不起作用,这时候需要先删掉之前的证书了

  1. 在启动台(Launchpad)的其他中找到钥匙串(Keychain Access),或者在聚焦搜索(spotlight search)中搜钥匙串(Keychain Access)也可以找到。

image.png

  1. 我们可以在Default keychains -> login -> Certificerts 中可以找到Fiddler的根证书DO_NOT_TRUST_FiddlerRoot,右键即可删除。

Screen Shot 2021-12-28 at 8.56.31 AM.png

2. 手机APP抓包

前言

fiddler在抓手机app的请求时候,通常也会抓到来自PC的请求,导致会话消息太多,那么如何把来自pc的请求过滤掉,只抓来自APP的请求呢? 必备环境: 1.电脑上已装fiddler 2.手机和电脑在同一局域网

设置

  1. Fiddler Everywhere -> Settings -> Connections,勾选Allow remote computers to connect
  2. 8866端口为Fiddler的监听端口,后续手机中会用到。我这里的端口默认是8866,具体的端口号按实际情况来。

image.png

查看本机IP

打开终端(Terminal),输入ifconfig(Windows下为ipconfig),找到IP,如下图: image.png

手机设置代理

  1. 手机设置->WLAN设置->选择该wifi,点右边的箭头(有的手机是长按弹出选项框)。
  2. 将代理换为手动进行配置:
    1. 配置主机名:与主机IP保持一致
    2. 端口:8866(Fiddler的监听端口)
  3. 保存后即可抓取手机上的请求了

image.png

抓取HTTPS请求

  1. 如果app都是http请求,是不需要安装证书,能直接抓到的,如果是https请求,这时候手机就需要下载证书了
  2. 打开手机浏览器输入地址:[主机IP]:[Fiddler端口],比如我这里是172.20.249.225:8866
  3. 出现如下画面,点箭头所指的位置,点击安装就可以了。
  4. 不同手机安装证书方法可能会有所差异

image.png

3. 查看GET和POST请求

前言

前面讲了关于Fiddler Everywhere抓包的一些基本配置,配置完之后就可以抓到我们想要的数据了,接下来就是如何去分析这些数据。 本篇以洛谷的请求为例,简单分析get与post数据有何不一样,以后也能分辨出哪些是get,哪些是post了。

GET请求

  1. 打开Fiddler Everywhere,然后浏览器输入洛谷首页地址:https://www.luogu.com.cn/
  2. 点开右侧Inspectors下的Headers区域,查看Request Headers
  3. Request Headers区域里面的就是请求头信息,可以看到打开洛谷首页的是get请求

image.png

POST请求

  1. 打开登录首页:https://www.luogu.com.cn/auth/login
  2. 输入账号和密码点击登录后,查看箭头所指的地方,可以看出是post请求

image.png

如何找出需要的请求

  1. 点开漏斗(Advanced Filters)

image.png

  1. 比如我们要只抓洛谷的请求,那我们可以设置条件:url contains luogu.com.cn,如下图:

image.png

  1. APPLY后即可只抓取洛谷的请求了

GET和POST请求的区别

  1. 关于get和post的功能上区别就不说了,大家自己查资料,这里主要从fiddler抓包的层面查看请求参数上的区别
  2. get请求的Raw参数查看,主要分三部分:
  1. 再查看博客登录请求的Raw信息,post的信息分四部分。 –前面3块内容都一样,第3部分和第4部分中间会空一行 –第4部分内容就是post请求的请求body(get请求是没body的)

image.png

4. 工具介绍

本篇简单的介绍下fiddler界面的几块区域,以及各自区域到底是干什么用的,以便于更好的掌握这个工具 image.png

会话框

image.png 会话框主要查看请求的一些请求的一些基本信息,如# 、URL、HTTP Version、Result、Method、Process、Remote IP、Body Size、Comments,具体如下表:

字段说明
#这一栏是代表这个请求大概是什么内容
URL请求的路径
HTTP VersionHTTP的版本,如HTTP/1.1
ResultHTTP状态码,如200(成功)、3xx(重定向相关)、4xx(找不到资源,一般是请求地址有问题)、5xx(一般是服务器本身的错误)
Method请求方法,如:GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、CONNECT
Process进程
Remote IP远程IP
Body Size请求产生的数据大小
Comments类似于备注,可以右键一个请求进行Comment

Request和Response

image.png

  1. Request是客户端发出去的数据,Response是服务端返回过来的数据,这两块区域功能差不多
  2. headers:请求头,这里包含client、cookies、transport等
  3. Params:请求时所带的参数
  4. cookies:查看cookie详情
  5. raw:查看一个完整请求的内容,可以直接复制
  6. body:经过格式化后的主体

decode解码

Fiddler Everywhere 会自动进行解码,无需再手动执行了

5. 接口测试(Composer)

前言

Fiddler最大的优势在于抓包,我们大部分使用的功能也在抓包的功能上,fiddler做接口测试也是非常方便的。 Fiddler Everywhere的Composer功能非常强大又简单易用,逐渐向Postman靠齐

Composer简介

点开右侧Composer区域,可以看到如下界面,就是测试接口的界面了 image.png

JSON数据

1.有些post的请求参数和返回参数是Json格式的,如洛谷的登录请求:https://www.luogu.com.cn/api/auth/userPassLogin 2.在登录页面手动输入账号和密码,登录成功。 3.找到这个登录成功的会话,查看json数据如下图: image.png

模拟GET请求

  1. 在Composer区域地址栏输入博客首页:http://luogu.com.cn
  2. 选择GET请求,点Execute执行,请求就可以发送成功啦
  3. 请求成功下方的Response会生成会话记录,可以查看本条请求的响应详情

image.png

模拟POST请求(实战登陆洛谷)

这里的模拟POST请求我们以登陆洛谷为案例进行讲解。

image.png

洛谷登陆链接:https://www.luogu.com.cn/auth/login 如上图,洛谷的登陆需要输入用户名+密码+验证码才能登陆成功,从表面上来看,我们只需要两个接口就能登陆成功,一个是获取验证码的GET请求接口,一个是登陆的POST接口,先GET验证码,然后根据验证码加上我们的用户名和密码调用登陆接口进行登陆,但实际并非想象中的那么简单,以下为抓包流程:

1. 过滤

我们只需要抓取洛谷的接口,如下图,在Search栏输入洛谷的域名:luogu.com.cn,就只会抓取洛谷的请求了 image.png

2. 抓取验证码接口

在洛谷的登陆界面点击刷新验证码,抓到验证码的接口,可以在Response->Prieview中看到验证码的图像 image.png为了方便接口测试,我们右键这个验证码请求->点击Edit in Composer,如下图: image.png 可以发现接口的地址为:https://www.luogu.com.cn/api/verify/captcha?_t=1640680004860.4568。参数_t为时间,也就是距 1970 年 1 月 1 日之间的毫秒数,如下图: image.png 我们还可以将这个请求进行保存,点击EXCUTE旁边的SAVE,输入请求的名称选择所在的文件夹,点击SAVE保存即可,如下图: image.png

3. 抓取登陆接口

我们在洛谷输入正确的用户名、密码和验证码后点击登陆。 在Fiddler中寻找刚才发送的登陆请求,由于我们已知洛谷的登陆请求为POST方法,所以可以根据Method排序去找POST请求。找到一个POST请求的Request区Body中有刚刚输入的账号/密码/验证码的信息,这个就是洛谷登陆接口了[https://www.luogu.com.cn/api/auth/userPassLogin](https://www.luogu.com.cn/api/auth/userPassLogin),如下图: image.png 接下来我们还是跟步骤2一样存储一下这次的请求,右键登陆请求 -> Edit in Composer,然后SAVE一下Request(我这边把请求名称取名为了“登陆”),现在我们左下角的的Requests区就有了两个请求: image.png

4. 测试登陆

按照最初的想法,先调用验证码接口,查看到验证码:zn22 image.png 然后使用zn22这个验证码加上我们自己的用户名密码去调用登陆接口,登陆请求的Body中有三个参数usernamepasswordcaptcha分别对应着用户名、密码、验证码,这些我们根据实际情况去修改,如下图: image.png 修改完请求体后点击EXCUTE执行,响应体中给我们提示报错了,提示会话超时,请刷新页面后重试image.png 出现这种类似的错误信息,原因一定出在请求的请求头中,服务器对请求头进行了限制,比如验证Cookies、和为了防止跨站攻击而设置的验证X-CSRF-TOKEN等,所以才会出现此类情况。 接下来,分析POST登陆请求的请求头:

Host:www.luogu.com.cn
Connection:keep-alive
Content-Length:82
sec-ch-ua:" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"
X-CSRF-TOKEN:1640768448:U3hwS2h4azHVGgygSHLD9oaY7Z+4Bf9U8VwT1rWLEYQ=
sec-ch-ua-mobile:?0
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
Content-Type:application/json
Accept:application/json, text/plain, */*
X-Requested-With:XMLHttpRequest
sec-ch-ua-platform:"macOS"
Origin:https://www.luogu.com.cn
Sec-Fetch-Site:same-origin
Sec-Fetch-Mode:cors
Sec-Fetch-Dest:empty
Referer:https://www.luogu.com.cn/auth/login
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
Cookie:__client_id=d60b5430b77152d9bc168bca64ace8883254e127; _uid=0

上述的请求头中,除了X-CSRF-TOKENCookie其他都不需要变动。 X-CSRF-TOKEN可以在GET https://www.luogu.com.cn/auth/login的Body中找到,如下图: image.pngCookes可以在Response -> Cookies中找到,右键Value可以进行复制,如下图: image.png 知道了这两个是如何获取的就可以继续我们的测试登陆了,具体步骤也就变成了:

  1. GET https://www.luogu.com.cn/auth/login,获取到CookiesX-CSRF-TOKEN,并记录下来。
  2. 带上Cookies去GET https://www.luogu.com.cn/api/verify/captcha,记录下获取到的验证码。
  3. POST https://www.luogu.com.cn/api/auth/userPassLogin:需要修改Headers中的CookiesX-CSRF-TOKEN,请求体Body中的captcha参数更换为步骤二获取到的验证码。

登陆成功如下图,就可以拿syncToken以及响应的Cookies去请求需要登陆的接口了。 image.png

GET请求(URL详解)

前言

上一篇介绍了Composer的功能,可以模拟get和post请求,get请求有些是不带参数的,这种比较容易,直接放到url地址栏就行。有些get请求会带有参数,本篇详细介绍url地址格式。

url详解

  1. url就是我们平常打开百度在地址栏输入的:https://www.baidu.com,如下图,这个是最简单的url地址,打开的是百度的主页 image.png
  2. 再看一个稍微复杂一点的url,在百度输入框输入:洛谷

image.png

  1. 查看url地址栏,对比之前的百度首页url地址,后面多了很多参数。当然最主要的参数是:wd=上海悠悠博客园(后面的一大串可以暂时忽略)
  2. 那么问题来了,这些参数有什么作用呢? 可以做个简单的对比,在地址栏分别输入: https://www.baidu.com https://www.baidu.com/s?wd=洛谷 对比打开的页面有什么不一样,现在知道作用了吧,也就是说这个多的”/s?wd=洛谷”就是搜索的结果页面

url解析

  1. https://www.baidu.com/s?wd=洛谷这个URL请求为例
  2. 那么一个完整的url地址,基本格式:https://host:port/path?xxx=aaa&ooo=bbb

UrlEncode编码

  1. 如果url地址的参数带有中文的,一般在url里面会是这样的,如第二点里的wd=%E6%B4%9B%E8%B0%B7。像看到%B4这种编码的就是经过url编码过的,需要解码就能看到是什么中文了
  2. 用urlencode在线编码/解码工具,地址:https://www.urldecoder.org/

image.png

请求参数(params)

  1. 在url里面请求参数一般叫params,每个参数对应的都有name和value值
  2. 多个参数情况如下:

image.png

POST请求(body)

前言上一篇讲过get请求的参数都在url里,post的请求相对于get请求多了个body部分,本篇就详细讲解下body部分参数的几种形式。 注意:post请求的参数可以放在url,也可以放在body,也可以同时放在url和body,当然post请求也可以不带参数。 只是一般来说,post请求的参数习惯放到body部分

body数据类型

常见的post提交数据类型有四种:

  1. 第一种:application/json:这是最常见的json格式,也是非常友好的深受小伙伴喜欢的一种,比如:
{“input1”:”xxx”,”input2”:”ooo”,”remember”:false}
  1. 第二种:application/x-www-form-urlencoded:浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数
input1=xxx&input2=ooo&remember=false
  1. 第三种:multipart/form-data:这一种是表单格式的,数据类型如下:
WebKitFormBoundaryrGKCBY7qhFd3TrwA 
Content-Disposition: form-data; 
name=”file”; 
filename=”chrome.png” 
Content-Type: image/png PNG
content of chrome.png 
WebKitFormBoundaryrGKCBY7qhFd3TrwA
  1. 第四种:text/xml:这种直接传的xml格式
<!--?xml version="1.0"?-->
<methodcall>
	<methodname>examples.getStateName</methodname>
	<params>
		<param>
			<value><i4>41</i4></value>
		</param>
	</params>
</methodcall>

x-www-form-urlencoded

浏览器的原生

表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样(无关的请求头在本文中都省略掉了):

POST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8

title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

首先,Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。例如 PHP 中,POST[title]可以获取到title的值,_POST['title'] 可以获取到 title 的值,_POST[‘sub’] 可以得到 sub 数组。 很多时候,我们用 Ajax 提交数据时,也是使用这种方式。例如 JQuery 和 QWrap 的 Ajax,Content-Type 默认值都是「application/x-www-form-urlencoded;charset=utf-8」。

6. HTTP协议简介

什么是HTTP

1.HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 2.HTTP(HyperText Transfer Protocol)协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。默认端口是80 3.http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议

image.png

请求报文

1.HTTP请求报文主要由请求行、请求头部、空一行、请求正文4部分组成 (当然,如果不算空的一行,那就是3个部分)

image.png

2.下图是fiddler工具抓的post请求报文(工具使用看fiddler篇),可以对照上图,更清楚的理解http的请求报文内容。

image.png

响应报文

1.HTTP响应报文主要由状态行、消息报头、空一行、响应正文4部分组成 (当然,如果不算空的一行,那就是3个部分) image.png 2.下图就是一个请求的响应内容,用fiddler抓包工具可以查看 image.png

完整的HTTP内容

  1. 一个完整的http协议其实就两块内容,一个是发的请求,一个服务端给的响应。
  2. 以下是请求https://github.com/timeline.json 这个地址后,用fiddler抓包导出为文本,查看完整的http请求内容。(具体操作查看《fiddler 1.10会话保存》)

image.png 内容如下: 以下是请求报文

GET https://github.com/timeline.json HTTP/1.1
Host: github.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Cookie: xxx(已省略)

以下是请求报文

GET https://github.com/timeline.json HTTP/1.1
Host: github.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Cookie: xxx(已省略)
X-Request-Id: d09e199dc290c6f0dc79fe49007069ab
X-Runtime: 0.004161
Content-Security-Policy: xxx(已省略)
Strict-Transport-Security: xxx(已省略)
X-Content-Type-Options: nosniff
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block
X-Runtime-rack: 0.007388
X-GitHub-Request-Id: FE36:2B0A9:177175F:23C092D:594FD998
Content-Length: 379

以下是响应正文(json格式)

{“message”:”Hello there, wayfaring stranger. If you’re reading this then you probably didn’t see our blog post a couple of years back announcing that this API would go away: http://git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead.”,”documentation_url”:”https://developer.github.com/v3/activity/events/#list-public-events”}

请求行

8种请求行

请求行有三个主要参数:请求方法、url、协议版本。 image.png

请求方法

请求方式简介get请求指定的页面信息,并返回实体主体。post向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。HEAD类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头OPTIONS返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性PUT向指定资源位置上传其最新内容DELETE请求服务器删除Request-URL所标识的资源TRACE回显服务器收到的请求,主要用于测试或诊断CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

  • 注意: 1)方法名称是区分大小写的。 2)最常见的的就是通常说的get和post方法。

url详解

1.打开百度,在搜索框输入任意文字,搜索后,复制地址栏的url地址:

https://www.baidu.com/s?wd=%E4%B8%8A%E6%B5%B7%E6%82%A0%E6%82%A0%E5%8D%9A%E5%AE%A2&rsv_spt=1&rsv_iqid=0x91baaabd00070ba2&issp=1&f=8&rsv_bp=1&rsv_idx=2

2.那么一个完整的url地址,基本格式如下:

https://host:port/path?xxx=aaa&ooo=bbb
  • http/https:这个是协议类型,如图中1所示
  • host:服务器的IP地址或者域名,如图中2所示
  • port:HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如:192.168.3.111:8080,这里的8080就是端口
  • path:访问资源的路径,如图中3所示/s (图中3是把path和请求参数放一起了)
  • ?:url里面的?这个符号是个分割线,用来区分问号前面的是path,问号后面的是参数
  • url-params:问号后面的是请求参数,格式:xxx=aaa,如图4区域就是请求参数
  • &:多个参数用&符号连接

协议版本

根据HTTP标准,HTTP请求可以使用多种请求方法。 HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。 HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。