从输入URL到页面呈现

文章详细阐述了URL的构成,包括HTTP、TCP和HTTPS的区别。讨论了浏览器缓存的工作原理,包括内存缓存和硬盘缓存,以及强缓存和协商缓存的策略。此外,还介绍了DNS解析过程及其对性能的影响,以及TCP连接的三次握手和四次挥手过程。最后,提到了数据传输和页面渲染的相关内容。
摘要由CSDN通过智能技术生成

在这里插入图片描述

1、url解析

1、1地址解析

地址解析
http和tcp的关系

  • tcp:传输通道
  • http:传输协议
  • https:比http多了ssl或者tsl(证书验证)
  • ftp:大文件传输

客户端与服务器直接传送数据,http相当于快递小哥,tcp相当于送‘快递’的‘路’

1、2编码

问号传参方式可能会传递一些中文或者把一个地址作为参数传递过去

  • encodeURI decodeURI 中文空格编码 对整个url编码
  • encodeURIComponent decodeURIComponent 对url中的url编码

2、缓存检查

2.1缓存位置

  • memory cache:内存缓存,页面关闭就没有了
  • disk cache:硬盘缓存,只要不清除系统或者不过期就一直存在
    一般js图片等文件解析后直接存入内存中;而css文件则是存在硬盘文件中

打开网页: 查找 disk cache 中是否有匹配,如有则使用,如没有则发送网络请求

  • 普通刷新(F5):因TAB没关闭,因此memory cache是可用的,会被优先使用,其次才是disk cache
  • 强制刷新 (Ctrl + F5):浏览器不使用缓存,因此发送的请求头部均带有 Cache-control: no-cache,服务器直接返回 200 和最新内容

2.2强缓存和协商缓存

先检查是否存在强缓存,有且未失效,走强缓存
没有或者失效 再检查是否存在协商缓存,有则走协商缓存
没有 获取最新数据

2.2.1强缓存(Expires/ Cache-Control)

浏览器对于强缓存的处理: 根据第一次请求资源时返回的响应头来确定的

  • Expires:缓存过期时间,用来指定资源到期的时间(HTTP/1.0)
  • Cache-Control: cache-contro: max-age-2592000第一次拿到资源后的2592000秒内30天,再次发送请求,读取存中的信息HITP/1.1
  • 两者同时存在的话,Cache-Control优先级高于Expires
    在这里插入图片描述
    强缓存问题:如果服务器文件更新了,但是本地还是有缓存的,这样就拿不到最新的信息了
    html一般不做强缓存,为了保证html每次请求都是正常的http请求
  • 解决方案1:服务器更新资源后,更改资源名称,这样页面导入的是新资源 webpack hash name就是为了解决这个问题
  • 解决方案2:当文件更新后,再html导入时,设置一个后缀(时间戳)
  • 解决方案3:协商缓存
2.2.2 协商缓存(Last-Modified/ETag)

协商缓存就是强制缓存失效后,浏览器携带缓存表示向服务器发起请求,由服务器根据缓存表示决定是否使用缓存的过程

协商缓存不管有没有缓存都携带缓存标识发起请求,由服务器判断是继续使用缓存文件还是获取新的数据

  • 第一次发起请求,不携带标识,服务器收到请求准备内容:last-modified(资源文件的最后更新时间)、ETag:(一个标识,根据资源文件更新生成的,每一次资源更新都会重新生成一个ETag)
  • 第二次发起请求,If-Modified-Since=Last-Modified,If-None-Match=Etag,对比这两个值,一致则返回304,代表资源无更新,可继续使用缓存文件,不一致则重新返回资源文件,状态码为200。
    在这里插入图片描述

2.3数据缓存

在这里插入图片描述

3、dns解析

域名找不到服务器,外网ip才能找到服务器,所以需要dns解析
dns也是有缓存的,如果之前解析过,会在本地有缓存(不一定,有周期会消失)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

dns性能优化:
减少dns请求,一个页面中少用不同的域名,或者资源都放在相同的服务器上
项目上不会这样,项目中会把不同的资源放在不同的服务器上(web服务器、数据服务器、音视频服务器、第三方服务器)
虽然增加了dns解析的时间,但是实现了资源合理利用:每个服务器承受的压力不同,服务器分布式、服务器集群共享,高可用高并发。http同一个源同时发送4-7个,也可以提高http的请求

由于拆分的多,可以使用dns预获取

4、TCP三次握手

建立连接通道

  • seg序号,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记
  • ack确认序号,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1
  • 标志位
    • ACK:确认序号有效。
    • RST:重置连接
    • SYN:发起一个新连接
    • FIN:释放一个连接

在这里插入图片描述

为什么是三次:既要保证数据的可靠传输 又要提高传输效率

5、数据传输

在这里插入图片描述

6、tcp四次挥手

客户端与服务器建立好连接通道之后,客户端把数据传递给服务器,开始发送释放tcp的操作服务器拿到标识后返回给客户端信息 回馈、准备数据给客户端的数据,由于准备数据的时间比较长,所以分两次传递回去
在这里插入图片描述
在这里插入图片描述

7、页面渲染

在这里插入图片描述

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值