一个页面从进入到页面加载显示完成发生了什么(面试)

1. 检查有无缓存,有的话则不请求服务器直接加载

2. DNS查询

通过DNS查询到相应的IP地址(你的路由问电信公司,于是电信公司返回对应的IP地址)
补充说明:

  • 你若修改了hosts文件,可自己指定域名的IP,绕过DNS。
  • URL和域名是两个概念:例如,xiedaimala.com是这个网站的域名,根据这个域名找到写代码啦的服务器,xiedaimala.com/courses 是URL,根据这个URL定位到写代码啦的课程表。
  • IP 地址与域名不是一一对应的关系:可以把多个提供相同服务的服务器 IP 设置为同一个域名,但在同一时刻一个域名只能解析出一个 IP地址;同时,一个 IP 地址可以绑定多个域名,数量不限;

3. 建立TCP连接(三次握手)

  • 客户端对服务器:现在可以连接你吗,把SYN设为1,seq=client_isn发送给服务器。
  • 服务器:准备好了,可以连接,把SYN=1,seq=server_isn,ack=client_isn+1,发送给客户端
  • 客户端:那我开始连接你了,把SYN=0,seq=client_isn+1,ack=server_isn+1

4. 发送HTTP请求(请求的四部分)

GET /xxx HTTP/1.1
Host: baidu.com
Accept: text/html

POST /xxx HTTP/1.1
Host: baidu.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Content-Length: ...
(断行)
user=123&&pass=123

5. 后台处理请求

    1. 监听80端口
    1. 路由
    1. 渲染HTML模版
    1. 生成响应

6. 服务器发送HTTP响应

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: ....
(断行)

...

7 ready.state === 4 接收完成

8. 关闭TCP连接(四次握手)

9. 解析HTML

  • 查看DOCTYPE,选择html5还是xml
  • 逐行阅读html,Chrome会等css加载完后再渲染html,IE会直接渲染html,等css下载完后再渲染一次html
  • 下载css,IE可以同时下4个,Chrome可以同时下8个,然后一个一个依次解析css
  • js也是同时下载,但依次解析,解析js的时候一定会阻止html的渲染,等js解析完了再渲染html

10. 下载图片, 解析图片

11. 渲染dom树,渲染样式树?

12. 执行JS

你可能感兴趣的:(一个页面从进入到页面加载显示完成发生了什么(面试))