从输入url到页面加载完的过程中都发生了什么事情

这其实是一个经典的面试题了,都可以自由发挥各个方面,说出自己的理解,而且涉及的面也是巨多,就看怎么看待了。

URL,英文是Uniform / Universal Resource Locator,中文的翻译就是统一资源定位符,俗称网页地址,简短的说法是网址,用于完整地描述Internet上网页和其他资源的地址的一种标识方法。

它从左到右由如下部分构成:

1.   传送协议protocol:最常用的是HTTP协议(超文本传输协议),它也是目前WWW中应用最广的协议;其他也还有ftp、file、https、、mailto、git等,当然也有自定义的协议(私有协议),例如tencent等;

2.   主机host:通常为域名或者IP地址,当然在其前面还可以有连接到服务器所需的用户名和密码;

3.   端口号port:以数字形式表示,每种协议都有自己默认的端口号,例如http协议的默认端口号就是80,https的默认端口号就是443等;

4.   路径path:以“/”字元区别路径中的每一个目录名称,一般表示的就是主机上的一个目录或文件地址;

5.   查询query:以“?”字元为起点,每个参数以“&”隔开,再以“=”分开参数名称与其对应的值;

6.   片段fragment:也就是在浏览器环境下location的hash值,用于指定网络资源中的片断,一般用于定位到某个位置。

介绍了URL,下边直说最简单的通过浏览器发起HTTP请求资源过程,没有代理,通过域名访问的情况,将要发生如下事情:

1.   浏览器查询缓存,如果缓存存在跳到第9步;

2.   浏览器询问操作系统服务器的IP地址;

3.   操作系统做DNS查询,返回IP地址给浏览器;

4.   浏览器打开对服务器的TCP连接;

5.   浏览器通过TCP连接发送HTTP请求;

6.   浏览器接收HTTP响应并且可能关掉TCP连接,或者是重新使用连接处理新请求(也就是keepalive);

7.   浏览器检查HTTP响应是否为一个重定向(3xx 结果状态码 ),一个验证请求(401),错误(4xx 5xx)等等,这些都是不同响应的正常处理(2xx);

8.   如果响应可缓存,将存入缓存;

9.   浏览器解码响应(例如:如果它是gziped压缩);

10.   浏览器决定如何处理这些响应(例如,它是HTML页面,一张图片,一段音乐);

11.   浏览器展现响应,对未知类型还会弹出下载对话框(现在一般不会弹出了,用户对浏览器设置而定)。

posted @ 2020-07-23 14:26  小军的代码库  阅读(209)  评论(0编辑  收藏  举报