这个问题无论是面试还是我们在学习的过程中都算是一个老生常谈的问题,可是我看了不少人的回答感觉还是不够全面,今天带着大家一起来梳理一下。

在浏览器中输入 URL 之后,它会执行以下几个流程:

1.执行 DNS 域名解析;

2.封装 HTTP 请求数据包;

3.封装 TCP 请求数据包;

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

5.参数从客户端传递到服务器端;

6.服务器端得到客户端参数之后,进行相应的业务处理,再将结果封装成 HTTP 包,返回给客户端;

7.服务器端和客户端的交互完成,断开 TCP 连接(4 次挥手);

8.浏览器通过自身执行引擎,渲染并展示最终结果给用户。

1.DNS 域名解析

在网络中定位是依靠 IP 进行身份定位的,所以 URL 访问的第一步便是先要得到服务器端的 IP 地址。而得到服务器的 IP 地址需要使用 DNS(Domain Name System,域名系统)域名解析,DNS 域名解析就是通过 URL 找到与之相对应的 IP 地址。

PS:为什么不直接访问 IP 地址来请求服务器?因为 IP 地址很长,不方便记忆,而 URL 地址好记很多,所以会使用 URL 来替代 IP 地址,而 URL 就像 IP 地址的别名一样,用它可以定位到相应的 IP 地址。

DNS 域名解析的大致流程如下:

1.先检查浏览器中的DNS 缓存,如果浏览器中有对应的记录会直接使用。,并完成解析;

2.如果浏览器没有缓存,那就去查询操作系统的缓存,如果查询到记录就可以直接返回 IP 地址,完成解析;

3.如果操作系统没有 DNS 缓存,就会去查看本地 host 文件,Windows 操作系统下,host 文件一般位于 “C:\Windows\System32\drivers\etc\hosts”,如果 host 文件有记录则直接使用;

4.如果本地 host 文件没有相应的记录,会请求本地 DNS 服务器,本地 DNS 服务器一般是由本地网络服务商如移动、电信提供。
通常情况下可通过 DHCP 自动分配,当然你也可以自己手动配置。目前用的比较多的是谷歌提供的公用 DNS 是 8.8.8.8 和国内的公用 DNS 是 114.114.114.114。

5.如果本地 DNS 服务器没有相应的记录,就会去根域名服务器查询了,目前全球一共有 13 组根域名服务器(这里并不是指 13 台服务器,是指 13 个 ip 地址,按字母 a-m 编号),为了能更高效完成全球所有域名的解析请求,根域名服务器本身并不会直接去解析域名,而是会把不同的解析请求分配给下面的其他服务器去完成,下面是 DNS 域名系统的树状结构图:

2.封装 HTTP 请求数据包

个 HTTP 请求对象包含 4 部分内容:

  • 请求行
  • 请求报头
  • 空行
  • 请求正文

它的基本格式如下:

在得到了服务器 IP 之后,紧接着会将本地的请求封装成一个 HTTP 数据包

3.封装 TCP 请求数据包

HTTP 底层是依赖 TCP/IP 协议实现的,所以在底层数据传输时,会将 HTTP 请求包进一步封装成 TCP 数据包

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

HTTP 通讯的基础是 TCP 连接,TCP 连接需要 3 次握手,3 次握手就是为了验证客户端的发送能力和接收能力,以及服务器端的发送能力和接收能力,就像打电话一样,通常的通话是这样开头的:

:喂,能听到吗?
对方:能听到,你能听到吗?(证明了对方的接收能力和我的发送能力)
:我也能听到,咱们聊正事吧。(证明了对方的发送能力和我的接收能力)

经过以上 3 次握手就可以证明客户端的发送能力和接收能力,以及服务器端的发生能力和接收能力,这样就可以正式开始通讯了。

5.服务器端获取到 HTTP 请求参数

数据在经过 TCP 传到到服务器程序之后,又会将 TCP 的数据包转换成 HTTP 数据包(这一切都是 TCP/IP 协议的功劳),这样服务器端就可以得到客户端发送的请求数据了。

6.服务器端执行业务处理,并返回数据

服务器端拿到了客户端的请求参数之后,会进行相应的业务处理,处理完成之后,再将处理的结果返回给客户端。返回的流程和发送的流程类似,先将结果封装成 HTTP 数据包,HTTP 数据包可分为以下 4 部分:

  • 状态行(200,500,503等)
  • 响应报头
  • 空行
  • 响应正文

它的基本格式如下:

状态行用于描述服务器的返回状态,它由 3 部分组成:

  • HTTP 版本号,如 HTTP/1.1;
  • 状态码,如 200;
  • 状态描述信息,如 OK;

常见的状态码有以下几个:

  • 200:返回成功;
  • 301:永久重定向;
  • 302:临时重定向;
  • 404:未找到页面;
  • 500:服务器程序出错。

响应正文就是返回给客户端的所有数据。

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

在经过一次请求和一次响应之后,客户端和服务器的“交流”就结束了,此时就可以执行 TCP 连接断开的流程了,它需要4 次挥手:

客户端:咱们分手吧;
服务器端:好的,让我准备一下。
服务器端:我准备好了,分手吧。
客户端:好的。

经过了以上流程之后,TCP 的连接就断开了。

