Fiddler抓包教程->HTTP和HTTPS底子知识

打印 上一主题 下一主题

主题 1745|帖子 1745|积分 5235

1.简介

有的同伴可能会好奇,不是讲解和分享抓包工具,怎么这里开始讲解HTTPHTTPS协议了。这是由于你对HTTP协议越了解,你就能越掌握Fiddler的使用方法,反过来你越使用Fiddler,就越能帮助你了解HTTP协议。
Fiddler无论对开发人员或者测试人员来说,都是非常有效的工具。
2.前言

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适当传输一些敏感信息,比如:信用卡号、暗码等付出信息。
为了办理HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的底子上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
3.HTTP和HTTPS基本概念

HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。
HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适当传输一些敏感信息,比如:信用卡号、暗码等付出信息。
HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经过 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的重要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全底子是SSL,因此加密的详细内容就需要SSL。
 

HTTPS协议的重要作用可以分为两种:
一种是建立一个信息安全通道,来保证数据传输的安全;
另一种就是确认网站的真实性。
4.什么是http请求和相应?

http的工作方式为一个简单的客户端请求与服务端相应的应答过程。它指定了客户端发送给服务器什么样的消息形式以及得到什么样的消息相应,所有的www文件都必须依照这个标准协议, 目的是提供一种发布和接收html页面的方法。举个例子比如说 客户端(浏览器)向服务器提交一个http请求, 那么服务器又会向客户端这边返反相应信息。而这些相应信息包含关于客户端请求的状态信息以及客户端所需要的内容信息。如下图所示:
 

5.http协媾和web之间的本质

http协媾和web之间的本质说白了就是就是浏览器和服务器打交道的。客户端向服务器端发送Http请求,然后服务器端向客户端返回http相应!
http协议:所谓协议,就是指双方依照的规范。http协议,就是浏览器和服务器之间进行“沟通”的一种规范。, 也就是以这个规范来向服务器发起请求, 服务器才会给客户端进行正确的相应, 以是http有的时候也可以理解为是一种 规范、规则、标准。http协议是属于“应用层的协议”,而且是基于TCP/IP协议的, 也就是说http通信发生在TCP/IP链接之上。
普通一点说http协议就是基于TCP的一种应用层协议 它不会关系数据传输的细节问题,也就是说你不消去关心它下层TCP的运行逻辑, 它的焦点只在于用来规定客户端和服务端的数据传输格式。最早http是用来向客户端传输html文件内容,默认的端口80
5.1扩展
感兴趣的朋友可以自行了解一下iso网络七层模子。
如果你接触过socket网络编程,就应该明确TCP和UDP这两种使用广泛的通信协议(建立毗连、三次握手)。
既然TCP/UDP是广泛使用的网络通信协议,那为啥有多出个http协议来呢?
曾本身动手写过一个简单的web服务器处理软件,根据我的推断(不肯定正确)。UDP协议具有不可靠性和不安全性,显然这很难满意web应用的需要。
而TCP协议是基于毗连和三次握手的,固然具有可靠性,但人具有肯定的缺陷。但试想一下,普通的C/S架构软件,顶多上千个Client同时毗连,而B/S架构的网站,十万人同时在线也是很平常的事儿。如果十万个客户端和服务器一直保持毗连状态,那服务器如何满意承载呢?
这就衍生出了http协议。基于TCP的可靠性毗连。普通点说,就是在请求之后,服务器端立刻关闭毗连、释放资源。这样既保证了资源可用,也吸取了TCP的可靠性的优点。
正由于这点,以是各人通常说http协议是“无状态”的,也就是“服务器不知道你客户端干了啥”,其实很大水平上是基于性能考虑的。以至于厥后有了session之类的玩意。
普通点说http,就是在请求和相应之后,服务器端立刻关闭毗连,并释放资源,这样既保证了资源可显示与可用性,也吸取了TCP协议的可靠性优点,但是缺点就无法跟踪用户的操作了,以是我们在后端开发的学习中才会接触一个东西叫session和cookie技术
以是你也可以理解为http是基于请求与相应的模式, 而且是无状态的应用层协议。
6.http请求和相应的基本原理

