HTTP协议和 fiddler 的用法

目录

1.HTTP介绍 

2.HTTP工作流程 

3.fidder的安装及使用 

3.1安装及使用

3.2抓包结果分析

4.2请求方法类型

4.2.1.GET方法

4.2.2POST方法 

4.2.3GET和POST的区别 

5.HTTP响应

5.1状态码表:


 

1.HTTP介绍 

HTTP: HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议.

超文本含义:传输的内容不仅仅是文本内容(css,html,js),还可以是图片,音频,视频等二进制数字据.

2.HTTP工作流程 

 在浏览器输入一个"网站",浏览器会向该网站的服务器发送一个HTTP数据包,服务器收到该数据包后,返回相应的HTTP数据包.

3.fidder的安装及使用 

3.1安装及使用

1.下载:fiddler官方下载 - 搜狗搜索 (sogou.com) 

2.安装:一路next.

3.配置:点击Tools,选择Options,选择HTTPS,按如下勾选,注意会跳出一个提示,点击yes,然后一路next即可完成配置

 4.使用:

左侧窗口显示了所有的 HTTP 请求 / 响应 , 可以选中某个请求查看详情 .
右侧上方显示了 HTTP 请求的报文内容 . ( 切换到 Raw 标签页可以看到详细的数据格式 )
右侧下方显示了 HTTP 响应的报文内容 . ( 切换到 Raw 标签页可以看到详细的数据格式 )
请求和响应的详细数据 , 可以通过右下角的 View in Notepad 通过记事本打开 .
ctrl+a选中左边所以内容,delete即可删除完

3.2抓包结果分析

Result:状态码

Protocol:协议

Host:请求站点

URL:页面地址

Body:返回数据大小

HTTP请求头:

1.首行:请求的类型 地址 版本号
GET https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread?build=0&mobi_app=web&unread_type=0 HTTP/1.1

