网页是如何被访问的
-
输入域名并回车,如www.baidu.com;
-
先在浏览器的DNS缓存下查询是否有对应域名映射;
浏览器自身也带有一层DNS缓存。Chrome 缓存1000条DNS解析结果,缓存时间大概在一分钟左右。(Chrome浏览器通过输入:chrome://net-internals/#dns 打开DNS缓存页面)
-
再在本地hosts配置文件(C:\Windows\System32\drivers\etc\hosts)查询。
- 有,直接返回对应的ip地址,这个地址中有要访问的web程序
- 没有,去DNS服务器
- 有,直接返回对应的ip地址,这个地址中有要访问的web程序
-
首先我们的域名解析服务器会向根域服务器(全球只有13台)发出请求。显然,仅凭13台服务器不可能把全球所有IP都记录下来。所以根域服务器记录的是com域服务器的IP、cn域服务器的IP、org域服务器的IP。如果我们要查找.com结尾的域名,那么我们可以到com域服务器去进一步解析。根域服务器告诉我们com域服务器的IP。
-
接着我们的域名解析服务器会向com域服务器发出请求。根域服务器并没有mail.google.com的IP,但是却有google.com域服务器的IP。我们的域名解析服务器会向google.com域服务器发出请求。如此重复,直到获得mail.google.com的IP地址。
-
获取域名对应的IP后,一步步向上返回,直到返回给浏览器
-
发起TCP请求
浏览器会选择一个大于1024的本机端口向目标IP地址的80端口发起TCP连接请求。经过标准的TCP握手流程,建立TCP连接。
-
发起HTTP请求
其本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。
-
负载均衡
- 什么是负载均衡?当一台服务器无法支持大量的用户访问时,将用户分摊到两个或多个服务器上的方法叫负载均衡。
- 负载均衡的方法很多,Nginx负载均衡、LVS-NAT、LVS-DR等。这里,我们以简单的Nginx负载均衡为例。
- 什么是Nginx?Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。Nginx有4种类型的模块:core、handlers、filters、load-balancers。我们这里讨论其中的2种,分别是负责负载均衡的模块load-balancers和负责执行一系列过滤操作的filters模块。
- 如果我们的平台配备了负载均衡的话,前一步DNS解析获得的IP地址应该是我们Nginx负载均衡服务器的IP地址。所以,我们的浏览器将我们的网页请求发送到了Nginx负载均衡服务器上。
- Nginx根据我们设定的分配算法和规则,选择一台后端的真实Web服务器,与之建立TCP连接、并转发我们浏览器发出去的网页请求。
- Web服务器收到请求,产生响应,并将网页发送给Nginx负载均衡服务器。
- Nginx负载均衡服务器将网页传递给filters链处理,之后发回给我们的浏览器.
-
浏览器渲染
(1)浏览器根据页面内容,生成DOM Tree。根据CSS内容,生成CSS Rule Tree(规则树)。调用JS执行引擎执行JS代码。
(2)根据DOM Tree和CSS Rule Tree生成Render Tree(呈现树)。
(3)根据Render Tree渲染网页。
在浏览器解析页面内容的时候,发现页面引用了其他未加载的image、css文件、js文件等静态内容,因此开始了第二部分。 -
网页静态资源加载
以阿里巴巴的淘宝网首页的logo为例,其url地址为img.alicdn.com/tps/i2/TB1bNE7LFXXXXaOXFXXwFSA1XXX-292-116.png_145x145.jpg
我们清楚地看到了url中有cdn字样。
什么是CDN?如果我在广州访问杭州的淘宝网,跨省的通信必然造成延迟。如果淘宝网能在广东建立一个服务器,静态资源我可以直接从就近的广东服务器获取,必然能提高整个网站的打开速度,这就是CDN。CDN叫内容分发网络,是依靠部署在各地的边缘服务器,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度。接下来的流程就是浏览器根据url加载该url下的图片内容。本质上是浏览器重新开始第一部分的流程,所以这里不再重复阐述。区别只是负责均衡服务器后端的服务器不再是应用服务器,而是提供静态资源的服务器。
转载自:https://blog.csdn.net/weibo1230123/article/details/82899205

浙公网安备 33010602011771号