HTTP 消息是服务器和客户端之间交换数据的方式。有两种类型的消息︰ 请求(requests)-- 由客户端发送用来触发一个服务器上的动作;相应(responses)-- 来自服务器的应答。
任何一个http请求都只会分为两个部分: 一个请求报文别的一个是相应报文。
请求报文是客户端按照肯定的格式生成一段文本,然后发给我们的服务端, 而服务器接收到了这样一个请求报文就会解析内里的内容进行处理,然后做出反馈,也就是相应。
相应报文也就是服务器端根据请求报文反馈给客户端的文本信息。
6.1http请求(request)报文基本结构
http请求(request)也叫请求报文,一个基本的HTTP请求报文由请求行(request line)、请求头部(request header)、空行和请求数据4个部分构成。
  
  1. 1.请求行(request line):就是请求方式和协议,也就是说用于描述客户端的请求方式,例如post/get方式, 以及请求的资源名称和HTTP协议的版本号!
  2. 2.若干个请求头(request header): 这些也叫消息头告诉服务器发送的是什么数据类型,编码类型、请求的是哪台主机、以及客户端浏览器的一些系统环境 等等, 这些消息头中有很多头部字段名 和 对应的值它的格式为 name:value
  3. 3.空白行
  4. 4.请求正文内容
复制代码
说了这么多是不是有点懵有点晕,那就使用抓包工具抓取实际例子,我们详细看一下:
我们在学习http知识的时候 就可以先直接使用Fiddler来抓取一个http请求和http相应来先看看到底是什么东西!这样也有助于我们来更好地理解http。我们可以通过Fiddler抓取网络数据包的手段,就可以看到一个基本的http请求结构都包含哪些信息
例如一个GET方式的请求(Request)信息,如下图所示:
 

6.2http相应(response)报文基本结构
http相应(response)也叫相应报文,一个基本的HTTP相应报文由相应行、相应头、空行和相应体4个部分构成。
  
  1. 1.响应行:响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK
  2. 2.响应头:响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
  3. 3.空白行:
  4. 4.响应体:响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。
复制代码
其实相应报文比请求报文更加简单, 你只要可以或许搞懂请求报文 那么相应报文就很容易搞懂,同样的原理,我们可以通过Fiddler抓取网络数据包的手段,就可以看到一个基本的http相应结构都包含哪些信息。
例如一个POST方式的请求(Request)信息 如下:例如一个POST方式的请求(Request)信息,如下图所示:
 

怎么样是不是看这一大堆脑壳都大了一直稳稳地响个不停呢 ?感觉无从动手,更不消说学习
7.Http请求(Request)报文结构图解

我们先来看一张请求(Request)图解,如下图所示:
 

然后逐一剖解上图中的各个部分,剖解效果如下:
7.1请求方法 (Request method)
我们常见的一些请求方式也就是POST/GET,当然还有其他的一些请求方式, 如下表所示:
请求方法描述GET请求资源 比如常见的就是输入一个URL去请求一个资源下来, 它也可以带上肯定的参数一起请求POST提交资源 比如说我们想把用户名和暗码 提交到服务器去,这个时候用POST比力好HEAD获取相应头,检查一个对象是否存在PUT替换资源,向服务器发送数据,并存储服务器内部DELETE删除资源OPTIONS允许客户端查看服务器的性能TRACE显示服务器收到的请求 常见于测试和调试诊断!CONNECT对通道提供支持 7.2URL (Uniform Resource Locator)
URL中文名为统一资源定位符 英文全称Uniform Resource Locator ,可以使用一个URL所在来描述一个网络上的资源,而HTTP的GET、POST、PUT、DELETE对应着对这个资源的查、改、增、删四个操作。我们网络中的每一信息资源都有统一的且在网上唯一的所在!
URL详细由4部分构成:协议、主机、域名、端口、路径文件、[附加资源]
URL的一般语法格式为:
  
  1. protocol :// hostname[:port] / path / [?query-parameters][#anchor]
