在地址栏上输入一个url,到这个页面呈现出来,中间会发生什么?

首先在浏览器地址栏中输入 url

查缓存

浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,直接显示页面内容;如果没有,跳到第三步;

  1. 什么是缓存
    在实际的开发过程中,缓存技术会涉及到不同层、不同端。每一层的缓存目标都是一致的,就是尽快返回数据请求,减少延迟,但是每层使用的技术实现是不相同的。
    当浏览器请求一个网站的时候,会加载各种各样的资源,比如HTML文档、图片、css、js等文件,对于一些不经常变的内容,浏览器会将他们保存在本地文件中,下次访问相同的网站时候直接加载这些资源,加速访问。这些被浏览器保存的文件就被称为缓存(不是指Cookie和Localstorage)
  2. 缓存的过程
    浏览器和服务器之间的通信方式:浏览器发起HTTP请求-服务器响应该请求
    浏览器发起请求,会在浏览器缓存中查找该请求的结果和缓存标识;
    浏览器每次拿到返回的结果会将这个结果和缓存标识存储下来。
  3. 强缓存和协商缓存
    浏览器会先去查看强缓存判断是否过期,如果强缓存生效,返回 200 并从缓存中读取资源;若不生效则进行协商缓存,协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,返回 200,并重新返回资源和缓存标识,再次存入浏览器缓存中;生效则返回 304,并从缓存中读取资源 (协商缓存之前要经过 DNS 域名解析,之后建立 TCP 链接)
  4. 强缓存
    强缓存有两个相关字段:Expires、Cache-Control
    HTTP1.0版本:使用的是Expires
    HTTP1.1版本:使用的是Cache-Control
  5. 协商缓存
    协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程。
    协商缓存的标识也是在响应报文的HTTP头中和请求结果一起返回给浏览器的,控制协商缓存的字段分别有:
    HTTP1.0版本:Last-Modified / If-Modified-Since
    HTTP1.1版本:Etag / If-None-Match,
    其中Etag / If-None-Match的优先级比Last-Modified / If-Modified-Since高。

DNS 解析

域名解析,获取相应的 IP 地址
1、客户机提出域名解析请求,并将该请求发送给本地的域名服务器.
2、:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回.
3、如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址.
4、本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址.
5、重复第四步,直到找到正确的纪录.
6、本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机.
浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,直接显示页面内容;如果没有,跳到第三步;
dns解析过程

TCP 连接

网络进程拿到IP后,查看URL请求的端口号,如果有根据IP地址:端口号创建新的套接字发起TCP连接。浏览器向服务器发送 tcp 连接,与浏览器建立三次握手
1、建立连接时的三次“握手”
-客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,向服务端发起建立连接的请求,等待服务端的确认
-服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,,并将该数据包发送给客户端以确认连接请求
-客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
2、释放连接时的四次“握手

TCP的三次握手与四次挥手理解及面试题(很全面)
TCP的链接

发送 HTTP 请求

握手成功后,建立 http 请求
建立连接后,双方可以开始传输数据了,首先在请求报文中必须明确请求的端口是哪个,还要确认端口,http默认80,然后浏览器向服务器发送请求,这个过程就是 应用层 ==> 运输层 ==>网际层IP ==>网络接口层。从应用层开始,消息以HTTP请求报文的形式,在传输层,网络层,数据链路层逐层打上头部,进行传输。服务器接收到数据在逐层解套,最终收到HTTP协议的请求报文。

服务器处理请求并返回 HTTP 报文

服务器收到请求,将数据返回至浏览器。浏览器收到 http 响应。
服务器接受请求并解析,将请求转发到服务程序,如虚拟主机使用HTTP Host头部判断请求的服务程序

浏览器解析渲染页面

读取页面内容,浏览器渲染,解析 html 源码

  • html文档解析(DOM Tree)
    在浏览器没有完整的接收全部HTML文档时,它就已经开始显示这个页面了。生成解析树解析即dom树,是由dom元素及属性节点组成,树的根是docunment对象。

  • 浏览器发送获取嵌入在html中的对象
    加载过程中遇到外部css文件,浏览器另外发出一个请求,来获取css文件。遇到图片资源,浏览器也会另发出一个请求,来获取图片资源。这是异步请求,并不会影响html文档进行加载。
    但是当文档加载过程中遇到js文件,html文档会挂起渲染的线程,不仅要等待文档中的js文件加载完毕,还要等待解析执行完毕,才能恢复html文档的渲染线程。

  • css解析
    浏览器下载css文件,将css文件解析为样式表对象,并来用渲染dom tree。该对象包含css规则,该规则包含选择器和声明对象。
    css元素遍历的顺序,是从树的低端向上遍历。

  • js解析
    浏览器UI线程:单线程,大多数浏览器让一个单线程共用于执行JavaScript和更新用户界面
    js阻塞页面:浏览器里的http请求被阻塞一般都是由js所引起,具体原因是js文件在下载完毕之后会立即执行,而js执行时候会阻塞浏览器的其他行为,有一段时间是没好网络请求被处理的,这段空闲时间就是所谓的http请求被阻塞。

连接结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值