浏览器中输入www.baidu.com后发生了什么

一道经典的面试题:你输入网址后到页面显示出来,中间发生了什么?

第一步 浏览器查找该域名的 IP 地址

第二步 浏览器根据解析得到的IP地址向 web 服务器发送一个 HTTP 请求

第三步 服务器收到请求并进行处理

第四步 服务器返回一个响应

第五步 浏览器对该响应进行解码,渲染显示。

第六步 页面显示完成后,浏览器发送异步请求。

下面对每个环节做进一步分析:

第一步 浏览器查找该域名的 IP 地址

浏览器把域名发送给系统默认DNS服务器。如果该服务器本地有缓存,且缓存未过期,则直接返回结果
否则向上一级DNS服务器查询,直到DNS根服务器。DNS协议最终会返回A记录(IPv4)或者AAAA记录(IPv6)或者Alias(别名)等。如果DNS失败,浏览器会提示域名找不到或者DNS错误。

DNS解析过程如下:
DNS解析过程

第二步 浏览器根据解析得到的IP地址向 web 服务器发送一个 HTTP 请求

到此为止,浏览器知道了网址的对应服务器IP地址和端口,然后就通过TCP协议发起网络请求。
通过DNS获取到IP后,目标IP和本机IP分别与子网掩码相与的结果相同,那么它们在一个子网,那么通过ARP协议可以查到目标主机的MAC地址,否则的话,需要通过网关转发,也就是目标MAC是网关的MAC。
请求需要进行编码,生成一个HTTP数据包,依次打上TCP、IP、以太网协议的头部。其中TCP头部主要信息是本机端口和目标端口号等信息,用于标识同一个主机的不同进程,对于HTTP协议,服务器端的默认端口号是80,本机浏览器的话生成一个1024到65535之间的端口号。IP头部主要包含本地IP和目标IP等信息。以太网协议头部主要是双方的MAC地址,目标MAC可以由第一条所诉方法得到。以太网数据包的数据部分,最大长度为1500字节,所以如果IP包太大的话还要拆包,比如IP包5000字节,要分为4包,每一包都包含一个IP头部。

第三步 服务器收到请求并进行处理

终于到达处理HTTP协议的软件了。这类软件叫做Web Server。主流的包括Windows系统上的IIS,开源的Apache,Nginx等

HTTP协议处理

Web Server最重要的角色就是处理HTTP协议,给浏览器规范的应答。处理网络请求和相关连接。因此吞吐量和性能是一个重要的指标。开源软件中Nginx是高性能Web服务器的主流选择,IIS是Windows上的标准软件。

HTTPS协议处理

HTTPS协议相关的证书、加解密、签名等也需要Web服务器处理。但是开源软件中,一般选择调用OpenSSL处理,而IIS是微软自行实现的加密库。

第四步 服务器返回一个响应

静态文件

Web Server能够直接处理的只有静态文件。比如请求http://upload.jianshu.io/admin_banners/web_images/2870/48782c3773b1132ee6c594e56211f64499669099.jpg,那么Web服务器根据网址在服务器磁盘上找到这个路径的文件,返回文件内容。

动态内容接口

但是现在的网站除了css、js和图片等资源外,大量的内容都是动态内容。Web服务器需要一个标准接口与不同语言的代码配合,来动态生成网页内容。这个接口包括CGI、FastCGI、ISAPI等。其中ISAPI属于IIS,开源服务器一般支持CGI和FastCGI等。

应用服务器

请求到达应用服务器之后,就开始网站自己的活了。应用服务器通过CGI、FastCGI、ISAPI等接口与Web服务器通信,获得HTTP请求,返回HTTP应答。主流应用服务器根据语言和平台分:

Windows和.NET:IIS。IIS放在这里是因为ASP.NET深度集成,无法分出。
Java:Jetty,JBoss,Tomcat,WebLogic等
PHP:php-cgi

应用服务器可以作为dll运行在Web服务器中(比如IIS,但是IIS也支持FastCGI),或者作为独立进程,通过IPC与Web服务器通信。
接下来就是程序内部的事情了。省略。

数据库服务器

应用服务器在生成网站内容的过程中一般需要连接数据库存取数据。目前主流数据库包括:

MySQL:开源软件,SUN公司被收购后由Oracle负责
MariaDB:SUN被收购后,因为社区与Oracle的纠纷,从MySQL分支出来的版本。
SQL Server:微软开发的商用数据库。其中Express Edtion免费。
Oracle:Oracle公司开发的商用数据库。
PostgreSQL:开源软件,号称开源中功能最强。
DB2:IBM公司开发的商用数据库。
Redis: NoSQL,支持多种数据结构
MongoDB: NoSQL

第五步 浏览器对该响应进行解码,渲染显示

HTML和CSS解析
最终应用服务器生成了HTML,然后给Web Server。Web Server生成HTTP应答,然后通过复杂的网络线路回到用户电脑中。用户电脑的操作系统把应答给浏览器。浏览器开始渲染。

以下是浏览器渲染的主要过程:
在这里插入图片描述
开始从头到尾解析HTML,并生成DOM树。其中如果有外链资源,需要再次通过网络层以此下载。如果是"script"标签,则需要调用JS引擎执行脚本。如果是css,则开始解析CSS,得到一系列样式规则。DOM树生成之后,与样式规则拼接,得到渲染树。
渲染树经过排版引擎得到最终的渲染位置和样式,然后调用操作系统的绘图API绘制页面(部分内容会调用显卡进行硬件加速)。

第六步 页面显示完成后,浏览器发送异步请求。

过程:

页面显示完成后客户端仍与服务器端保持着联系。

它会持续与服务器保持联系来及时更新一些页面信息。在浏览器中执行的 JavaScript代码会给服务器发送异步请求。这个异步请求发送给特定的地址,它是一个按照程式构造的获取或发送请求。

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值