从输入URL到页面展示这中间发生了什么

这篇具有很好参考价值的文章主要介绍了从输入URL到页面展示这中间发生了什么。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

从输入URL到页面展示这中间发生了什么

Chrome多进程浏览器架构

  • 浏览器进程主要负责用户交互、子进程管理和文件储存等功能。
  • 网络进程是面向渲染进程和浏览器进程等提供网络资源加载。
  • 渲染进程也称为浏览器内核,JavaScript引擎V8都是运行在该进程中,默认会为每个标签窗口页面开辟一个独立的进程,负责将网络下载的HTML、JavaScript、CSS、图片等资源转化为交互的页面。
  • GPU进程:用于3D绘制等

仅仅打开了1个页面,为什么有4个进程?
因为打开1个页面至少需要1个网络进程、1个浏览器进程、1个GPU进程以及1个渲染进程,共4个

补充1:进程和线程

进程是一个程序运行的实例,操作系统会为进程创建独立的内存,用来存放运行所需要的代码和数据
线程是进程的组成部分,每个进程可以有多个线程其中至少一个主线程,这些线程由所属的进程进行启动和管理。

进程和线程之间关系的特点:

  1. 只要某个线程执行出错,将会导致整个进程崩溃
  2. 进程与进程之间相互隔离
  3. 线程之间可以共享所属进程的数据
  4. 进程所占用的资源会在其关闭后由操作系统回收

整体的流程

1. 浏览器接收到输入的URL后,先解析URL

判断用户输入的是 URL 还是query

  • 如果是搜索内容,地址栏会使用浏览器默认的搜索引擎,来合成新的带搜索关键字的URL。
  • 若符合URL规则,整合URL + 对应协议头(http/https)形成完整的URL

URL结构:Protocol://Host:port/Path?Query#Fragment
浏览器接收到输入的URL后,先对URL解析,把我们请求需要的协议、域名、端口、路径这些信息解析提取出来并构造一个HTTP请求。

浏览器发送请求前,尝试缓存命中
  1. 根据请求头的expirescache-control:max-age 判断资源是否命中,如果命中。直接从缓存中获取资源,返回状态码为200的响应。
  2. 如果没有命中,根据请求头 If-modified-since: Last-Modified或者If-none-match:ETag发送一个get请求询问服务器缓存是否修改,如果没有修改返回304,从缓存中获取资源。如果修改了返回状态码为200的请求资源结果。

这里的2已经进入网络请求的流程。协商缓存时在DNS之后发生的

2.建立URL请求

网络进程会查找本地缓存是否缓存了该资源。如果有缓存资源,那么直接返回资源给浏览器进程;如果在缓存中没有查找到资源,那么直接进入网络请求流程。第一步是要进行DNS解析获取IP地址。

DNS解析出IP地址

DNS(Domain Name System) 域名系统,DNS解析的目的是将URL中的Host字段转换成网络中具体的IP地址。

DNS解析的过程:递归查询+迭代查询
从输入URL到页面展示这中间发生了什么
先在客户端进行查询有没有解析过的记录(DNS缓存),在这里任何一步找到就会结束查找流程。如果都没有找到,开始迭代查询。

1.先去DNS根域名(.)服务器查询,属于哪个顶级域名服务器(.com),然后返回顶级域名服务器IP
2.再根据返回的IP去顶级域名服务器查找,属于哪个权限域名服务器(xxx.com),返回权限域名服务器IP
3.再根据返回的IP去权限域名服务器查找
4.找到了就返回目标地址的IP,没有就报错

优化:DNS预解析

大型网站,有多个不同服务器资源的情况下,都可采取DNS预解析
rel="dns-prefetch",提前解析,减少页面卡顿。

当网页打开时,浏览器会在加载网页时对网页中的域名进行解析缓存,这样在你单击当前网页中的连接时就无需进行DNS的解析,减少用户等待时间,提高用户体验。
从输入URL到页面展示这中间发生了什么

使用IP地址建立TCP连接 三次握手

网络进程拿到IP后,查看URL请求的端口号,如果有根据IP地址:端口号创建新的套接字发起TCP连接。

http 默认端口80, https 默认端口443
从输入URL到页面展示这中间发生了什么

第一次握手: 客户端随机初始化序列号,TCP报文序列号seq=x,SYN同步标志位为1,用来建立连接,然后把该报文发送给服务端,客户端进入等待服务端确认的状态。

第二次握手:服务器端收到客户端发来的SYN同步标志位=1的数据包后,知道是在建立连接。服务器自己也生成初始序列号,TCP报文序列号seq=y,SYN同步标志位和ACK确认标志位置1,表示建立连接之后的响应。ack确认号=x+1,期望收到对方下一个报文段的第一个数据字节序列号位x+1,作为客户端建立连接请求的应答。