复制代码
1.协议 (protocol):指底层使用的协议类型,如:http、ftp、https、等...
2.主机名 (hostname) + 域名:HTTP服务器的IP或者域名。主机名+域名 例如: www.xsphp.com
3.端口 (port):HTTP服务器端口,端口是一个数字, 端口是可选的 省略时使用方案是服务器默认设置的端口。例如 80、8080、..各种传输协议都有默认的端标语,如http协议的默认端口为80,如果URL所在省略端口,则使用默认端标语。
留意:有时候出于安全或其他考虑,可以在服务器设置上对端口进行重新定义,也就是采用非标准端标语,那么此时,URL所在中就不能省略端标语这一项。
4.路径文件 (path):访问资源的路径。由零或多个/符号隔开的字符串,一般用来表示主机上的一个目次或文件所在。例如: /tpl/index.php
5.查询参数 附加资源 (query-parameters):发送给HTTP服务器的数据。
这一项在URL中也是可选的 用于给动态网页如 PHP/JSP/ASP/ASP.NET等后端页面 传递参数的一种方式,而且如果是GET请求方法, 那么可有多个参数, 它们彼此用&符号隔开,每个参数的名和值用=符号隔开
语法格式: ?参数=值&参数2=值 以此类推。例如: ?id=33&age=25&name=zhangsan。举个例子:一个比力常见的url所在, 如:https://www.xxxx.net/xxxx/xxxx/xxxx/100?num=1001.2014.3001.5501
6.anchor:锚点
7.3请消息求头 (Request Header)
1.请求消息头也叫消息头告诉服务器发送的是什么数据类型,编码类型、请求的是哪台主机、以及客户端浏览器的一些系统情况 等等前面已经说过了, 而且请求头是可以由开发人员根据需求去进行自定义的。
这些消息头中有许多头部字段名 和 对应的值它的格式为 name:value。我们常见的一些请求头如下表所示:
请求头描述Host主机IP所在或域名User-Agent提交一些客户端相关信息,例如: 操作系统、浏览器等一些版本信息给服务器, 而这些信息可能会让服务器按照肯定的规则给客户端返回兼容性比力好的信息!Accept指定客户端接收的信息类型,<br />例如:image/jpg,text/html,application/json<br />也就是可以让客户端告诉服务器 之后客户端这一边想接收到什么样的数据格式Accept-Charset告诉服务器等一会这边客户端需要接收的字符集编码格式,<br />例如:gb2312、iso-8859-1、utf-8Accept-Encoding告诉服务器, 客户端这边可接受的内容压缩编码,例如gzip 可以在肯定水平上节省流量!Accept-Language告诉服务器, 客户端可接受的语言,例如Accept-Language:zh-cnAuthorization客户端提供给服务端进行权限认证的信息, 也就是要告诉服务器端一些认证的信息,服务器才气返反相应的数据!Cookie携带的COOKIE信息, 普通情况下,当一个用户登录成功,就会在本地保存一份cookie,下次请求就会直接带上这个cookie信息,也就是这个用户的相关信息Referer当前文档的URL 也就是纪录下从哪个链接所在提交到服务器的Content-Type向服务器提交内容的格式<br />例如:Content-Type:application/x-www-form-urlencoded<br />总而言之,就是告诉服务器,客户端传递的内容属于什么格式 或 其他编码格式!Content-Length数据长度, 也就是客户端向服务器端提交内容的数据长度有多少字节!Cache-Control缓存机制,例如:Cache-Control:no-cachepragma防止页面被缓存,与Cache-Control:no-cache作用一样..............................................  2.我们可以用Fiddler截取一个请求头看看,如下图所示:
 

7.4空行
空白行:也就是在消息头结束的下方,会存在一个空白行, 这是必须存在的, 是由HTTP标准规定的!
7.5请求体
请求体它的出现是要根据请求的方式不同而不同, 也就是如果是POST那么就会以键与值的形式进行发送, 如果是GET请求那么这里就不会包含请求正文内容。
从7.3抓包可以看出这里是一个json数据:
  
  1. {"email":"xxxxxxx@qq.com","password":"xxxxxxx","remember":"0","code":"","mobile":"","type":"login","reqtimestamp":1647506402551}
