首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java 的EE -- 网络编程 HTTP协议格式

Java 的EE -- 网络编程 HTTP协议格式

作者头像
Han.miracle
发布2025-12-23 09:54:44
发布2025-12-23 09:54:44
1570
举报

应用层

实现一个具体的程序,写代码之前,一定是要约定好应用层的协议格式

应用层这里,除了自定义协议之外,也有些大佬们现成搞好的协议了

FTP 文件传输协议

SSH远程操作主机

telnet 网络调试工具

...........

HTTP协议[重点]

HTTP

当前web 开发的最核心的协议使用网站, 都会用到http~ ~Spring ,围着 http 转~~

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响应

事实上,当我们访问⼀个网址的时候,可能涉及不止⼀次的HTTP请求/响应的交互过程. 可以通过chrome的开发者⼯具观察到这个详细的过程.

通过F12打开chrome的开发者工具,切换到Network标签页.然后刷新页面即可看到如下图效果.每 ⼀条记录都是⼀次HTTP请求/响应

注意:当前搜狗主页是通过https来进行通信的.https是在http基础之上做了⼀个加密解密的⼯作, 后⾯再介绍.

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服务器之间交互的数据细节,都是非常清楚的

客户端代理:正向代理

服务器代理:反向代理

Wireshark
  • 功能强大:支持捕获和分析多种网络协议,包括 HTTP、TCP、UDP、IP、以太网帧等。
  • 使用门槛高:需要一定的网络知识,界面和过滤语法相对复杂。
  • 适用场景:适用于底层网络协议分析、网络故障排查、安全分析等。

Fiddler
  • 专注 HTTP/HTTPS:主要用于 Web 开发和调试,支持 HTTP/HTTPS 请求和响应的查看与修改。
  • 使用简单:界面友好,上手快,适合前端开发和接口调试。
  • 适用场景:Web 开发、API 调试、性能分析、安全测试(如抓取手机 App 的 HTTP 流量)。

我下载的使classic版 ,使免费版

注意:梯子本质上也是代理,可能就会和抓包工具冲突,后续使用抓包的时候,一定要关闭梯子/梯子类的游览器插件......

配置Fiddler

第一步:

第二步:

第三步:都勾选上

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

fiddler使用教程:

fiddler抓包 http

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

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

看不清可以点击这个,从记事本里面打开观看

抓包结果

以下是⼀个HTTP请求/响应的抓包结果. HTTP请求

  • 首行:[方法]+[url]+[版本]
  • Header:请求的属性,冒号分割的键值对; 每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body:空⾏后⾯的内容都是Body.Body允许为空字符串.如果Body存在,则在Header中会有⼀个 Content-Length属性来标识Body的⻓度

HTTP响应

首行:[版本号]+[状态码]+[状态码解释]

  • Header:请求的属性,冒号分割的键值对;每组属性之间使⽤\n分隔;遇到空⾏表⽰Header部分结束
  • Body:空行后⾯的内容都是Body.Body允许为空字符串.如果Body存在,则在Header中会有⼀个 Content-Length属性来标识Body的长度;如果服务器返回了⼀个html页面,那么html页面内容就是在body中

协议格式总结

思考问题:

为什么HTTP报文中要存在"空行"?

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 应用层
  • HTTP
    • HTTP是什么
    • 理解"应用层协议"
    • 理解HTTP协议的工作过程
    • HTTP协议格式
      • 抓包工具的使用
      • 抓包工具的原理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档