第三次握手:客户端收到服务端的确认应答后,检查ack确认号是否x+1,ACK确认标志位是否=1。若正确就返回ack确认号为y+1,序列号为x+1,及ACK=1的数据包发送给服务器,确认服务器的应答。
服务器端收到应答包,检查ack确认号是否=y+1来确认是否建立连接成功。

为什么要三次握手?

建立TCP连接会先经历三次握手,目的是确保数据到达目的–> 客户端和服务端的接收和发送能力没有问题

第二次握手 服务器端同时返回SYN建立连接+ACK确认,说明客户端发送的建立连接请求服务器端可以接收到,说明客户端发送能力ok。
第三次握手 客户端向服务器发送ACK确认标志=1,表示对服务器端的应答,说明服务器发送能力ok,服务端的接收能力ok。
服务器端收到应答包,检查成功,说明客户端的接收能力ok,建立连接。

也可以从为什么不是两次握手的角度回答
为何不能是两次握手?
可能连接请求因网络滞留了一段时间,以至于到达服务端已经失效了,但是服务端会误认为是个新的连接请求,于是向客户端发出确认报文,同意建立连接。假设采用两次握手,那么服务端发出确认报文,表示连接已建立,但客户端并没有发出确认建立的连接,也不会向服务端发送任何数据,服务端因连接占用导致资源浪费。

三次握手过程中可以携带数据吗? -第三次握手可以

假如第一次握手可以携带数据的话,如果有人要恶意攻击服务器,那他每次都在第一次握手中的 SYN 报文中放入大量的数据。因为攻击者根本就不理服务器的接收、发送能力是否正常,然后疯狂着重复发 SYN 报文的话,这会让服务器花费很多时间、内存空间来接收这些报文。
也就是说,第一次握手不可以放数据,其中一个简单的原因就是会让服务器更加容易受到攻击了。而对于第三次的话,此时客户端已经处于 ESTABLISHED 状态。对于客户端来说,他已经建立起连接了,并且也已经知道服务器的接收、发送能力是正常的了,所以能携带数据也没啥毛病。

syn洪泛攻击

SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。SYN 攻击是一种典型的 DoS/DDoS 攻击。

检测 SYN 攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。

解决办法
1.缩短超时时间
2.过滤网关

HTTP请求

服务器接收到请求信息后,会根据请求信息生成响应行、响应头和响应体等信息,并发给网络进程。浏览器接收到响应数据之后,如果是http1.1以下则直接关闭连接,否则双方都可以根据情况选择关闭TCP连接或者保留重用,现在浏览器默认都会保持连接(keep-alive)。

关闭TCP连接 四次挥手

TCP连接是全双工的,因此,每个方向都必须要单独进行关闭
从输入URL到页面展示这中间发生了什么
第一次挥手:客户端打算关闭连接,发送FIN标志位置1的报文,表示客户端没有发送给服务端的数据了,要关闭连接了。

第二次挥手:服务器收到客户端的FIN报文后,发送ACK确认标志位=1,表示你的关闭请求我收到啦,你可以关闭了。

可能服务器端还有未完成的数据传递,所以请客户端继续等待。

第三次挥手:当服务器确认没有数据发送之后,发送FIN为1、ack=u+1、seq=w的FIN报文,准备关闭连接

第四次挥手:客户端收到FIN报文后,向服务器进行应答。服务器会等待客户端的应答后才会真正断开连接,如果服务器没有收到应答报文则会重传。客户端等待2*报文段最大生存时间 后依然没有收到回复,说明服务器端已正常关闭,客户端也可以关闭连接了。

为什么要等待2个报文段最大生存时间

1.假设第四次挥手的ACK应答包丢失,服务器没有收到应答报文则会重传FIN报文,在2个报文段最大生存时间之内 如果客户端再次收到FIN报文 重发ACK应答报文。保证双方都可以正常进入关闭状态
2.确保在创建新连接时,先前网络中残余的数据都丢失了

为什么连接的时候是三次握手,关闭的时候却是四次握手?

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。
但是关闭连接时,当Server端收到FIN报文时,可能服务器还有数据需要发送,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

3.开启渲染进程

笔记文章来源地址https://www.toymoban.com/news/detail-482621.html