复制代码
8.http相应(Response)报文结构图解

同样我们先来看一张http相应(response)图解,如下图所示:
 

然厥后逐一剖解上图中的各个部分,剖解效果如下:
8.1相应行
相应行也叫状态行, 上图中相应行内部其实包含了3个重要的信息部分:
HTTP协议的版本、HTTP状态码、HTTP的状态描述
1.HTTP协议的版本现目前都是HTTP/1.1 版本 这个没什么好说的!
2.HTTP状态码 可以用来表示网页服务器端给客户端返回的HTTP相应状态, 通常都是3位数字的代码, 而这些常见的状态码又可以分为几种提示类型:如下表所示:
种别状态码描述1xx这种种别的状态码 为提示消息类型 通常表示请求被服务器端成功接收2xx这种种别的状态码 为成功消息类型通常表示请求被服务器端成功处理3xx这种种别的状态码 为重定向类型通常表示被服务器端重新定义了请求方向,需要进一步的操作以完成请求4xx这种种别的状态码 为客户端错误信息通常表示服务器告诉客户端的一些错误消息5xx这种种别的状态码 为服务端错误信息通常表示告诉客户端 服务器这边出现的一些错误信息 3.HTTP的状态描述是紧跟在状态码背面的英文单词
每一种详细种别状态码+状态描述可以参考下表:
1xx: 提示消息类型
消息:状态描述含义100Continue服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继承发送其余的请求。101Switching Protocols服务器转换协议:服务器将遵从客户的请求转换到别的一种协议。 2xx: 成功消息类型
消息:状态描述含义200OK请求成功(其后是对GET和POST请求的应答文档。)201Created请求被创建完成,同时新的资源被创建。202Accepted供处理的请求已被接受,但是处理未完成。203Non-authoritative Information文档已经正常地返回,但一些应答头可能不正确,由于使用的是文档的拷贝。204No Content没有新文档。浏览器应该继承显示原来的文档。如果用户定期地革新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有效的。205Reset Content没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。206Partial Content客户发送了一个带有Range头的GET请求,服务器完成了它。 3xx: 重定向类型
消息:状态描述含义300Multiple Choices多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个所在。301Moved Permanently所请求的页面已经转移至新的url, 说普通一点表示请求的资源分配了url,以后就应该使用这个url302Found所请求的页面已经临时转移至新的url, 也就是说请求的资源临时分配了url,本次请求暂且使用这个url, 这里302与301的区别是,302表示临时性重定向,重定向的url还有可能还会改变。303See Other表示请求的资源路径发生改变,请使用GET方法请求url。其实与302一样,但是明确指出让我们使用GET方法请求url304Not Modified未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继承使用。305Use Proxy客户请求的文档应该通过Location头所指明的署理服务器提取。306Unused此代码被用于前一版本。目前已不再使用,但是代码依然被保存。307Temporary Redirect被请求的页面已经临时移至新的url。 4xx: 客户端错误信息
消息:状态描述含义400Bad Request服务器未能理解请求,通常为表示请求的报文中存在语法错误 ,比如: 提交json数据的时候,如果json格式有问题,接收端接收json,也会出现400 bad request401Unauthorized被请求的页面需要用户名和暗码。402Payment Required此代码尚无法使用。403Forbidden对被请求页面的访问被克制。404Not Found服务器无法找到被请求的页面。405Method Not Allowed请求中指定的方法不被允许, 请求的方式get、post、delete方法与后台规定的方式不符合 例如: 比如: 后台方法规定的请求方式只接受get,如果用post请求,就会出现 405 method not allowed的提示406Not Acceptable服务器生成的相应无法被客户端所接受。407Proxy Authentication Required用户必须首先使用署理服务器进行验证,这样请求才会被处理。408Request Timeout请求超出了服务器的等候时间。409Conflict由于辩论,请求无法被完成。410Gone被请求的页面不可用。411Length Required"Content-Length" 未被定义。如果无此内容,服务器不会接受请求。412Precondition Failed请求中的前提条件被服务器评估为失败。413Request Entity Too Large由于所请求的实体的太大,服务器不会接受请求。414Request-url Too Long由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。415Unsupported Media Type由于媒介类型不被支持,服务器不会接受请求, 例如: 后台步伐不支持提交的content-type类型,就会返回415416 服务器不能满意客户在请求中指定的Range头。417Expectation Failed  5xx: 服务器错误信息
消息:状态描述含义500Internal Server Error请求未完成。服务器碰到不可预知的情况。501Not Implemented请求未完成。服务器不支持所请求的功能。502Bad Gateway请求未完成。服务器从上游服务器收到一个无效的相应。503Service Unavailable请求未完成。服务器临时过载或当机。504Gateway Timeout网关超时。505HTTP Version Not Supported服务器不支持请求中指明的HTTP协议版本。 8.2相应头 (Response Header)
1.相应头也叫消息报头 也就是服务器端要告诉客户端的一些附加信息, 但是也有可能这些相应头是由后端开发人员进行自定义的!
而且这里的相应头跟请消头 很类似, 格式也基本一样, 它的格式为 name:value。详细这里也列举了一些常见的相应头 如下表所示:
相应头含义ServerHTTP服务器的软件信息Date相应报文的时间, 要留意返回时间的时区Expiros服务器指定的一个缓存过期时间Set-Cookie设置Cookie, 也就是服务器返回的一段文本给客户端,让客户端保存好,下次请求就把这个cookie文本带上!Last-Modified资源末了修改时间 ,也就是客户端有缓冲的文档并发出了一个条件性的请求, 服务器告诉客户,原来缓冲的文档还可以继承使用, 也就是说不消在从服务器中进行返回Content-Type服务器返回给客户端的相应类型和编码字符集<br />例如:Content-Type:text/html;charset=utf-8Content-Length内容长度, 也就是服务器返回给客户端返回的内容是多少字节Connection例如Keep-Alive,表示保持tcp链接不会关闭,当然它不会永久保持链接,我们在服务器端中是可以设置的Location指明服务器给客户端重定向的位置,也就是新的URL所在 如:304的情况......................................  这里只例举一下常见和常用的,其实还有更多的相应头这里就不逐一列举了!有兴趣的本身可以百度一下!
2.我们可以用Fiddler截取一个相应头看看,如下图所示:
 

