IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 一个HTTP请求的一生 -> 正文阅读

[网络协议]一个HTTP请求的一生

目录

HTTP简介

HTTP传输流程

一、地址解析? ??? ? ? ? ??

域名解析:

二、封装HTTP数据包

三、封装TCP包

四、浏览器与服务建立连接

TCP/IP的三次握手

五、发起HTTP请求

? HTTP请求报文结构:

六、服务器响应

服务器反向代理

内部服务器

HTTP响应报文结构:

七、服务器关闭TCP连接

TCP四次挥手

八、浏览器解析报文,渲染页面


以从浏览器请求服务器再到返回响应,一个HTTP请求这短暂的一生都都经历了什么呢?

HTTP简介

????????HTTP协议是一种在两点之间的一种超文本(视频、音频、图片文字)传输的约定和规范。HTTP协议是基于TCP/IP协议来传输数据的,IP协议实现寻址和路由,TCP协议实现可靠数据传输,DNS协议实现域名查找,SSL/TLS协议实现安全通信从浏览器请求开始,到服务器响应返回数据。

? ? ? ? HTTP遵循请求(Request)/应答(Response)模型,客户端向服务器发送请求,服务器处理请求并返回应答。

??

HTTP传输流程

一、地址解析? ??? ? ? ? ??

????????浏览器根据URL中进行解析,解析出协议名、主机名、端口、对象路径。

域名解析:

???????通过DNS解析域名查询IP地址。DNS协议从操作系统、本地DNS、根DNS、顶级DNS、权威DNS逐步往上解析域名,解析的流程中一般都有缓存,不用每次都从最顶端查找。

二、封装HTTP数据包

? ? ? ? 客户端将解析协议名、主机名、端口、对象路径并结合本机自身的信息封装成一个HTTP包。

三、封装TCP包

? ? ? ? 客户端将HTTP请求数据包进一步封装成TCP数据包。

????????

四、浏览器与服务建立连接

TCP/IP的三次握手

? ? ? ? 整个流程总第概括为:请求->应答->应答之应答

? ? ? ? 一开始,客户端和服务端都处于CLOSED状态。先是服务端主动监听某个端口,处于LISTEN状态。

? ? ? ? 第一次握手:客户端主动发起连接SYN,进入SYN_SENT状态。并给服务器发送SYN报文,请求与服务器建立连接。客户端发送网络包,服务端收到了,服务端就知道客户端的发送能力、服务端的接受能力正常。

? ? ? ? 第二次握手:服务端收到SYN报文后,返回SYN并ACK客户端的SYN,进入SYN_RCVD状态。用来通知客户端服务器已经收到SYN消息并通过确认。服务端发送网络包,客户端收到了,客户端就知道服务端的接受、发送能力,客户端的接收发送能力正常,但是,服务器还不能确认客户端的接受能力是否正常。

? ? ? ? 第三次握手:客户端给服务端发送的SYN和ACK后,发送ACK的ACK,之后处于ESTABLISHED状态。服务端收到ACK的ACK后,之后也处于ESTABLISHED状态。客户端发送网络包,服务器端到了,服务端得出结论,客户端的接收、发送能力正常,服务端自己的发送、接收能力也正常。

五、发起HTTP请求

????????客户端向服务器发送报文。

? HTTP请求报文结构:

? ? ? ? 一个请求行(request line)、请求头部(header)、空行、请求数据

?

六、服务器响应

????????实际上,在浏览器和处理请求的服务器之间有更多的计算器:路由器、调制解调器等。由于Web的分层设计,这些都隐藏在网络和传输层。HTTP位于应用层之上,底层大多与HTTP描述无关。

服务器反向代理

? ? ? ? ?在实际的应用中,一般都会请求到代理服务器上,再将请求转发给内部服务器,再将从内部服务器得到的结果返回到浏览器。

? ? ? ? 代理的功能:缓存、过滤、负载均衡、身份验证、日志记录。? ? ? ?

????????

内部服务器

? ? ? ? 服务器上运行着多个进程,请求是如何到达Web服务器的呢?

????????Web服务器会占用网络端口并监听这些端口,有个进程能监听多个端口,但一个端口不能被多个进程使用。

? ? ? ? Web服务器一直监听传入的请求并响应,根据对应的端口找到到正确的进程的。

?????????HTTP默认的端口是80,HTTPS是443。? ??

HTTP响应报文结构:

? ? ? ? ?状态行、响应头部、响应正文

????????

?

????????

七、服务器关闭TCP连接

TCP四次挥手

? ? ? ? TCP断开连接既可以是由客户端发起的,又可以是服务端发起的。

? ? ? ? 第一次挥手、客户端应用进程调用断开连接的请求,向服务器端发送FIN,进入FIN-WAIT-1的状态。表示在客户端关闭链路前要发送的数据已经发送完毕,可以开始关闭链路操作,并请求服务器端确认关闭客户端到服务器的链路操作。

? ? ? ? 第二次挥手、服务器收到这个FIN消息后,返回ACK的消息给客户端,表示收到客户端断开链路的请求了。这是,TCP服务端进程通知高层应用进程释放客户端到服务器的链路,服务器处于CLOSED-WAIT状态,即半关闭状态。客户端在收到消息后处于FIN-WAIT-2状态。

? ? ? ? 第三次挥手、服务器在关闭链路前将需要发送给客户端的消息发送给客户端,等数据发送完后,发送FIN给客户端,表示关闭链路前服务器要发给客户端的消息已经发送完了,请求客户端确认关闭从服务器到客户端的链路操作。此时服务器处于LAST-ACK状态,等待客户端最终断开链路。

? ? ? ? 第四次挥手、客户端收到服务器发的FIN后,发回ACK确认,表示收到了服务器发送的断开链接请求,并准备断开服务器端到客户端的链接。此时,客户端处于TIM-WAIT状态,TCP连接还没释放,经过等待计时器(2MSL)设置的超时时间后,客户端进入CLOSE。

????????

八、浏览器解析报文,渲染页面

参考文章:

An overview of HTTP - HTTP | MDN

https://betterprogramming.pub/understand-the-flow-of-a-http-request-1a268ec193f0

第11讲 | TCP协议(上):因性恶而复杂,先恶后善反轻松-极客时间

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:25:55  更:2022-04-06 16:27:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:27:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码