大神教你HTTP协议和Fiddler抓包工具使用(下)
请求我们再通过请求协议报格式对刚刚抓取的协议请求进行对比学习!
·请求行
GET https://www.csdn.net/ HTTP/1.1
· Method
GET这里的Method就是http采取的请求方法!HTTP协议针对不同的请求或者响应可以通过不同的方法进行传输。
上表就是HTTP协议数据传输可以采取的方法!
每种方法对应不同的应用场景!
例如:我们这里抓取的的GET方法通常情况下就是为了获取一个资源,我们就是为了获取CSDN的主页面!
但是这里的方法随着时间的推移,都混用,已经没有上表中的限制了,很多方法丧失了他本来的特性
现在大部分程序员在大部分场景中都习惯于GET和POST而且经常两个混用!
· URL
https://www.csdn.net/URL就是资源唯一标准限定符,就是标志了一个资源具体的网络中的位置!URL基本格式:
· 协议方案名:这里的HTTPS://就是协议类型方案名!就比如我们之前学的数据库编程中的jdbc:mysql一样!
· 登入信息(认证):这是请求的URL这里一般是用户的登入信息,现在的URL舍去了这部分内容!
· 服务器地址:www.csdn.net就是CSDN网站服务器地址
· 服务器端口号:这里的服务器端口号就和我们所学的五元组中的端口号一样!
这里也一般省略!因为不同的协议类型它有固定的端口号!
· HTTP协议默认端口号是80
· HTTPS协议的默认端口号是443
但我们加上这个端口号浏览器也能访问!所以直接省略了这个端口号!
· 带层次的文件路径:这里的路径就指出了我们请求要拿的资源在主机中的位置!
这个路径可能是主机磁盘的真实路径也可能是虚拟的由服务器代码动态构造的路径下的资源!
· 查询字符串(query string):这里的查询字符串一般由键值对的形式构成!
· 片段标识符:描述了当前访问的内容是属于当前这个HTML的那个子部分,就例如书签一样,可以直接定位我们之前浏览过的地方!
· Version
Version就是HTTP协议的版本号!
这里是HTTP/1.1就代表当前的http协议使用的1.1版本!
现在的版本号有10/1.1/2.0/3.0而最常用的版本号就是1.1版本!
· 请求报头
像上述这些都是请求报头的内容,这里的请求报头是键值对的格式!
键和值之间用:分割开!
键值对之间用;分割开!
· 空行
空行为了分割请求报头和请求正文!
· 请求正文
请求正文,有的请求协议报文含有这个正文信息,也可以没有正文信息!
这里的Query String有一些需要注意问题
urlencode
将查询字符串中的值转义!
因为我们知道这里的URL有许多字符含有特殊意义,?分割文件路径和查询字符串&分割键值对等等...所以有些字符就需要通过转移,避免URL无法解析!还有这里的查询字符串不能使用中文,使用中文字符也需
要通过urlencode转义!
urlencode规则:我们通过ASCII码进行转义!
比如我们需要搜索C++
https://www.baidu.com/baidu?tn=monline_4_dg&ie=utf-8&wd=C%2B%2B
得到的查询字符串是C%2B%2B这就是查询的C++!
因为+在ASCII码表对应的16进制数据就是2B
然后再在前面加上%即可完成转义!
那我们如果要写一个查询字符串,然后又要对照ASCII码表那得多麻烦!
我们可以通过现成的在线网站进行url encode
我们可以urlencode也能将已经进行了转义的字符进行urldecode还原!
响应
· 状态栏HTTP/1.1 200 OK
version:就是这个响应的HTTP版本
状态码:描述这个请求的响应结果是否请求成功,或者失败!一般由一些数字构成,每个数字有特殊的意义,我们后面进行学习!
状态码描述:就是告诉我们这个状态码具体描述是什么,请求成功了还是失败!
· 响应报头
响应报文也是由键值对构成,描述了该协议的一些重要信息!
· 空行
分割响应报头和响应正文。
· 响应正文
响应正文,就是根据这个请求服务器给出的响应内容,这里是一个HTML网页!
HTTP方法
我们刚刚了解到HTTP方法有如上几种。当时由于某些原因,大部分程序员都不会按照上述方法设计的方式,进行使用!
现在都是GET和POST使用的最为广泛,并且两者混用!也是就是说GET能做的POST也可以完成,反正也是如此!
我们找两个来对比一下:
我们的GET将请求的信息保存在querystring查询字符串中!
而POST方法并没有使用querystring,采用的是body去传输一下数据信息!如下所示:
页:
[1]