[ 网络协议篇 ] 一篇文章让你掌握什么是 HTTP ?(上)

简介: HTTP 和 HTTPS 是老生常谈的问题,无论是在校学习还是找工作,老师和面试官几乎都会问道HTTP 是什么?HTTPS 是什么?他们有什么区别 ? 其实学好 HTTP 和 HTTPS 是很重要的,有利于我们后续的学习和参加工作。相信平时上网的时候也很少有人关注这个问题,只是知道计算机网络里 HTTP 的概念。其实这一块的知识延伸很广,还需要了解加密算法和 SSL 协议。未来几篇文章我们就来聊一聊这几个问题,相信仔细看完,会有很大收获。

🍬 博主介绍


👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~

✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】

🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋

🎉欢迎关注💗一起学习👍一起讨论⭐一起进步📝文末有彩蛋

🙏作者水平有限,欢迎各位大佬指点,相互学习进步!


一、什么是 HTTP



超文本传输协议(Hyper Text Transfer ProtocolHTTP)是一个简单的请求-响应协议,它通常运行在 TCP 之上。


它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。


请求和响应消息的头以 ASCll 形式给出;而消息内容则具有一个类似 MIME 的格式。

这个简单模型是早期 web成功的有功之臣,因为它使开发和部署非常地直截了当。


HTTP 协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。


HTTP 是一个基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

HTTP 协议是基于 TCP 的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。


默认端口是80http 是基于请求与响应模式的、无状态的、应用层的协议。


二、HTTP 的发展阶段



1. HTTP 0.9 版本

0.9 协议是适用于各种数据信息的简洁快速协议,但是远不能满足日益发展的各种应用的需要。

0.9 协议就是一个交换信息的无序协议,仅仅限于文字。

由于无法进行内容的协商,在双发的握手和协议中,并有规定双发的内容是什么,也就是图片是无法显示和处理的。


2. HTTP 1.0 版本

到了 1.0 协议阶段,也就是在1982年,Tim Berners-Lee 提出了 HTTP/1.0

在此后的不断丰富和发展中,HTTP/1.0成为最重要的面向事务的应用层协议。

该协议对每一次请求/响应建立并拆除一次连接。

其特点是简单、易于管理,所以它符合了大家的需要,得到了广泛的应用。


3. HTTP 1.1 版本

1.0 协议中,双方规定了连接方式和连接类型,这已经极大扩展了 HTTP 的领域,但对于互联网最重要的速度和效率,并没有太多的考虑。

毕竟,作为协议的制定者,当时也没有想到 HTTP 会有那么快的普及速度。

关于 HTTP1.1 协议的具体内容可以参考RFC 2616


4. HTTP 2.0 版本

HTTP 2.0 的前身是 HTTP 1.0 HTTP 1.1

虽然之前仅仅只有两个版本,但这两个版本所包含的协议规范之庞大,足以让任何一个有经验的工程师为之头疼。


网络协议新版本并不会马上取代旧版本。

实际上,HTTP 1.0 HTTP 1.1 在之后很长的一段时间内一直并存,这是由于网络基础设施更新缓慢所决定的。

关于HTTP2.0协议的具体内容可以参考RFC 7540


三、HTTP 工作原理



1. 理论准备:

HTTP是基于 B/S 架构进行通信的,且面向连接的。

HTTP 的服务器端实现程序有 httpdnginx Apache服务器,IIS 服务器等。

其客户端的实现程序主要是 Web 浏览器,例如:FirefoxInternet ExplorerGoogle ChromeSafariOpera等。


客户端的命令行工具还有elinkCURL等。

Web服务是基于TCP的,因此为了能够随时响应客户端的请求,Web服务器需要监听在80/TCP端口。这样客户端浏览器和Web服务器之间就可以通过HTTP进行通信了。


2. 原理概述:

浏览器作为HTTP客户端通过URLHTTP服务端即WEB服务器发送所有请求。