8.浏览器渲染并展示结果

经过 TCP 交互之后,客户端也得到了服务器端返回的数据,然后使用浏览器自身的执行引擎,将最终的结果展示给用户,整个执行流程就结束了。

输入URL之后会执行什么流程?相关推荐

  1. 输入url,一次请求流程

    流程如下: 域名解析 发起TCP的3次握手 建立TCP连接后发起http请求 服务器响应htp请求 浏览器解析htm代码,并请求html代码中的资源(如js.css.图片等) 浏览器对页面进行渲染呈现 ...

  2. 浏览器从输入URL到页面渲染过程 ——页面渲染流程

    之前我有总结过一篇经典面试题:浏览器从输入URL到页面渲染过程 ,接下里我将对某些知识点进行更细致的解析. 浏览器从输入URL到页面渲染过程 系列文章: (一):浏览器从输入URL到页面渲染过程 -- ...

  3. 浏览器 重定向次数限制_在浏览器输入URL到页面渲染的整个流程是如何的?都有哪些步骤?...

    问题:输入 URL 到页面渲染的整个流程 DNS解析 TCP握手 TLS握手 浏览器开始解析文件 构建 DOM 树.构建 CSSOM 树.解析JS 生成 Render 树 调用 GPU 绘制,合成图层 ...

  4. ajax,HTTP原理 : 网络传输协议,网页从输入url到渲染的流程,函数防抖和节流

    一. 前后端交互流程 1.服务器 : 提供某种服务器的机器(计算机) qq音乐:音频服务器 , 迅雷:文件服务器 , qq邮箱:邮件服务器,爱奇艺:视频服务器,谷歌:web服务器 2. 前端 访问 服 ...

  5. Ajax 详解 网页从输入url到渲染的流程 同步 异步 你想要的全都有

    1  前后端交互流程 1.1   了解服务器      提供某种服务器的机器(计算机) 1.2    了解前端         访问 服务器的几种方式 直接在地址栏输入网址            网页 ...

  6. html将页面分成三块_导航渲染流程你真的知道从输入URL到页面展示发生了什么吗?(内附思维导图)...

    导航渲染流程 通过这篇文章当你被问到从URL输入到页面展示都发生了什么的时候,基本都能对答如流,甚至可以一直深入的说,说到面试官闭麦哈哈哈~ 以下是本文的思维导图,直接拿图「点个赞」再走吧 ~ 求求了 ...

  7. 从浏览器输入URL到展示页面的全流程

    从本地终端(如手机.电脑)访问一个网站,怎么处理请求并且加载出数据的.实际上考察的是计算机网络TCP/IP协议栈. 主要的得分项为TCP协议各层的描述.数据传送的封装和解包.一次页面包含多个TCP连接 ...

  8. 面试环节:在浏览器输入 URL 回车之后发生了什么?(超详细版)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者 | 4Ark 来源 | https://4ark.me/po ...

  9. 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3

    备注: 因为文章太长,所以将它分为三部分,本文是第三部分. 第一部分:深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1 第二部分:深入浅出经典面试题:从浏览器中输入URL ...

最新文章

  1. php session存入redis
  2. 第二节课作业150206309
  3. ASP.NET跨服务器上传文件的相关解决方案
  4. 计算机中用户权利和用户权限,揭秘:Win7系统用户和组权限说明
  5. authenticate总是返回None
  6. 2d访问冲突_Light | 基于环形分隔微镜阵列的高速随机访问轴向聚焦系统
  7. 如何清理和维护计算机,电脑的优化与维护操作教程
  8. 数据库管理之数据表管理(1)
  9. python创建新进程_Python os.fork()方法:创建新进程
  10. python 深度优先遍历_Python算法-二叉树深度优先遍历
  11. java源程序文件扩展名_JAVA源代码的扩展名为( )
  12. S7-200SMART案例分析——伺服接线
  13. 用小程序做问卷调查,获取数据就是这么简单!
  14. chrome下载提示网络错误
  15. 用R语言对网络数据进行统计分析(四)
  16. 浅谈——业务逻辑漏洞
  17. 如何使用prism进行统计分析(Analysis)?
  18. 新C++(9):谈谈,翻转那些事儿
  19. 花呗的24期利息计算器_花呗利息怎么算 利息计算器算一算花呗分期付款利率
  20. 码流 | 码率 | 比特率 | 帧速率 | 分辨率 | 高清的区别

热门文章

  1. @Pattern的用法
  2. 从天上吵到地下,马斯克和贝佐斯究竟什么仇什么怨?
  3. 飞冰 - 让前端开发简单而友好
  4. Java基础二十二:函数式接口介绍,函数式接口作为方法参数、返回值,Supplier接口、Consumer接口、Predicate接口、Function接口基本介绍及其案例小练习
  5. HALCON立体显示
  6. dsl java 语言_Java DSL简介(收集整理)
  7. 【Java面试高频-多线程】- 三个线程分别负责打印A,B和C,循环100次
  8. 2021吃透这些Linux知识点,稳拿大厂offer
  9. 微信小程序/安卓APP丨ssm图书借阅到期提醒功能实现
  10. 关于计算机的英语作文带翻译100字,英语作文10篇100字带翻译