客户端和服务器端交互模型

客户端:所有可以向服务器发送请求的一端都是客户端
服务器端:所有可以接受客户端的请求,并且给其相应一些内容的都是服务器(较高的电脑)

在地址栏输入一个网址,到看到整个页面,中间经历了哪些事情(一次完整http事务=请求+响应)

【http请求阶段:向服务器发送请求】

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



一个页面完全加载完成需要向服务器发起很多次http事务操作

一般来说:首先把html源代码拿回来,加载html的时候,遇到link/script/img/[src]/iframe/video和audio[没有设置preload=‘none’]...都会重新和服务器端建立http事务交互
特殊情况:如果我们做了资源缓存处理[304],而且即将加载的资源在之前已经加载过了,这样的操作和传统的http事务有所不一样,他们是从服务器和浏览器的缓存中读取数据,比传统的读取快很多。


在客户端向服务器发送请求,以及服务器把内容响应给客户端的时候,中间相互传递了很多内容(客户端把一些内容传递服务器,服务器把一些内容响应给客户端),我们把传递的内容统称为http报文


前端性能优化

  1. 减少http请求的次数及请求内容大小(css、js合并成一个,图片延迟,css使用内嵌式)

你可能感兴趣的:(客户端和服务器端交互模型)