浏览器-服务器

问题:打开一个浏览器,在地址栏输入一个网址,按下enter键,到看到整个页面,中间都经历了哪些事情?

  • HTTP请求阶段:向服务器发送请求
  1. 浏览器首先向DNS域名解析服务器发送请求
  2. DNS反向解析:根据浏览器请求的域名,到DNS服务器找到对应的服务器外网IP地址
  3. 通过找到外网IP,向对应的服务器发起请求(首先访问的是服务器的web站点管理工具:准确的来说是我们先基于工具在服务器上创建的很多服务,当有客户端访问的时候 ,服务器会匹配出具体是请求哪个服务)
  4. 通过URL地址中携带的端口号,找到对应的服务,以及服务所管理的项目源文件
  • HTTP响应阶段:服务器会把客户端需要的内容准备好,返回给客户端
  1. 服务器端根据请求地址中的路径名称、问号参数或者哈希值,把客户端需要的内容进行准备和处理
  2. 把准备的内容相应的给客户端(如果请求的是HTML或者css等这样的资源文件,服务器返回的是资源文件中的源代码------》而不是文件本身)
  • 浏览器渲染阶段
  1. 客户端浏览器接受到服务器返回的源代码,基于自己内部的渲染引擎(内核)开始进行页面的绘制和渲染
    1. 首先计算DOM结构,生成DOM TREE
    2. 自上而下运行代码,加载css等资源内容
    3. 根据获取的css生成带样式的 RENDER TREE
    4. 开始渲染和绘制

  • 我们把一次完整的  请求 + 响应 称之为“HTTP事务”
    • 事务:就是完整的一次操作,请求和响应缺一不可。
  • 一个页面完全加载完成,需要向服务器发起很多次HTTP事务操作
    • 一般来说:首先把HTML的源代码拿回来,加载HTMl的时候遇到link、script、img、src、iframe、video、audio【没有设置preload=‘none’】......都会重新和服务端建立HTTP事务
    • 特殊情况:如果我们做了资源缓存处理(304),而且即将加载的资源在之前已经加载过了,这样的操作和传统的HTPP事务有所不一样,他们是从服务器和浏览器的缓存中读取数据,比传统的读取快很多
  • 在客户端向服务器发送请求,以及服务器把内容响应给客户端的时候,中间互相传递了很多内容(客户端把一些内容传递给服务器,服务器把一些内容响应给客户端),我们把传递的内容统称为“HTTP报文”

由此我们可以得知:减少HTTP请求的次数及请求的内容的大小,可以优化前端的性能

猜你喜欢

转载自www.cnblogs.com/smsllStar/p/10289436.html