2.请求头header:key value......
Host: api.vc.bilibili.com
Connection: keep-alive
sec-ch-ua: "Microsoft Edge";v="113", "Chromium";v="113", "Not-A.Brand";v="24"
Accept: application/json, text/plain, */*
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.50
sec-ch-ua-platform: "Windows"
Origin: https://www.bilibili.com
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://www.bilibili.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: buvid3=E206DA8D-C572-5341-54DB-5B3216274D6E15057infoc; i-wanna-go-back=-1; _uuid=A793AE68-981C-1945-619A-4986EAB3FBB714028infoc; buvid_fp_plain=undefined; DedeUserID=415445051; DedeUserID__ckMd5=91f7f6188ebb8925; nostalgia_conf=-1; b_ut=5; CURRENT_BLACKGAP=0; CURRENT_QUALITY=80; CURRENT_FNVAL=4048; b_nut=100; rpdid=|(JYl))RuuRl0J'uY~Y~)m|JJ; header_theme_version=CLOSE; FEED_LIVE_VERSION=V8; buvid4=522615AE-5454-4E6D-3E24-8D5226F831E216398-022082220-eMQNsw5ZTozE5Egx%2BYyTbA%3D%3D; PVID=3; fingerprint=22ea4a926b2f3fcc419a26e39c4934dd; bp_video_offset_415445051=796596183175790700; buvid_fp=22ea4a926b2f3fcc419a26e39c4934dd; home_feed_column=4; innersign=0; bsource=search_bing; browser_resolution=1238-795; SESSDATA=86d44a65%2C1700471009%2Ca4dca%2A52; bili_jct=fc02edc2a7c20a9921a16edf9c89a6c3; sid=5l11miir; b_lsid=F4B122D5_1884D5244EA
3.空行:是header的结束标志

4.正文(body)空行后面的内容,有的时候可以没有,比如现在
 

HTTP响应头:

  1.首行:版本号  状态码  状态码的描述
HTTP/1.1 200 OK
2.响应报头header:

key : value.....
Date: Wed, 24 May 2023 11:01:52 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET,POST,PUT,DELETE
Access-Control-Allow-Origin: https://www.bilibili.com
Bili-Status-Code: 0
Bili-Trace-Id: 06a16659f8646dee
Vary: Origin
X-Bili-Trace-Id: 03899b83a2979e5c06a16659f8646dee
Access-Control-Allow-Headers: Origin,No-Cache,X-Requested-With,If-Modified-Since,Pragma,Last-Modified,Cache-Control,Expires,Content-Type,Access-Control-Allow-Credentials,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Cache-Webcdn,x-bilibili-key-real-ip,x-backend-bili-real-ip,x-risk-header
Cross-Origin-Resource-Policy: cross-origin
Access-Control-Expose-Headers: X-Bili-Gaia-Vvoucher
Expires: Wed, 24 May 2023 11:01:51 GMT
Cache-Control: no-cache
X-Cache-Webcdn: BYPASS from blzone05
Content-Length: 224
3.空行:同上
4.正文:响应正文
{"code":0,"msg":"0","message":"0","ttl":1,"data":{"unfollow_unread":3,"follow_unread":67,"unfollow_push_msg":0,"dustbin_push_msg":0,"dustbin_unread":0,"biz_msg_unfollow_unread":0,"biz_msg_follow_unread":0,"custom_unread":0}}

为什么存在空行:HTTP协议没有规定报头的大小,空行相当于抱头的句号,用来分割报头和正文,而且HTTP依赖于TCP,而TCP面向字节流,如果没有空行会出现"粘包问题" 

 

4.HTTP请求

4.1请求地址URL

URL 中的可省略部分
协议名 : 可以省略 , 省略后默认为 http://
ip 地址 / 域名 : HTML 中可以省略 ( 比如 img, link, script, a 标签的 src 或者 href 属性 ).
略后表示服务器的 ip / 域名与当前 HTML 所属的 ip / 域名一致 .
端口号 : 可以省略 . 省略后如果是 http 协议 , 端口号自动设为 80; 如果是 https 协议 , 端口号自
动设为 443.
带层次的文件路径 : 可以省略 . 省略后相当于 / . 有些服务器会在发现 / 路径的时候自动访问
/index.html
查询字符串 : 可以省略
片段标识 : 可以省略

 

4.2请求方法类型

 

4.2.1.GET方法

 

GET 是最常用的 HTTP 方法 . 常用于获取服务器上的某个资源 .
在浏览器中直接输入 URL, 此时浏览器就会发送出一个 GET 请求 .
另外 , HTML 中的 link, img, script 等标签 , 也会触发 GET 请求 .

打开fidder, 访问bilibili,观察

GET https://api.bilibili.com/x/web-interface/wbi/search/default?w_rid=fbacb6dbbf3ae209c89f750af4366345&wts=1684930790 HTTP/1.1
Host: api.bilibili.com
Connection: keep-alive
sec-ch-ua: "Microsoft Edge";v="113", "Chromium";v="113", "Not-A.Brand";v="24"
Accept: application/json, text/plain, */*
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.50
sec-ch-ua-platform: "Windows"
Origin: https://www.bilibili.com
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://www.bilibili.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: buvid3=E206DA8D-C572-5341-54DB-5B3216274D6E15057infoc; i-wanna-go-back=-1; _uuid=A793AE68-981C-1945-619A-4986EAB3FBB714028infoc; buvid_fp_plain=undefined; DedeUserID=415445051; DedeUserID__ckMd5=91f7f6188ebb8925; nostalgia_conf=-1; b_ut=5; CURRENT_BLACKGAP=0; CURRENT_QUALITY=80; CURRENT_FNVAL=4048; b_nut=100; rpdid=|(JYl))RuuRl0J'uY~Y~)m|JJ; header_theme_version=CLOSE; FEED_LIVE_VERSION=V8; buvid4=522615AE-5454-4E6D-3E24-8D5226F831E216398-022082220-eMQNsw5ZTozE5Egx%2BYyTbA%3D%3D; fingerprint=22ea4a926b2f3fcc419a26e39c4934dd; buvid_fp=22ea4a926b2f3fcc419a26e39c4934dd; bsource=search_bing; SESSDATA=86d44a65%2C1700471009%2Ca4dca%2A52; bili_jct=fc02edc2a7c20a9921a16edf9c89a6c3; sid=5l11miir; bp_video_offset_415445051=799240933580210300; b_lsid=93D7268F_1884DA68364; PVID=1; innersign=0; home_feed_column=4; browser_resolution=1238-795

 

GET 请求的特点 

首行的第一部分为 GET
URL query string 可以为空 , 也可以不为空 .
header 部分有若干个键值对结构 .
body 部分为空 .

4.2.2POST方法 

POST 方法也是一种常见的方法 . 多用于提交用户输入的数据给服务器 ( 例如登陆页面 ).
通过 HTML 中的 form 标签可以构造 POST 请求 , 或者使用 JavaScript ajax 也可以构造 POST 请求 .

 

 打开fidder,登录bilibili ,观察

