交互过程 #

  1. 用户请求服务器资源
  2. 浏览器作为代理查找远程资源,封装用户请求并发送给服务器
  3. 服务器根据用户请求的资源路径及其它参数,进行业务处理把生成的结果发送给浏览器
  4. 浏览器解析结果并呈现给用户

具体步骤 #

  1. 把URL地址通过DNS解析为具体的服务器主机
  2. 浏览器封装HTTP请求 (window.navigator.userAgent)
  3. 浏览器创建与服务器的TCP连接
  4. 浏览器发出HTTP请求
  5. 服务器收到请求后交给相应的进程处理
  6. 服务器把处理后的结果发送给浏览器
  7. 浏览器生成渲染树和DOM树渲染页面
  8. 浏览器处理页面中嵌入的资源和异步请求

域名解析 #

DNS解析 #

  1. 浏览器缓存
  2. 系统缓存
  3. 路由器缓存
  4. ISP(Internet Service Provider)DNS缓存
  5. 从顶级域名服务器的根域名服务器开始递递归查询

HTTP请求 #

request

GET / HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Host: www.google.cn
Connection: Keep-Alive

创建TCP连接 #

请求的方式 #

服务器 #

处理客户端请求的程序 #

每个进程会占用监听一个端口,请求这个端口就可以把请求发给相应的服务

服务器进行处理 #

响应体 #

response

渲染页面 #

DOM树和渲染树 #

DOM树和渲染树都是边解析边生成页面的,所以会随着下面的页面内容不断调整

内嵌资源处理 #

JS和Ajax #

CSS #

为何CSS放上面,JS放下面 #

  1. CSS放在下面会新渲染
  2. JS放在上面一方面会阻塞渲染执行,出现白页面,一方面得到的DOM树不完整

状态码 #