从输入URL到页面展示发生了什么?

2023-11-14

1.查询缓存

从输入url按下回车后,我们进入了第一步就是 DNS 解析过程,首先需要找到这个 url 域名的服务器 ip,为了寻找这个 ip,浏览器首先会寻找缓存,查看缓存中是否有记录缓存的查找记录为:浏览器缓存 -> 系统缓存 -> 路由器缓存,缓存中没有则查找系统的 hosts 文件中是否有记录。

2.DNS解析

如果没有缓存则查询 DNS 服务器,得到服务器的 ip 地址后,浏览器根据这个 ip 以及相应的端口号发送连接请求;如果DNS服务器中没有解析成功,他会向上一步获得的顶级DNS服务器发送解析请求。

3.建立TCP连接(3次握手)

这个连接请求到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开)最终到达WEB程序,最终建立TCP/IP的连接(三次握手)。
在这里插入图片描述

从图片可以得到三次握手可以简化为:

  1. 服务端新建套接字,绑定地址信息后开始监听,进入LISTEN状态。客户端新建套接字绑定地址信息后调用connect,发送连接请求SYN,并进入SYN_SENT状态,等待服务器的确认。
  2. 服务端一旦监听到连接请求,就会将连接放入内核等待队列中,并向客户端发送SYN和确认报文段ACK,进入SYN_RECD状态。
  3. 客户端收到SYN+ACK报文后向服务端发送确认报文段ACK,并进入ESTABLISHED状态,开始读写数据。服务端一旦收到客户端的确认报文,就进入ESTABLISHED状态,就可以进行读写数据了。

4.客户端发起http请求

http是基于tcp的,所以只有在建立了tcp以后,客户端才能向服务器发起http请求。这个请求报文会包括这次请求的信息,主要是请求方法,请求说明和请求附带的数据,并将这个 http 请求封装在一个 tcp 包中;这个 tcp 包也就是会依次经过传输层,网络层, 数据链路层,物理层到达服务器,服务器解析这个请求来作出响应;返回相应的 html 给浏览器;

5.服务器处理请求

后端从在固定的端口接收到TCP报文开始,它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。

6.服务器响应请求

服务器收到了我们的请求,也处理我们的请求,到这一步,它会把它的处理结果返回,也就是返回一个HTPP响应。

7.浏览器解析html

在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了,浏览器是如何把页面呈现在屏幕上的呢?
浏览器在解析html文件时,会”自上而下“加载,并在加载过程中进行解析渲染。在解析过程中,如果遇到请求外部资源时,如图片、外链的CSS、iconfont等,请求过程是异步的,并不会影响html文档进行加载。
浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等),这与获取html一样,都是一个个http请求,全部获取到后,页面才算完整了,浏览器变将一个完整的页面渲染屏幕上。

8.断开TCP连接(4次挥手)

最后断开TCP连接(4次挥手):
在这里插入图片描述

  1. 客户端主动调用close时,向服务端发送结束报文段FIN报,同时进入FIN_WAIT1状态;
  2. 服务器会收到结束报文段FIN报,服务器返回确认报文段ACK并进入CLOSE_WAIT状态,此时如果服务端有数据要发送的话,客户端依然需要接收。客户端收到服务器对结束报文段的确认,就会进入到FIN_WAIT2状态,开始等待服务器的结束报文段;
  3. 服务器端数据发送完毕后,当服务器真正调用close关闭连接时,会向客户端发送结束报文段FIN包,此时服务器进入LAST_ACK状态,等待最后一个ACK的带来;
  4. 客户端收到服务器发来的结束报文段, 进入TIME_WAIT, 并发出送确认报文段ACK;服务器收到了对结束报文段确认的ACK,进入CLOSED状态,断开连接。而客户端要等待2MSL的时间,才会进入到CLOSED状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从输入URL到页面展示发生了什么? 的相关文章

