从输入url到页面显示都发生了什么

本文深入解析HTTP请求全过程,从DNS解析、TCP三次握手到HTTP请求与响应,再到浏览器渲染及TCP连接断开,全面覆盖前端面试核心知识点。

这个问题是个经典的问题,也会是前端面试最常问的面试题之一,虽然简单的一句话,但是里面水很深,包含的知识量很大,下面就分模块研究一下。

大概分为

  • 1、DNS解析
  • 2、TCP三次握手建立连接
  • 3、http发起请求
  • 4、服务器处理请求,并返回响应报文
  • 5、浏览器渲染dom树
  • 6、断开TCP连接,解释本次请求流程

1、DNS 解析

咱们先看看dns是为什么诞生的,然后咱们就知道它是干什么的了。

大家一般访问网站的时候,通常都是通过域名进行访问,而不是通过ip地址进行访问。因为与ip地址是一串数字,相比域名(英文字母+数字)更符合人类的记忆习惯。

但是让计算机去理解域名(英文字母+数字),相对而言也是相当困难的,因为计算机更擅长处理一串数字。

为了解决这个问题。dns服务应用就产生了,dns协议服务提供了通过域名查找ip地址,或逆向从ip反查域名的服务。如图

详细的简介一下dns解析的步骤:

  • 1、首先看看本地dns(hosts)如果找到对应的域名解析就执行tcp三次握手,如果没有找到执行2、
  • 2、去路由器的dns服务去找对应ip,如果找到对应的域名解析就执行tcp三次握手,如果没有找到,接着执行3、
  • 3、 去代理服务器的dns服务去找对应ip,如果找到对应的域名解析就执行tcp三次握手,如果没有找到,接着执行4、
  • 4 代理服务器都找不到,那么就会去网络服务商哪里去找,直到找到就会执行tcp三次握手。

如果在路由器,或者代理服务器,或者网络服务商找到了,对于的ip,就会通知上一步把这个ip缓存起来(dns缓存--优化项),以便下次使用。

2、TCP协议的三次握手 咱们先看看TCP协议是干什么的,TCP协议在tcp/ip协议中为第二层,传输层,下面简介一下tcp/ip协议的4层。

  • 1、应用层(http协议属于该层),

    作用:向用户提供应用服务时通信的活动。

    TCP/IP 协议族内预存了各类通用的应用服务。比如,FTP(File Transfer Protocol,文件传输协议)和 DNS(Domain Name System,域 名系统)服务就是其中两类。

  • 2、传输层(tcp协议属于该层),

    作用:提供互联网中两台计算机之间的数据传输

  • 3、网络层(ip协议属于改层)

    作用:用来处理网上流动的数据包,数据包是网上传输的最小单位,该层规定了使用什么样的路径到达对方的计算机,然后把数据包传递给对方

  • 4、链路层

    作用:用来连接网络硬件的部分,包括控制操作系统、硬件的设备驱 动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等 物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在 链路层的作用范围之内。

tcp/ip分层是非常好的处理方式,就像社会人类分工一样,各就其职,那个层出问题就单独的去处理那层,或者或要替换某层的话就直接把那层给替换掉,不用整体替换。或者两层之间好添加一层新的协议,只要能过处理好各层的接口,就可以添加。

例如https就是在应用层和传输层之间添加了一层SSL(secuer socket layer,安全套阶层)

来看图

发送端在发送的时候,都会加上该层的所属的头部信息,相反在接受层,接受数据时每层都会去掉该层的首部信息。

接下来就看看tcp协议的传输层的作用和实际交互方式。 传输层细分两个作用

  • 1 提供字节流服务 字节流服务指的是,tcp协议会对大数据的请求体进行数据分割,分割成以报文段为单位的数据包,进行传输

  • 2 确保数据能够到达目标 tcp协议为了能够确保数据传输到目标,会选择三次握手策略。

    握手过程采用tcp标志(flg)SYN--(synchronize)和ACK---(ackonwledgement) 发送端先发送一个带有SYN--(synchronize)flag的数据包给目标服务器,目标服务器得到请求后,会返回一个携带SYN--(synchronize)/ACK--(ackonwledgement)flag的数据包来传达确认信息,客户端接收到以后会,会回传一个ACK(ackonwledgement)的标志代表握手成功。如果中间有断开,tcp会以相同的顺序发送,这就是三次握手的真实面目,看下图

3 http 发送请求 当tcp三次握手建立以后,接下来就会发起一到多个数据请求。请求分两部分

请求头

请求体

响应体也分为两部分。

响应头

响应体

5 浏览器渲染

  • 1 处理html标记并构建DOM树。
  • 2 处理css标记并构建CSSOM树。
  • 3 将DOM与CSSOM合并成一个渲染树。
  • 4 根据渲染树来布局,以计算每个节点的几何信息。
  • 5 将各个节点绘制到屏幕上。

我们的演示网页看起来可能很简单,实际上却需要完成相当多的工作。如果 DOM 或 CSSOM 被修改,您只能再执行一遍以上所有步骤,以确定哪些像素需要在屏幕上进行重新渲染。

默认情况下,CSS 被视为阻塞渲染的资源,这意味着浏览器将不会渲染任何已处理的内容,直至 CSSOM 构建完毕

优化

  • 1 CSS 是阻塞渲染的资源。需要将它尽早、尽快地下载到客户端,以便缩短首次渲染的时间。

  • 2 并利用媒体类型和查询来解除对渲染的阻塞"< link href="other.css" rel="stylesheet" media="(min-width: 40em)">"

  • 3 hash 缓存 "< link href="89498567945.css" rel="stylesheet" media="(min-width: 40em)">"

