主要介绍http 1.0
我们在浏览器中输入一个网址,稍等片刻就看见了网页
客户端会发送一个http请求,要求返回cn.bing.com这个网址,服务器收到请求后就会返回一个html页面 (服务器根据请求找到客户端想要的资源,然后把这个html通过HTTP响应返回给浏览器,客户端收到HTML之后对页面进行渲染)
上诉这个HTTP模式就是典型的 一问一答 的模型协议
学习HTTP的主要学习内容 是学习HTTP的报文格式(报文格式就是描述了HTTP请求是啥样的,响应是啥样的)
因此我们需要使用抓包工具,来捕获到请求交互的详细情况(抓包就是一种特殊的软件,相当于一个代理程序,浏览器给服务器发的请求就会经过这个代理程序,进一步分析出请求和响应的结果如何)借助这个代理程序,就知道了浏览器和服务器之间具体交互细节
代理还分具体两种,正向代理和反向代理,前者就是给客户端提供服务,和客户端关系紧密,这样服务器就不知道真实的客户端是啥。后者就是给服务器提供服务,和服务器关系紧密,这样客户端就不知道真实的服务器是啥。
fiddler
左侧区域是抓到的请求列表
上面是http请求的原始模样,下面是http响应的原始模样
开启fiddler抓取https的功能
在菜单栏 tools options 然后如图勾选选项,期间可能需要安装证书
如果这个时候还看不见https的进程,可能是使用了其他的代理软件,例如游戏加速器导致的,不能同时和fiddler运行。
HTTP请求
构造一个HTTP请求,本质上就是往一个TCPsocket中,按照下列格式来写入数据即可
GET http://blogs.msdn.microsoft.com/fiddler/2011/12/10/revisiting-fiddler-and-win8-immersive-applications/ HTTP/1.1
Host: blogs.msdn.microsoft.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.48
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,be;q=0.5,eo;q=0.4
GET http://blogs.msdn.microsoft.com/fiddler/2011/12/10/revisiting-fiddler-and-win8-immersive-applications/ HTTP/1.1
第一行是GET方法 然后是URL 用来描述网络上的唯一资源
Host: blogs.msdn.microsoft.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.48
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,be;q=0.5,eo;q=0.4然后是一个按行组成的键值对,每一行是一个键值对,键和值之间使用: 来分割(冒号加一个空格)
有些请求的最底下会有空行,一个HTTP请求的header可以有若干个,就使用空行来作为header的结束
有的请求会有body,也就是正文,会显示用户名,密码,uid等(基本都为加密)
HTTP响应
HTTP/1.1 302 Found
Location: https://blogs.msdn.microsoft.com/fiddler/2011/12/10/revisiting-fiddler-and-win8-immersive-applications/
X-Azure-Ref: 0ifk/ZAAAAAA8GVVbO6Q6Tqt/0u5hvW8NU0lOMzBFREdFMDIxMwBkZWEwZDI4Ny03YzE0LTRmZTYtOGI3Yi1kMDkxNDRhOWQzNWY=
Date: Wed, 19 Apr 2023 14:24:09 GMT
Content-Length: 0
HTTP/1.1 302 Found
1.1是版本号 302是状态码 后面可能会跟着一个状态码的描述
Location: https://blogs.msdn.microsoft.com/fiddler/2011/12/10/revisiting-fiddler-and-win8-immersive-applications/
X-Azure-Ref: 0ifk/ZAAAAAA8GVVbO6Q6Tqt/0u5hvW8NU0lOMzBFREdFMDIxMwBkZWEwZDI4Ny03YzE0LTRmZTYtOGI3Yi1kMDkxNDRhOWQzNWY=
Date: Wed, 19 Apr 2023 14:24:09 GMT
Content-Length: 0为响应报头,也就是header,为键值对结构,使用: 来进行分割(冒号和空格)
空行,作为header的结束标记
正文,可以是json html js css 图片等结果