网络原理 - HTTP/HTTPS(1)

HTTP

HTTP是什么

HTTP("全程超文本协议")是一种应用非常广泛的应用层协议.

文本:字符串(能在utf8/gbk)码表上找到合法字符.

超文本:不仅是字符串,还能携带图片啥的(HTML).

富文本:类似于word文档这种.

HTTP诞生于1991年.目前已经发展为最主流使用的一种应用层协议.

 

实际上HTTP/1.1是目前使用最广泛的HTTP协议版本,之后的讨论也以HTTP1.1为主.

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

我们平时打开一个网站,就是通过HTTP协议来传输数据的.

当我们在浏览器中输入一个搜狗搜索的"网址"(URL)时,浏览器就给搜狗的服务器发送了一个HTTP请求,搜狗的服务器返回了一个HTTP响应.(浏览器和服务器之间传输数据)

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

理解"应用层协议"

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

可是,仅仅把数据从A点传送到B点就完了吗?

 这就好比,在淘宝上买了一部手机,卖家[客户端]把手机通过顺丰[传送 + 路径选择]送到买家[服务器]手里就完了吗?

不是的,买家还要使用这款产品,使用完之后也可能要给卖家打分评论.

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

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

理解HTTP协议的工作过程

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

 

 但是,在类似于消息推送等场景时,需要服务器主动给浏览器发送消息,这里HTTP就难以胜任了.

应用层这里还提供了一个和HTTP搭配的协议,websocket(HTTP的跟班,针对HTTP能力进行补充的).

HTTP协议格式

HTTP是一个文本格式的协议.通过抓包工具进行抓包,分析HTTP请求/响应的细节.

抓包工具的使用