JavaScript 允许我们修改网页的方方面面:内容、样式以及它如何响应用户交互。 不过,JavaScript 也会阻止 DOM 构建和延缓网页渲染。

优化

  • 1 可以让您的 JavaScript 异步执行 "< script src="app.js" async>"
  • 2 并去除关键渲染路径中任何不必要的 JavaScript
  • 3 hash 缓存 "< script src="app34534534543.js" async> "

6、断开TCP连接,解释本次请求流程

  • 1 当服务器完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
  • 2 客户端收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
  • 3 由客户端再提出反方向的关闭请求,将FIN置1
  • 4 服务器对客户端的请求进行确认,将ACK置1,双方向的关闭结束。

客户端和服务器双方都可以先提出断开连接

因个人了解程度有限,目前只能提供这么多的产考,有不足的地方可以提出来,会及时修改,后期或不断补充

转载于:https://juejin.im/post/5c34018ae51d45523070f82f

### 回答1: 好的,我了解了。关于您的问题,整个过程可以分为以下几个步骤: 1. 输入URL:当您在浏览器地址栏中输入URL时,浏览器会将该URL发送到域名系统(DNS),通过域名系统将URL转化为IP地址。 2. 发送HTTP请求:浏览器根据URL发起HTTP请求,请求访问Web服务器的特定资源。 3. 服务器响应:当Web服务器接收到请求时,它将处理请求并返回所请求的资源。 4. 浏览器渲染:浏览器收到服务器响应后,它将解析HTML源代码,并根据CSS样式表和JavaScript代码来渲染页面。 5. 页面展示:最终,浏览器将HTML、CSS和JavaScript代码解析完毕后,它会在屏幕上展示出页面内容。 以上就是从输入URL页面展示的整个过程,希望能够帮到您。 ### 回答2: 当我们在浏览器的地址栏中输入URL时,整个过程可以分为以下几个步骤: 1. DNS解析:浏览器首先会根据URL中的域名(例如www.example.com)进行DNS解析,将域名解析为对应的IP地址。这一步骤是为了找到存放网页的服务器。 2. 建立TCP连接:浏览器通过IP地址与服务器建立TCP连接。TCP协议提供可靠的连接,确保数据的完整性。 3. 发起HTTP请求:一旦建立了TCP连接,浏览器会向服务器发起HTTP请求,请求包括请求方法、请求头、请求体等信息。请求方法可以是GET、POST等,服务器根据请求的不同做出相应的响应。 4. 服务器处理请求并响应:服务器接收到浏览器的请求后,会根据请求的内容进行相应的处理。处理包括读取数据库、执行后端代码等操作。之后,服务器会生成响应对象,包含响应状态码、响应头、响应体等信息。 5. 接收服务器响应:浏览器接收到服务器的响应后,根据响应头中的Content-Type确定响应的数据类型。如为HTML类型,则浏览器会将响应的HTML代码解析成DOM树。 6. 解析页面并渲染:浏览器根据DOM树构建渲染树,并依据CSS样式对各元素进行布局和样式计算,最终生成页面的渲染结果。同时,浏览器也会执行页面中的JavaScript代码。 7. 页面展示:最后,浏览器将渲染好的页面内容显示在用户的视窗中,用户可以看到页面的展示效果。 总结起来,从输入URL页面展示,经历了DNS解析、建立TCP连接、发起HTTP请求、服务器处理请求并响应、接收服务器响应、解析页面并渲染等多个步骤。最终,浏览器将渲染好的页面内容显示给用户。 ### 回答3: 从输入URL页面展示,大致经历如下步骤: 1. 域名解析:当我们在浏览器中输入URL后,首先会进行域名解析。浏览器会向DNS服务器发送域名请求,获取该域名对应的IP地址。 2. 建立连接:浏览器通过获取到的IP地址与Web服务器建立TCP连接。这个过程使用的是三次握手协议,确保连接的可靠性。 3. 发送请求:建立连接后,浏览器会发送HTTP请求给Web服务器,请求的内容包括请求的类型(GET/POST等)、地址、头部信息、可能还包括cookie等相关信息。 4. 服务器处理请求:Web服务器收到请求后,会根据请求内容进行处理。处理过程可能包括调取数据库、运行后台程序等动作。 5. 服务器响应:Web服务器根据请求的内容,返回一个HTTP响应给浏览器。响应的内容包括状态码、响应头部、实际的网页内容等。 6. 下载页面资源:浏览器接收到服务器返回的响应后,会开始下载网页的资源,如HTML、CSS、JavaScript、图片等。浏览器会根据响应头部中的Content-Type确定如何解析资源。 7. 页面渲染:当所有的资源下载完成后,浏览器会根据HTML结构、CSS样式,解析并渲染出网页。浏览器会从上到下解析HTML文档,解析过程包括构建DOM树、计算CSS样式、布局页面等。 8. JavaScript执行:在渲染过程中,浏览器会遇到JavaScript代码。浏览器会逐行解析执行JavaScript代码,并根据代码修改DOM树和样式,可能还会触发网络请求等。 9. 页面展示:当页面渲染和JavaScript执行完成后,页面便可以完整地展示给用户了。用户可以看到页面内容,与页面进行交互。 以上仅是一个大致的过程,实际上还有很多细节和额外的步骤,比如缓存机制、重定向、Cookie处理等等。不同的浏览器、服务器也可能会有些许差异。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值