POST https://functional.events.data.microsoft.com/OneCollector/1.0/ HTTP/1.1
Host: functional.events.data.microsoft.com
Connection: keep-alive
Content-Length: 724
APIKey: 70109aa3567b40e3bb8ac9e67a07b58a-b00e4868-b511-4be4-90dd-6370c812f0af-7167
Client-Id: NO_AUTH
Content-Encoding: deflate
Content-Type: application/bond-compact-binary
Expect: 100-continue
SDK-Version: EVT-Windows-C++-No-3.5.131.1
Tickets: "10001"="p:t=GwBWAbuEBAAUKFVEGReoCdHdlh1TorgVuqX+P2gOZgAAEOLgjiDiNvPKVcAcrYL4/1MgAUcVxYYqtYKwT7TOjfusIiGPy2+gUclzjreRbRbMMWHTgoc2MDMkrGTNKLzweWhEHqw/QzMrmuyShl1aoNm635E+M/5XQTrIH6vUzB4e9In61KKJuZtnU8eTZeej0xiBhZ3uvwl3Ih6+N8l27IVnzYDzdV2gkiXE70agCbtDYPbDrctbujCOOmkoL/T97kvmDna85oWP+h5VrbEkm/KXYH/1m+Cd65w+bd6bCjegRBarn5JtnRjWMcbXxuCKDyiTH6NeVHCDaUxFL1CXeWFm6z/3qW3ysi+Rx2tQa6kNfGOSQDmZXudFYuWfC2izSKpktddA/ehiNPehkBOcqoQRVfs8JUWTN1j0SjYzVmS0B8kk0mjrGd9xRgj7s2RsqVP6qFcB&p="
Upload-Time: 1684931184665
Sec-Fetch-Site: none
Sec-Fetch-Mode: no-cors
Sec-Fetch-Dest: empty
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.50
Accept-Encoding: gzip, deflate, br

碣Mk7 `M?轎垞C?
祪S??i)喳5eij
]??CvG洐睗鬞J/??=釱~D?м
-澼盒熜僼x$$△晅|oH4?)me??q看'?僶MY貰O箫u澺"?湳礴EjO钯獛lrT=y轃o^峻費?FJk蔈3dhK?#B嵚楰陱??讅镫K^珑?!劃Nв閠:漀в閠:漀в閠:o?侥敡Wv蠛?絔??4?h>鼋耒ea罳LR▓![???袲*-u二Om?啨z\?hn榭?绯gw0
P€b8纴灔俥?庛円L嵁L粏    3$@髩餄e6S?A昄bl樍?IFㄤ$32S?-Z{铈5U?脥圷孯J8??.杕験*Q堅娆2椤    蘏髜?A勣E?栱澔<l鉵??>衸?Kg瘶欄????{R€f明n:?佺穯冺m竗! x€i{狁钽穴/C8B嘗2%`?隺?0.贀7WO氟??"﹫"葐???墕,D|啈挺镥ㄍ佹V鹓锟XM帾谖毴鱜秋\钔玢"沉h?僚?]f娎?pe`踧?扢炌M静烥9X夭龐e盱<头碽&?儔?矓2(    ?㎎cA?X洟^F篻帡V绤墡莍;椏 t&T禐腕嫹唸C?榯夎!n?U籫j汹+發v@绋N博>銅X稘v錹

POST 请求的特点
首行的第一部分为 POST
URL query string 一般为空 ( 也可以不为空 )
header 部分有若干个键值对结构 .
body 部分一般不为空 . body 内的数据格式通过 header 中的 Content - Type 指定 . body 的长度由
header 中的 Content - Length 指定 .

4.2.3GET和POST的区别 

语义不同 : GET 一般用于获取数据 , POST 一般用于提交数据 .
GET body 一般为空 , 需要传递的数据通过 query string 传递 , POST query string 一般
为空 , 需要传递的数据通过 body 传递
GET 请求一般是幂等的 , POST 请求一般是不幂等的 . ( 如果多次请求得到的结果一样 , 就视为
请求是幂等的 ).
GET 可以被缓存 , POST 不能被缓存 . ( 这一点也是承接幂等性 ).

5.HTTP响应

5.1状态码表:

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

5.2响应报头

响应报头的基本格式和请求报头的格式基本一致 .
类似于 Content - Type , Content - Length 等属性的含义也和请求中的含义一致 .

5.3Content-Type

text/html : body 数据格式是 HTML
text/css : body 数据格式是 CSS
application/javascript : body 数据格式是 JavaScript
application/json : body 数据格式是 JSON

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值