以Fidder为例.(下载:https://www.telerik.com/fiddler/)

如果安装配置ok,fiddler就能抓到很多数据包,打开一个网站,其实浏览器和服务器之间的HTTP交互不是只有一次,而是多次.经过反复拉扯,才能页面获取.

左侧窗口显示了所有HTTP请求/响应,可以选中查看详细.

右侧上方显示了HTTP的报文内容.(切换到Raw标签页可以查看详细的数据格式)

右侧下方显示了HTTP的报文内容.(切换到Raw标签页可以查看详细的数据格式)

请求和响应的详细数据,可以通过右下角的View in Notepad通过记事本打开.

可以使用ctrl+a全选左侧的抓包结果,delete键删除所有的被选中结果.

抓包工具的原理

对了,在使用fiddler之前,还需要关闭电脑上其它的代理程序.因为Fiddler也是个代理程序,可能会与其它的程序出现冲突.

代理分成两种: 1.正向代理(是客户端的代言人)  2.反向代理(是服务器的代言人)

代理就可以简单理解为跑腿小弟.你想买罐冰可乐,又不想下楼去超市,那么就可以把钱给你的跑腿小弟(正向代理),跑腿小弟来到超市把钱给超市老板(老板也可能不想看店,让儿子看店(反向代理)),再把冰可乐拿回来交到你的手上.这个过程中,这个跑腿小弟对于"你"和"超市老板"的交易细节,是非常清楚的. 

抓包结果

HTTP请求:

 

首行:[方法] + [url] + [版本]

Header:请求的属性,冒号分割的键值对;每组属性之间用\n分隔;  遇到空行表示Header部分结束

Body(http载荷部分):空行后面的内容都是Body.Body允许为空字符串.如果Body存在,则在Header中会有一个Content-Length来标识Body的长度;(有的http请求有body,有的没有

HTTP响应:

 

 首行:[版本号] + [状态码] + [状态码解释](请求成功/失败)

Header:请求的属性,冒号分隔的键值对;每组属性之间使用\n分隔;遇到空行表示Header结束

Body:空行后面的内容都是body.Body允许为空字符串.如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度;如果服务器返回了一个html页面,那么html页面内容就是在body中.

协议格式总结

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

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

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

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

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

相关文章

如何使用python 挑战将ai生成的概念图制作成2d游戏

要使用Python将AI生成的概念图制作成2D游戏,你可以遵循以下步骤: 生成概念图: 使用AI图像生成工具(如DALL-E、DeepArt等)来创建你的游戏概念图。保存生成的图像文件,通常为PNG或JPEG格式。 选择游戏引擎&a…

防火墙 iptables(二)-------------SNAT与DNAT

一、SNAT ①SNAT 应用环境: 局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由) ②SNAT原理: 源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映射 数据包从内网发送到公网时,SNAT会把数据包的源IP由…

【Java EE初阶十九】网络原理(四)

4. 数据链路层 数据链路层也有很多种协议,其中一个比较常见常用的,就是“以太网协议”(通过网线/光纤, 来通信所使用的协议叫做以太网协议,以太网是横跨数据链路层 物理层); 4.1 以太网数据帧格式 帧头 载荷(IP 数据…

从一到无穷大 #24 LogReducer:讨论日志中热点的影响,识别及在线解决方法

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言LogReducer系统性分析日志影响,原因在线日志缩减框架 反省总结 引言 …

提升起重机效率与降低维修成本:PreMaint预测性维护系统的应用

随着科技的不断发展,人工智能技术在各行各业都展现出了强大的应用潜力。在港口起重机设备的维护管理中,预测性维护系统是一项革命性的技术,为提升设备效率、降低维修成本提供了全新的解决方案。本文将深入探讨起重机预测性维护系统的原理、应…

nvm的相关属性以及用法

一、安装nvm的原因 nvm是一个命令行工具,用于管理和切换到不同版本的 Node.js。 二、安装nvm(node 版本管理工具) 1、注意: Windows 不支持 NVM,因为 NVM 仅在 Linux 和 Mac 上受支持。你将在 Windows 机器上使用的…

中小品牌项目管理软件排行榜:发现行业新秀与潜力股

使用项目管理软件可以帮助企业提高工作效率,降低成本,提升竞争力。在项目管理软件中,不仅有大品牌如Zoho Projects、Microsoft Project、Jira等,还有一些小品牌的软件也备受关注。本文就为大家介绍在项目管理软件排行榜中小品牌榜…

09_Java集合

一、Java集合框架概述 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态…

如何在Linux系统中配置并优化硬盘的RAID

在Linux系统中配置和优化硬盘的RAID技术可以帮助提高数据存储性能和安全性。RAID(Redundant Array of Independent Disks)技术通过将多个硬盘组合起来,以增加性能、容量或冗余度,提高数据的可靠性和可用性。本文将介绍如何在Linux…

6.s081 学习实验记录(十)file system

文章目录 一、Large files简介提示实验代码实验结果 二、Symbolic links简介提示实验代码实验结果 首先切换到 fs 分支 $ git fetch$ git checkout fs$ make clean 一、Large files 简介 该实验需要我们增大xv6文件的最大大小,目前xv6的最大文件大小为 268个块&…

WordPress主题YIA在广告位添加图片广告时下方有空白怎么办?

YIA主题设置中默认有4个广告位,而侧边栏的广告位由站长自行添加。boke112百科在这些广告位添加图片广告后发现图片下方有空白,导致下方的两个角没有变圆角,看起来也有点不好看。具体如下图所示: 其实,这个问题就是典型…

挑战杯 地铁大数据客流分析系统 设计与实现

文章目录 1 前言1.1 实现目的 2 数据集2.2 数据集概况2.3 数据字段 3 实现效果3.1 地铁数据整体概况3.2 平均指标3.3 地铁2018年9月开通运营的线路3.4 客流量相关统计3.4.1 线路客流量排行3.4.2 站点客流量排行3.4.3 入站客流排行3.4.4 整体客流随时间变化趋势3.4.5 不同线路客…

跟着pink老师前端入门教程(JavaScript)-day01

一、计算机编程基础 (一)编程语言 1、编程 编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。 计算机程序:就是计算机所执行的一系列的指令集合,而程序全部…

嵌入式学习 C++ Day5、6

嵌入式学习 C Day5、6 一、思维导图 二、作业 1.以下是一个简单的比喻,将多态概念与生活中的实际情况相联系: 比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴…

UVa1359/LA3491 Hills

题目链接 本题是2005年ICPC亚洲区域赛杭州欧赛区的H题 题意 平面上有 n(n≤500)条线段,其中每条线段的端点都不会在其他线段上。你的任务是数一数有多少个“没有被其他线段切到”的三角形(即小山)。如下图所示&#x…

【Vitis】Vitis性能优化的开源库

Vitis HLS简介 Vitis™HLS是一种高层次综合工具,支持将C、C和OpenCL™函数硬连线到器件逻辑互连结构和RAM/DSP块上。 Vitis HLS可在Vitis应用加速开发流程中实现硬件内核,并使用C/C语言代码在VivadoDesign Suite中为赛灵思器件设计开发RTL IP。 【Vitis…

不坑盒子 助力高效办公的Office插件

不坑盒子简介 很多朋友在工作过程中需要对Word文档进行编辑处理,如果想让Word排版更有效率可以试试小编带来的这款不坑盒子软件,是一个非常好用的办公工具,拥有近百项功能的Word,wps插件,支持Office 2010以上的版本&a…

【plt.bar绘制条形图or柱状图】:从入门到精通,只需一篇文章!【Matplotlib可视化】

【📊plt.bar绘制条形图】:从入门到精通,只需一篇文章!【Matplotlib】 利用Matplotlib进行数据可视化示例 🌵文章目录🌵 🔍 一、初识plt.bar:条形图的基本概念💡 二、plt.…

Maven - Plugins报错的正确解决之道

背景: 正确解决之道: 在自己本地Maven的安装目录中找到自己的仓库地址目录:直接搜索自己报错的插件文件,把它们删除,如图: 接着回到IDEA点击Maven刷新按钮重新加载即可:已解决 反例&#xff1…

【机构vip教程】Appium自动化(2):Python+Appium环境搭建

windows下搭建pythonappium环境 搭建过程步骤如下: 1、安装jdk并配置好环境变量(jdk版本1.8以上) 2、安装android-sdk并配置好环境变量;具体步骤见:https://www.cnblogs.com/YouJeffrey/p/15243705.html 3、安装安…