到了这里,关于从输入URL到页面展示这中间发生了什么的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从输入URL到展示出页面

    目录 了解URL  1. 输入URL 2. 域名解析 3. 建立连接 4. 服务器处理请求: 5. 返回响应: 6. 浏览器解析HTML: 7. 加载资源: 8. 渲染页面: 9. 执行JavaScript: 10. 页面展示: 从输入URL到展示出页面,涉及到多个步骤和不同的技术。本篇来解释一下整个过程中发生的主要事件: 这里特

    2024年02月07日
    浏览(32)
  • 浏览器输入一个URL之后发生了什么?

    URL解析 DNS解析 TCP连接 TSL连接 HTTP请求 TCP挥手 接收并解析响应 主要分为: 协议,eg http,https 域名或者ip地址,eg www.baidu.com 域名相对于ip地址来说,更方便人们记忆,但是实际的网络传输中使用的是ip地址 端口号,不同的协议对应不同的端口号,一般可以不写,eg http是80,h

    2024年02月11日
    浏览(73)
  • 在浏览器输入URL后发生了什么?

    在浏览器输入URL并获取响应的过程,其实就是浏览器和该url对应的服务器的网络通信过程。 从封装的角度来讲,浏览器和web服务器执行以下动作:(简单流程) 1、浏览器先分析超链接中的URL:分析域名是否规范 2、浏览器向DNS请求解析请求解析http://www.sxtyu.com/index.html中的ip地

    2024年02月09日
    浏览(53)
  • 浏览器地址栏输入url以后发生了什么

    1.DNS对域名进行解析; 2.建立TCP连接(三次握手); 3.发送HTTP请求; 4.服务器处理请求; 5.返回响应结果; 6.关闭TCP连接(四次挥手); 7.浏览器解析HTML; 8.浏览器布局渲染; 1.浏览器对输入的地址补全,然后DNS域名解析  如果你搜索的是baidu.com的时候,实际访问的还是h

    2024年02月13日
    浏览(52)
  • 从输入URL到网页显示,期间发生了什么(详解)

    Internet上的每一个网页都具有一个唯一的名称标识,通常称之为 URL (Uniform Resource Locator, 统一资源定位器)。它是www的统一资源定位标志,简单地说URL 就是web地址,俗称“网址”。 URL格式 首先浏览器的第一步是对URL进行解析 ,从而 发送给Web服务器的请求信息。 假如说 没有

    2023年04月08日
    浏览(58)
  • 在浏览器中输入URL后都会发生什么

    浏览器补全地址和DNS对域名进行解析; 1当搜索baidu.com,实际访问的是http://www.baidu.com,浏览器会补全地址。 因为一个URL由协议、主机名、路径、搜索内容、哈希组成。 2DNS解析过程:客户机先插本地缓存,找不到再将域名发到DNS服务器,它先查它管理的区域,如果就查本地缓

    2024年02月16日
    浏览(40)
  • 说说地址栏输入 URL 敲下回车后发生了什么?

    简单的分析,从输入  URL 到回车后发生的行为如下: URL解析 DNS 查询 TCP 连接 HTTP 请求 响应请求 页面渲染 首先判断你输入的是一个合法的 URL  还是一个待搜索的,并且根据你输入的内容进行对应操作 URL 的解析第过程中的第一步,一个 url 的结构解析如下: 在之前文

    2024年04月08日
    浏览(38)
  • 从输入URL到页面展示过程:深入解析网络请求与渲染

    在代码中,我们使用了JavaScript的fetch API来发起网络请求,并将服务器响应转换为文本输出到控制台。 在发送网络请求前,浏览器首先需要将URL中的域名解析成对应的IP地址。这个过程称为DNS解析。下面是一个简化版的DNS解析示例代码: 上述代码中,我们使用Node.js的 dns 模块

    2024年02月09日
    浏览(36)
  • 网站是如何进行访问的?在浏览器地址栏输入网址并回车的一瞬间到页面能够展示回来,经历了什么?

    这个问题是检验web和计网学习程度的经典问题。 网站访问流程: 1) 在输入完一个域名之后,首先是检查浏览器自身的DNS缓存是否有相应IP地址映射,如果没有对应的解析记录,浏览器会查找本机的hosts配置文件(一般是C:WindowsSystem32driversetchosts,这个文件是用于在操作系统

    2024年02月14日
    浏览(59)
  • URL地址解析至页面展示全过程(面试详细解答)

    目录 1、解析URL 2、缓存判断 ​3、DNS解析 ​4、获取MAC地址 5、TCP三次握手 6、HTTP请求 7、服务器处理请求,返回HTTP响应 8、页面渲染 9、TCP四次挥手 10、浏览器解析HTML 11、浏览器布局渲染 1、解析URL 首先会对 URL 进行解析,分析所需要使用的传输协议和请求的资源的路径。如

    2024年04月25日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包