【Java EE】网络协议——HTTP协议

目录

1.HTTP

1.1HTTP是什么

1.2理解“应用层协议”

1.3理解HTTP协议的工作过程

2.HTTP协议格式

2.1抓包工具的使用

2.2抓包工具的原理

2.3抓包结果

3.协议格式总结


1.HTTP

1.1HTTP是什么

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

HTTP往往是基于传输层的TCP协议实现的。(HTTP1.0,HTTP1.1,HTTP2.0均为TCP,HTTP3基于UDP实现)

目前我们使用的还是HTTP1.1和HTTP2.0。

当我们在浏览器中输入一个搜狗搜索的“网址”(URL)时,浏览器就给搜狗的服务器发送了一个HTTP请求,搜狗的服务器返回了一个HTTP响应。

这个响应结果被浏览器解析之后,就展示成我们看到的页面内容。(这个过程中浏览器可能会给服务器发送多个HTTP请求,服务器会对应返回多个响应,这些响应里就包含了页面HTML,CSS,JavaScript,图片,字体等信息)。

所谓“超文本”的含义,就是传输的内容不仅仅是文本(比如html,css这个就是文本),还可以是一些其他的资源,比如图片,视频,音频等二进制的数据。

1.2理解“应用层协议”

我们已经学过TCP/IP,已经知道目前数据能从客户端进程经过路径选择跨网络传送到服务器进程(IP+Port)

所以,我们把数据从A端传送到B端,TCP/IP解决的是顺丰的功能,而两端还要对数据进行加工处或使用,所以我们还需要一层协议,不关心通信细节,关心应用细节!

这层协议叫做应用层协议。而应用是有不同的场景的,所以应用层协议是不同的种类的,其中经典协议之一的HTTP就是其中的佼佼者。

1.3理解HTTP协议的工作过程

当我们在浏览器中输入一个“网址”,此时浏览器就会给对应的服务器发送一个HTTP请求,对方服务器收到这个请求之后,经过计算处理,就会返回一个HTTP响应。

事实上,当我们访问一个网站的时候,可能涉及不止一次的HTTP请求/响应的交互过程。

可以通过Chrome的开发者工具观察到这个详细的过程。

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

注意:当前搜狗主页是通过HTTPS来进行通信的。https是在http基础之上做了一个加密解密的工作

2.HTTP协议格式

HTTP是一个文本格式的协议,可以通过Chrome开发者工具或者FIddler抓包,分析HTTP请求/响应的细节。

2.1抓包工具的使用