Web服务器根据接收到的请求后,向客户端发送响应信息。


1.  客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过 TCP 来完成的,一般 TCP 连接的端口号是80

2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(url)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容。

3.  服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。


3. 典型的HTTP事务处理有如下的过程:

1. 客户与服务器建立连接;(TCP三次握手

2. 客户向服务器提出请求;

3. 服务器接受请求,并根据请求返回相应的文件作为应答;

4. 客户与服务器关闭连接。


四、HTTP 特性



1. HTTP是一种无连接协议,即一次性连接。

无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。


这种一次性连接主要考虑到WWW 服务器面向的是 Internet 中成千上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。


2. HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。

无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

这就大大减轻了服务器记忆负担,从而保持较快的响应速度。


HTTP是一种面向对象的协议,允许传送任意类型的数据对象。

它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。当用户在一个 HTML 文档中定义了一个超文本链后,浏览器将通过 TCP/IP协议 与指定的服务器建立连接。


3. HTTP媒体独立的

这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。


4. HTTP 支持持久连接

HTTP / 0.9 HTTP 1.0 中,连接在单个请求/响应对之后关闭。

HTTP / 1.1 中,引入了保持活动机制,其中连接可以重用于多个请求。

这样的持久性连接可以明显减少请求延迟,因为在发送第一个请求之后,客户端不需要重新协商 TCP 三次握手连接。

另一个积极的副作用是,通常,由于TCP的缓慢启动机制,连接随着时间的推移而变得更快。

相关文章
|
3月前
|
安全 网络协议 Linux
家庭实验室系列文章 - 电脑如何配置网络唤醒 (WOL)?
家庭实验室系列文章 - 电脑如何配置网络唤醒 (WOL)?
|
2月前
|
运维 安全 网络安全
带你读《网络安全等级保护2.0定级测评实施与运维》精品文章合集
带你读《网络安全等级保护2.0定级测评实施与运维》精品文章合集
|
2月前
|
SDN 网络虚拟化 Windows
带你读《智慧光网络:关键技术、应用实践和未来演进》精品文章合集
带你读《智慧光网络:关键技术、应用实践和未来演进》精品文章合集
|
2月前
|
机器学习/深度学习 编解码 人工智能
一篇文章搞懂CNN(卷积神经网络)及其所含概念
一篇文章搞懂CNN(卷积神经网络)及其所含概念
77 0
一篇文章搞懂CNN(卷积神经网络)及其所含概念
|
3月前
|
网络协议 物联网 Linux
WireGuard 系列文章(七):使用 WireGuard 和 Netmaker 创建 Full Mesh 网络
WireGuard 系列文章(七):使用 WireGuard 和 Netmaker 创建 Full Mesh 网络
|
3月前
|
网络协议 物联网 Linux
WireGuard 系列文章(五):Netmaker 简介 - 创建和管理 WireGuard 网络的平台
WireGuard 系列文章(五):Netmaker 简介 - 创建和管理 WireGuard 网络的平台
|
3月前
|
前端开发 JavaScript 网络安全
【网络安全XSS必知 | 前端开发基础】一篇文章速学 HTML
【网络安全XSS必知 | 前端开发基础】一篇文章速学 HTML
55 0
|
3月前
|
JSON 前端开发 JavaScript
【网络安全必备 | 前端开发基础】一篇文章速学 JavaScript
【网络安全必备 | 前端开发基础】一篇文章速学 JavaScript
55 0
|
5月前
|
XML JSON Java
Android App网络通信中利用okhttp实现下拉刷新和上拉加载实战(抓取文章信息 超详细 附源码)
Android App网络通信中利用okhttp实现下拉刷新和上拉加载实战(抓取文章信息 超详细 附源码)
31 0
|
7月前
|
域名解析 网络协议 Oracle
Java的第十五篇文章——网络编程(后期再学一遍)
Java的第十五篇文章——网络编程(后期再学一遍)