fiddler——http——http协议报文结构

https://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html        http资料学习


https://www.cnblogs.com/TankXiao/archive/2012/02/06/2337728.html        fiddler资料学习

=====================================================================================================

超文本传输协议(HTTP):是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器


                   目前我们使用的是   HTTP/1.1     版本



我们打开浏览器,在地址栏中输入URL,然后我们就看到了网页。原理是怎样的呢:


输入URL后,我们的浏览器给Web服务器发送了一个http请求(http  Request), 
Web服务器接到http请求(http Request)后进行处理,
生成相应的http响应(http Response),然后发送给浏览器,
浏览器解析http响应(http Response)中的HTML,这样我们就看到了网页。
--------------------------------------------------------------------------------------------
http报文分为2个:主要为http请求报文和http响应报文: http请求(http Request)
----> 浏览器 服务器 http响应(http Response) <---- ------------------------------------------------------------------------------------------ 我们的Request 有可能是经过了代理服务器,最后才到达Web服务器的。 过程如下所示: request ----> request ----> 浏览器 代理服务器 服务器 response <---- response <---- 代理服务器就是网络信息的中转站,有什么功能呢: 1. 提高访问速度, 大多数的代理服务器都有缓存功能。 2. 突破限制, 也就是翻墙了 3. 隐藏身份。 -----------------------------------------------------------------------------------------------------


URL(Uniform Resource Locator) 地址用于描述一个网络上的资源,  基本格式如下:


schema://host[:port#]/path/.../[?query-string][#anchor]


scheme        指定低层使用的协议(例如:http, https, ftp)

host          HTTP服务器的IP地址或者域名

port#         HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/

path          访问资源的路径

query-string  发送给http服务器的数据

anchor-       锚,这是一种超链接,只是页面内部的超链接,如果网页很长,而且里面的内容分为N个部分,这样就可以在网页顶部设置一个锚点,

                  方便浏览者点击相应锚点,快速到达本页面相应位置。

               URL中,锚点在最右边,前面有一个字符“#”。


举例:

http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff

Schema(协议):                 http
host(域名):                   www.mywebsite.com
path(资源路劲):               /sj/test/test.aspx
Query String(参数):           name=sviergn&x=true
Anchor(锚):                   stuff

----------------------------------------------------------------------------------------------------------

HTTP协议是无状态的

http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 

为了解决这个问题, Web程序引入了Cookie机制来维护状态。


--------------------------------------------------------------------------------------------------------------------------

  --------------------------------------------------------------------------------------------------------------------------

打开一个网页需要浏览器发送很多次Request


1. 当你在浏览器输入URL http://www.cnblogs.com 的时候,浏览器发送一个Request去获取 http://www.cnblogs.com 的html。服务器把Response发送回给浏览器。

2. 浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件。

3. 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。

4. 等所有的文件都下载成功后。 网页就被显示出来了。

扫描二维码关注公众号,回复: 8354083 查看本文章

示例:(fiddler里面inspectors选项卡里面的RAW子选项卡)

详解http协议报文结构

http请求报文:

POST https://anp.njpji.cn/un_manager/user/toLogin HTTP/1.1
Host: anp.njpji.cn
Connection: keep-alive
Content-Length: 85
Accept: */*
Origin: https://anp.njpji.cn
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Referer: https://anp.njpji.cn/un_manager/views/session/login.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Hm_lvt_70a44149803685eae3a9163f23ea34b7=1566289322,1566346318; JSESSIONID=C8ACE0B8E7E4E05C0EDE0752C1B8A771

username=7droqslNzQg%3D&password=Jrrw3HiJ%2BArijSvr3jrq1Q%3D%3D&verificationCode=2395

http请求报文的结构: 浏览器发送给web服务器的http请求报文,如下所示:

 

先看Request 消息的结构, Request 消息分为3部分:

第一部分叫Request line, ------------>起始行

第二部分叫Request header, ------------>首部

第三部分是body, ------------>主体


注意:header和body之间有个空行,

 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第一行中的Method表示请求方法,比如"POST","GET", Path-to-resoure表示请求的资源, Http/version-number 表示HTTP协议的版本号。

当使用的是"GET" 方法的时候, body是为空的。

我们打开Fiddler 捕捉一个登录的Request 然后分析下它的结构, 在Inspectors tab下以Raw的方式可以看到完整的Request的消息。

请求方法        请求资源即URL                    http协议的版本号

POST https://anp.njpji.cn/un_manager/user/toLogin HTTP/1.1                                                             ---------起始行
Host: anp.njpji.cn                                                                                         --------->下面是header首部
Connection: keep-alive
Content-Length: 85
Accept: */*
Origin: https://anp.njpji.cn
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Referer: https://anp.njpji.cn/un_manager/views/session/login.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Hm_lvt_70a44149803685eae3a9163f23ea34b7=1566289322,1566346318; JSESSIONID=5C305287359661147AD9C5570451A7E8
                                                                                                                       ------->空行
username=7droqslNzQg%3D&password=Jrrw3HiJ%2BArijSvr3jrq1Q%3D%3D&verificationCode=0237                                  ------> 此处为body主体

 ===========================================================================================================

http响应报文:

HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Sun, 29 Dec 2019 08:09:54 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Frame-Options: SAMEORIGIN

49
{"respCode":"00","respDesc":"用户账户信息校验成功","data":null}
0

http响应报文结构: web服务器发送给浏览器的http响应报文内容:

Response消息的结构, 和Request消息的结构基本一样。 同样也分为三部分:

第一部分叫Response line, ------------>响应行

第二部分叫Response header, ------------>响应首部

第三部分是body, ------------>主体


header和body之间也有个空行,


第一行,起始行中有状态码,和状态码消息

HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Sat, 07 Dec 2019 09:05:17 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Frame-Options: SAMEORIGIN

49
{"respCode":"00","respDesc":"用户账户信息校验成功","data":null}
0

=============================================================================================

解压http响应:

                          有的时候再fiddler抓包的过程中,经常看到http响应是乱码,单击:" Response  body  is  encoded.Click  to  decode "按钮;

                          可以解压http响应。如下图:

 

猜你喜欢

转载自www.cnblogs.com/xiaobaibailongma/p/12115352.html