以Fiddler为例(下载地址:https://www.telerik.com/fiddler/)

安装过程比较简单,一路next即可。

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

可以使用ctrl+a全选左侧的抓包结果,delete键清楚所有被选中的结果。

2.2抓包工具的原理

Fiddler相当于一个“代理”

浏览器访问sougou.com时,就会把HTTP请求发给Fiddler,Fiddler再把请求转发给sogou的服务器,当sogou服务器返回数据时,Fiddler拿到返回数据,再把数据交给浏览器。

因此,Fiddler对于浏览器和sogou服务器之间交互的数据细节,都是非常清楚的。

2.3抓包结果

以下是一个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中。

3.协议格式总结

思考问题:为什么HTTP报文中要存在“空行”?

因为HTTP协议并没有规定报头部分的键值对有多少个,空行就相当于是“报头的结束标记”,或者是“报头和正文之间的分隔符”。

HTTP在传输层依赖TCP协议,TCP是面向字节流的。如果没有这个空行,就会出现“粘包问题”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/841169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用GitHubAction来发布自己的Python软件包

我们开发的python软件包如果想发布到网上,可以让其他人通过pip install下载,一般是把软件包发布到PYPI平台。 PYPI准备 我们要现在pypi注册登录一下 文件组织架构 一般的python软件包的文件组织架构为包名文件夹__init__.py程序,包文件夹的…

Django与前端框架协作开发实战:高效构建现代Web应用

title: Django与前端框架协作开发实战:高效构建现代Web应用 date: 2024/5/22 20:07:47 updated: 2024/5/22 20:07:47 categories: 后端开发 tags: DjangoREST前端框架SSR渲染SPA路由SEO优化组件库集成状态管理 第1章:简介 1.1 Django简介 Django是一…

论文阅读--ActionCLIP

原来的动作识别问题在于标注太难太贵,将动作表示为短语的latent space太大 本文的贡献:(1)将CLIP的image encoder换成video encoder,方法与CLIP4Clip几乎一样 (2)CLIP的ground truth来自于文本…

urllib_post请求_百度翻译之详细翻译

百度翻译有一个详细翻译的接口: post请求: 请求参数(较多): 打印之后,发现有问题: 改一下请求头: 将Accept-Encoding注释掉,因为我们使用的是utf-8编码: 加上…

F28034中断

DSP中断 中断中断概述中断机制 中断 当CPU正在执行程序时,由于发生了某种随机的事件(外部或内部),使CPU的执行中断,转而去执行某一段特殊的程序(中断子程序或中断处理程序),以处理该…

轻型web服务器搭建 阿里云

1.购买云服务器 2.远程连接云服务器 重置实例密码 重置后要重启服务器 登录云服务器 密码就是刚刚重置的 3.安装宝塔面板 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 (bt.cn) 回车则开始安装,过程中会多次让输入y表示确认下一步,过程大概2…

windows使用gzip和bzip2对文件进行压缩

git软件 git bash:下载地址https://git-scm.com/downloads,安装时一路next。 这个软件是给程序员提交代码用的工具,内置linux系统的命令行,可以使用linux系统特有的压缩软件gzip和bzip2. gzip使用 gzip一般用于压缩tar包&#…

基于机器学习的一线城市租房价格预测分析与实现,实现三种算法预测

本文旨在基于机器学习方法,对一线城市租房价格进行预测分析,并使用Matplotlib可视化、随机森林、一元线性回归和多元线性模型进行模型对比。通过爬取北京链家二手房数据作为研究对象,探讨了租房价格与各种因素之间的关系,阐述了研…

【YOLOv10训练教程】如何使用YOLOv10训练自己的数据集并且推理使用

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

【气象常用】间断时间序列图

效果图: 主要步骤: 1. 数据准备:随机数组 2. 图像绘制:绘制间断的时间序列 详细代码:着急的直接拖到最后有完整代码 步骤一:导入库包及图片存储路径并设置中文字体为宋体,西文为新罗马&…

冷干机使用中的注意事项

冷干机使用中的注意事项 使用冷干机时,以下是几个注意事项: 安装位置:选择一个通风良好、温度适宜的位置安装冷干机。确保周围环境没有过多的灰尘、腐蚀性气体或其他污染物,以免对冷干机的正常运行和寿命产生不利影响。 电源要求…

C++ STL 函数对象:隐藏的陷阱,如何避免状态带来的麻烦?

STL 函数对象:无状态即无压力 一、简介二、函数对象三、避免在函数对象中保存状态3.1、函数对象3.2、lambda 表达式 四、选择合适的更高层次的结构五、总结 一、简介 在使用 C 标准模板库 (STL) 时,函数对象 (Function Object) 是一种强大的工具&#x…

02324 自学考试 离散数学屈婉玲教材 目录

02324 自学考试 离散数学屈婉玲教材 目录 02324 自学考试 离散数学屈婉玲教材 02324离散数学全程班历年真题资料

技术面试,项目实战,求职利器

之前找工作一直想找一个能真正系统性学开发的地方,之前毕业找工作的时候无意间碰到下面这个网站,感觉还挺不错的,用上面的技术实战内容应对技术面试,也算是求职利器了。有需要的可以自取: https://how2j.cn?p156336 实…

VMware虚拟机中ubuntu使用记录(10)—— 如何在Ubuntu18.04中使用自己的单目摄像头运行ORB_SLAM3(亲测有效,踩坑记录)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ORB_SLAM3源码编译二、ORB_SLAM3实时单目相机测试1. 查看摄像头的话题2. 运行测试 三. 运行测试可能的报错1. 报错一(1) 问题描述(2) 原因分析(3) 解决 2. …

SWM320系列应用

一、Swm320系列 SPI 应用 现象:应用SWM320的SPI1的模式0作为从机,整体产品硬件平台同步上电,从机的SPI无法正常工作,进不了中断,手工复位一次或连接SWD调试就正常了,这样的情况应该怎么解决?其…

Windows远程连接命令?

Windows操作系统提供了多种远程连接命令,使用户可以通过网络连接到远程计算机,并在远程操作系统上执行操作。远程连接命令可方便实现远程工作、故障排查和系统维护等任务。本文将介绍几种常见的Windows远程连接命令及其基本使用方法。 远程连接命令 Win…

C语言 | Leetcode C语言题解之第112题路径总和

题目: 题解: bool hasPathSum(struct TreeNode *root, int sum) {if (root NULL) {return false;}if (root->left NULL && root->right NULL) {return sum root->val;}return hasPathSum(root->left, sum - root->val) ||ha…

从0开始带你成为Kafka消息中间件高手---第二讲

从0开始带你成为Kafka消息中间件高手—第二讲 那么在消费数据的时候,需要从磁盘文件里读取数据后通过网络发送出去,这个时候怎么提升性能呢? 首先就是利用了page cache技术,之前说过,kafka写入数据到磁盘文件的时候&…