随机推荐

  • T5模型简单介绍

    目录 一 概要 二 深入扩展 2 1 两个要素 2 2 预训练方法 一 概要 谷歌公司的研究人员提出的 T5 Text to Text Transfer Transformer 有5个T开头的单词 所以叫做T5 模型采用了一种与前述模型截然
  • 成功解决Python中ValueError: not enough values to unpack (expected 10, got 2)故障

    对split函数不熟悉 将1修改为10即成功 同时将文件中所有空格键替换为Tab键 个人觉得这一步没啥用 这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入
  • linux screen rz/sz 文件卡死了快速退出的方法

    项目场景 服务器上通过sz下载txt格式的数据保存于本地遇到问题 问题描述 Linux 中使用tmux screen rz sz 命令下载文件卡死 出现如下图所示情况 快速退出方法 有如下解决办法 按住Ctrl键 再按五次x键 强行终断传输
  • 深入解析Spring Boot中最常用注解的使用方式(上篇)

    摘要 本文将详细介绍Spring Boot中最常用的注解的使用方式 并通过代码示例加以说明 通过学习这些注解 读者将能够更好地理解和运用Spring Boot框架 构建高效的企业级应用 目录 第一部分 常见的控制器注解 1 RequestM
  • Springboot项目打瘦包(将依赖包放到jar包外)

    一般springboot项目我们不做任何配置的话 打包会包含很多的依赖 生成的包过大 动辄100M以上 往生产环境上传很慢 所以把所有用的jar包打到外部 这样生成的小包中只有自已开发的程序 基本可以控制在1M以内 效果甚好 首先把spri
  • How to set IE proxy using VB.NET

    Created by SharpDevelop User Ying Shen Date 2004 11 12 Time 11 16 To change this template use Tools Options Coding Edit
  • NumPy 高级索引

    NumPy 高级索引 NumPy 比一般的 Python 序列提供更多的索引方式 除了之前看到的用整数和切片的索引外 数组可以由整数数组索引 布尔索引及花式索引 整数数组索引 以下实例获取数组中 0 0 1 1 和 2 0 位置处的元素 i
  • 2020年华为杯第十七届中国研究生数学建模竞赛---回顾记录

    这次做一个复盘贴 刚刚参加完这次的华为杯数学建模 由于是2020级研究生所以允许跨校组队 所以选择的队友是两个外校的 沟通方面第一天至第三天每天在微信使用语音通话汇报一次进度 第四天至第五天腾讯会议共享桌面进行论文修改 比赛时间 2020年
  • 网络安全-反序列化漏洞简介、攻击与防御

    目录 简介 PHP序列化 Python序列化 攻击 PHP举例 Python举例 防御 参考 简介 各种语言都有反序列化漏洞 Java PHP Python等 序列化即将对象转化为字节流 便于保存在文件 内存 数据库中 反序列化即将字节流转
  • 帮你理解网关、ARP、IP、MAC、路由

    我发个简单形象的小故事 你一看就明白了 假设你叫小不点 本地主机 住在一个大院子 本地局域网 里 有很多邻居 网络邻居 门 口传达室有个看大门的李大爷 李大爷就是你的网关 当你想跟院子里的某个伙伴玩 只要你在院 子里大喊一声他的名字 pin
  • Linux发送接收邮件

    目录 一 实验 1 linux用户发送给linux中的其它用户 2 linux用户发送给外网用户 一 实验 1 linux用户发送给linux中的其它用户 1 使用命令 yum install y sendmail 安装sendmail软件
  • C++类的三大特性之继承

    目录 一 继承的概念与使用 lt 1 gt 什么是继承 lt 2 gt 如何使用 二 基类与派生类间的转换 三 继承的作用域 四 派生类的默认成员函数 lt 1 gt 构造函数 lt 2 gt 拷贝构造 lt 3 gt 赋值运算符重载 lt
  • Gradle DSL method not found: 'runProguard()'

    Gradle DSL method not found runProguard Android studio 本来刚升级studio到1 0的时候就想写这篇文章的 但是没空就没写了 好吧 今天把这个问题写下 因为很多同事也遇到这个问题 解决
  • 关于servlet的 url-pattern 配置

  • GD32F303移植ATH10温湿度模块

    目录 前期准备 移植准备 开始移植 ATH10 c ATH10 h main c 效果图 总结 前期准备 开发硬件 GD32F303RCT6开发板 开发平台 Keil5 网盘资料 见文章底部 移植准备 ATH10模块I2C驱动使用到us延时
  • 利用js将列表数据转换为树结构

    记录一下遇到过好多次的需求 重复写太恶心了 parent id 最顶层的默认父节点值 list 需要处理的列表数据 返回的数据为处理好的树结构数据 const dealTreeData parent id any list any gt c
  • 2017 iOS 启动页(Launch Screen Images)、图标(App Icon)尺寸大小

    启动页尺寸大小 Device Portrait Landscape size 12 9 iPad Pro 2048px 2732px 2732px 2048px 10 5 iPad Pro 1668px 2224px 2224px 1668
  • excel subtotal 函数(分类汇总)

    函数说明 返回列表中的分类汇总 语法 SUBTOTAL function num ref1 ref2 SUBTOTAL 函数语法具有以下参数 Function num 必需 数字 1 11 或 101 111 用于指定要为分类汇总使用的函数
  • 2021-10-30 关于ORACLE 19c DBA_JOBS不能自动执行 LAST_DATE为空 排查方式

    ORACLE DBA JOBS 相关报错解决方式 背景 在新创建的ORACLE 19c单实例数据库环境 恢复生产环境数据后 发现任务调度重启 重建仍不能自动进行调度 后发现DBA JOBS不会自动执行 NEXT DATE正常 LAST DA
  • 从输入URL到页面展示发生了什么?

    目录 1 查询缓存 2 DNS解析 3 建立TCP连接 3次握手 4 客户端发起http请求 5 服务器处理请求 6 服务器响应请求 7 浏览器解析html 8 断开TCP连接 4次挥手 1 查询缓存 从输入url按下回车后 我们进入了第一