
实现一个具体的程序,写代码之前,一定是要约定好应用层的协议格式
应用层这里,除了自定义协议之外,也有些大佬们现成搞好的协议了

FTP 文件传输协议
SSH远程操作主机
telnet 网络调试工具
...........
HTTP协议[重点]
当前web 开发的最核心的协议使用网站, 都会用到http~ ~Spring ,围着 http 转~~
HTTP(全称为"超⽂本传输协议")是⼀种应用非常广泛的应用层协议.

HTTP协议诞生于1991年,已经发展成当今最主流的网络协议之一:

http协议是一问一答的模式:客户端发送一个请求,服务器就返回一个响应(请求与响应一一对应)
HTTP往往是基于传输层的TCP协议实现的.(HTTP1.0,HTTP1.1,HTTP2.0均为TCP,HTTP3基于 UDP实现)
目前我们主要使⽤的还是HTTP1.1和HTTP2.0.当前课堂上讨论的HTTP以1.1版本为主.
我们平时打开⼀个网站,就是通过HTTP协议来传输数据的.

当我们在浏览器中输⼊⼀个搜狗搜索的"⽹址"(URL)时,浏览器就给搜狗的服务器发送了⼀个HTTP 请求,搜狗的服务器返回了⼀个HTTP响应.
这个响应结果被浏览器解析之后,就展示成我们看到的页面内容.(这个过程中浏览器可能会给服务器发 送多个HTTP请求,服务器会对应返回多个响应,这些响应⾥就包含了页面HTML,CSS,JavaScript,图片,字体等信息)
所谓"超文本"的含义,就是传输的内容不仅仅是⽂本(比如html,css这个就是文本),还可以是⼀些其他的资源,比如图片,视频,⾳频等⼆进制的数据

request:

response:

我们已经学过 [ IP+Port ]. TCP/IP ,已经知道目前数据能从客户端进程经过路径选择跨网络传送到服务器端进程
可是,仅仅把数据从A点传送到B点就完了吗?
这就好比,在淘宝上买了⼀部⼿机,卖家[客户端]把实际通过顺丰[传送+路径选择]送到买家[服务 器]手里就完了吗? 当然不是,买家还要使用这款产品,还要在使用之后,给卖家打分评论。
所以,我们把数据从A端传送到B端, TCP/IP 解决的是顺丰的功能,⽽两端还要对数据进⾏加⼯处理 或者使用,所以我们还需要⼀层协议,不关心通信细节,关心应用细节!
这层协议叫做应用层协议。而应用是有不同的场景的,所以应用层协议是有不同种类的,其中经典协 议之⼀的HTTP就是其中的佼佼者
再回到我们刚刚说的买⼿机的例⼦,顺丰相当于 TCP/IP 的功能,那么买回来的⼿机都附带了说明 书【产品介绍,使⽤介绍,注意事项等】,⽽该说明书指导⽤⼾该如何使⽤⼿机【虽然我们都不看, 但是父母辈有部分是有看说明书的习惯的:)】,此时的说明书可以理解为⽤⼾层协议
当我们在浏览器中输⼊⼀个"网址",此时浏览器就会给对应的服务器发送⼀个HTTP请求.对⽅服务器 收到这个请求之后,经过计算处理,就会返回⼀个HTTP响应

事实上,当我们访问⼀个网址的时候,可能涉及不止⼀次的HTTP请求/响应的交互过程. 可以通过chrome的开发者⼯具观察到这个详细的过程.
通过F12打开chrome的开发者工具,切换到Network标签页.然后刷新页面即可看到如下图效果.每 ⼀条记录都是⼀次HTTP请求/响应


注意:当前搜狗主页是通过https来进行通信的.https是在http基础之上做了⼀个加密解密的⼯作, 后⾯再介绍.
HTTP是⼀个文本格式的协议.可以通过Chrome开发者⼯具或者Fiddler抓包,分析HTTP请求/响应 的细节.
以Fiddler为例.(下载地址:https://www.telerik.com/fiddler/) 安装过程比较简单,⼀路next即可

• 左侧窗⼝显示了所有的HTTP请求/响应,可以选中某个请求查看详情.
• 右侧上方显示了HTTP请求的报⽂内容.(切换到Raw标签页可以看到详细的数据格式)
• 右侧下方显示了HTTP响应的报⽂内容.(切换到Raw标签页可以看到详细的数据格式)
• 请求和响应的详细数据,可以通过右下角的 View in Notepad 通过记事本打开. 可以使⽤ctrl+a全选左侧的抓包结果,delete键清除所有被选中的结果
Fiddler 相当于⼀个"代理".
浏览器访问 sogou.com 时,就会把HTTP请求先发给Fiddler,Fiddler再把请求转发给sogou的服务 器.当sogou服务器返回数据时,Fiddler拿到返回数据,再把数据交给浏览器.
因此Fiddler对于浏览器和sogou服务器之间交互的数据细节,都是非常清楚的

客户端代理:正向代理
服务器代理:反向代理
我下载的使classic版 ,使免费版
注意:梯子本质上也是代理,可能就会和抓包工具冲突,后续使用抓包的时候,一定要关闭梯子/梯子类的游览器插件......

第一步:

第二步:

第三步:都勾选上

第四步:如果弹出一个对话框,切记一定要点yes,允许他的根证书,否则恭喜你,可以重装了

fiddler抓包 http

我们要找到http 蓝色的,看他的体量,就说明这个是一个有用的数据

点击内容,里面的内容有可能是压缩过的,为了省带宽

看不清可以点击这个,从记事本里面打开观看
以下是⼀个HTTP请求/响应的抓包结果. HTTP请求

HTTP响应

首行:[版本号]+[状态码]+[状态码解释]
协议格式总结

思考问题:
为什么HTTP报文中要存在"空行"?
因为HTTP协议并没有规定报头部分的键值对有多少个.空行就相当于是"报头的结束标记",或者是 "报头和正文之间的分隔符". HTTP在传输层依赖TCP协议,TCP是⾯向字节流的.如果没有这个空行,就会出现"粘包问题"