🍬 博主介绍
👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
一、什么是 HTTP ?
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在 TCP 之上。
它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
请求和响应消息的头以 ASCll 形式给出;而消息内容则具有一个类似 MIME 的格式。
这个简单模型是早期 web成功的有功之臣,因为它使开发和部署非常地直截了当。
HTTP 协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP 是一个基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP 协议是基于 TCP 的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。
默认端口是80,http 是基于请求与响应模式的、无状态的、应用层的协议。
二、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 在之后很长的一段时间内一直并存,这是由于网络基础设施更新缓慢所决定的。
三、HTTP 工作原理
1. 理论准备:
HTTP是基于 B/S 架构进行通信的,且面向连接的。
HTTP 的服务器端实现程序有 httpd、nginx 、Apache服务器,IIS 服务器等。
其客户端的实现程序主要是 Web 浏览器,例如:Firefox、Internet Explorer、Google Chrome、Safari、Opera等。
客户端的命令行工具还有elink、CURL等。
Web服务是基于TCP的,因此为了能够随时响应客户端的请求,Web服务器需要监听在80/TCP端口。这样客户端浏览器和Web服务器之间就可以通过HTTP进行通信了。
2. 原理概述:
浏览器作为HTTP客户端通过URL向HTTP服务端即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的缓慢启动机制,连接随着时间的推移而变得更快。