页面从输入URL到渲染都发生了什么

  • DNS解析
  • TCP连接
  • 发送HTTP请求
  • 服务器处理请求并返回结果
  • 浏览器解析并渲染页面

DNS解析

全称 Domain Name System 域名系统
因为服务器ip是一串数字,不好记,于是便用域名代替ip,比较有语义,好记。比如头条主页:https://toutiao.com

什么是dns解析:解析域名然后获取对应的ip,流程:

  • 首先先找到浏览器有没有dns缓存(之前有访问记录)
  • 如果没有,则寻找本地的host文件,看看有没有域名记录,如果有则返回ip
  • 如果本地host文件没有则直接向本地DNS服务器请求,如果还是没有,继续向上DNS服务器请求,直至返回。

TCP连接

浏览器拿到ip后,在向服务器发送http请求之前,先要和服务器建立TCP连接;
怎么建立TCP连接:三次握手

  • 客户端发送SYN数据包给服务端
  • 服务端收到客户端的数据包,返回SYN/ACK数据包给客户端
  • 客户端收到服务端的返回后,发送ACK数据包给服务端
    连接建立成功,正是开始传送数据
    两次握手:TCP是可靠的,要保持可靠至少要三次握手

建立连接后怎么断开TCP连接:四次挥手

  • 客户端向服务端发出一个FIN,用来关闭连接,此时客户端还能接收数据。
  • 服务端在收到这个信号之后会向客户端发出一个ACK,然后服务端就进入了close_wait(关闭等待)状态,客户端收到后,进入fin_wait_2状态,等待服务端主动关闭连接,此时还能接受数据
  • 服务端此后没有数据发给客户端时,服务端会向客户端发送一个FIN,关闭服务端到客户端的连接
  • 客户端在收到之后会回复一个ACK,服务端收到后,关闭连接,立刻进入closed状态,客户端在等待两个最大段生命周期(MSL)之后,进入closed状态。

挥手成功,关闭连接成功。

为啥挥手是四次?
因为第一次发送FIN时,客户端表明自己没有数据发送,但是还能接收数据,当服务端第二次发送ACK,表明它已经知道客户端没有数据发送了,但是客户端还能接收数据,第三次服务端发送FIN,表明自己也没有数据发送了,等到客户端第四次发送ACK过来,服务端才关闭。

发送HTTP请求

建立好TCP连接后,然后就可以通过发送HTTP请求到服务器请求数据了
一个HTTP请求由 请求行、请求报头、空行、请求数据 组成。

请求行
格式:Method Request-URL HTTP-Version CRLF

GET/test.html HTTP/1.1

请求方法:GET,POST,OPTION,HEAD,PUT,DELETE,CONNECT,TRACE,PATCH

请求报头(request header)
向服务器传输附加信息。常见的请求报头有:Accept,Accept-Charset,Accept-Encoding,Accept-Language,Content-Type,Authorization,Cookie,User-Agent等

Connection设置为Keep-alive,用于高速客户端本次HTTP请求结束之后并不需要关闭TCP连接,这样可以使下次HTTP请求使用相同的TCP通道,节省TCP连接建立的时间

空行
在请求报头和请求数据之间有个空行,表示上面是请求报头,接下来的是请求数据,用以区分二者。

请求数据
客户端向服务端传输的数据
服务端返回的状态码

  • 200 请求成功
  • 204 请求成功,但没有内容返回
  • 301 请求的资源已被永久的移动到新的地方
  • 302 请求的资源临时被移动到新的地方
  • 304 所请求的资源未修改
  • 400 请求语法有问题,服务端无法理解
  • 403 服务器收到请求,但是拒绝执行此请求
  • 404 未找到资源
  • 405 请求方法和服务端定义的方法不一样
  • 500 服务器内部错误

浏览器解析
服务端把数据返回给浏览器,浏览器该如何解析。
在这里插入图片描述

  1. HTML通过HTML解析器解析输出DOM树
  2. css样式通过CSS解析器解析输出CSS规则
  3. 结合DOM树和css规则,计算出DOM树中每个节点的具体样式,生成渲染树
  4. 浏览器根据渲染树开始布局和绘制,会触发回流和重绘
  5. 构建图层树,显示页面
### 回答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处理等等。不同的浏览器、服务器也可能会有些许差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值