8.3空白行
空白行也就是http规范制定的必须存在的一个空行, 空行的目的就是一种格式,也就是要告诉用户接下来的内容就是正文内容了!
8.4相应体
相应体也就是实际从服务器返回给客户端的正文内容,也可能是一些字符串, 也可以是任意的格式:
相应体大多数情况下都是html、json、文本、xml 这些格式!
从8.2抓包可以看出这里是一个json数据:
  
  1. {"status":1,"code":10000,"message":"\u8bbf\u95ee\u6210\u529f","data":{"url":"","token":" xxxxxxxx","isenterprise":0,"uid":" xxxxxxxxx"}}
复制代码
9.小结

1.HTTP 请求和相应具有相似的结构,由以下部分构成︰
(1)一行起始行用于描述要执行的请求,或者是对应的状态,成功或失败。这个起始行总是单行的。
(2)一个可选的 HTTP 头聚集指明请求或描述消息正文。
(3)一个空行指示所有关于请求的元数据已经发送完毕。
(4)一个可选的包含请求相关数据的正文 (比如 HTML 表单内容), 或者相应相关的文档。 正文的大小有起始行的 HTTP 头来指定。
起始行和 HTTP 消息中的 HTTP 头统称为请求头,而其有效负载被称为消息正文。
 

好了,对于Http和Https相关的的知识点就说这么多了,对于学习fiddler足够了!
接下来你就可以愉快的学习Fiddler了
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表