一个请求的使命(当一个用户在浏览器里输入www.baidu.com后)

本文详细解析了用户在浏览器中输入网址后,从域名解析到页面渲染的全过程,包括DNS解析、服务器集群负载均衡、业务逻辑处理及CDN加速原理。

当一个用户在浏览器里输入www.baidu.com后,页面显示内容前,都经历些什么了呢?

1、首先它会请求DNS把这个域名解析成对应的IP地址,然后根据这个IP地址找到对应的服务器。

这里大家可能会有一个问题,DNS是什么呢?

DNS是Domain Name System缩写,Domain Name被译为域名,所以DNS就是域名系统,它可以理解为是一种【分布式网络目录服务】。主要用于域名和IP地址相关转换映射的数据库。

2、找到对应的服务器后,可能会是一个服务器集群,会有一个负载均衡服务,例如nginx等,通过配置相应的权重找到具体的一台服务器。

3、被选中的这台服务器处理GET或者POST请求,处理具体的业务逻辑,从分布式存储服务里拿到数据,可能是静态文件或者数据库等。

4、当数据返回到浏览器时,浏览器解析数据发现会有一些静态资源,例如CSS、JS或者图片等,这时又会发起另外一个HTTP请求,这些请求会到CDN上,CDN服务器会处理这个请求,对页面进行渲染。

那么CDN又是什么呢?

CDN是Content Delivery Network缩写,内容分发网络。可以在百度百科上看下大概说明,可以理解为获取静态资源就近原则,解决网络传输问题。https://baike.baidu.com/item/CDN/420951?fr=aladdin

### 3.1 域名解析与HTTP请求建立 当用户浏览器输入 `www.baidu.com` 并按下回车后,浏览器首先会通过域名系统(DNS)解析该域名对应的IP地址。域名解析通常使用UDP协议,目标端口为53,请求类型为A记录(IPv4地址查询)[^3]。如果本地DNS缓存中没有相关记录,浏览器会向本地DNS服务器发送查询请求。解析成功后,会得到百度服务器的IP地址(如220.181.27.48)[^2]。 ### 3.2 网络层与传输层处理 在获得目标IP地址后,计算机会通过ARP协议查找该IP地址对应的MAC地址。如果本地ARP缓存中没有相关信息,系统会广播ARP请求报文,询问目标IP地址的MAC地址[^4]。一旦获得MAC地址,数据包就可以通过网络层(IP协议)和链路层(以太网协议)进行传输。 ### 3.3 TCP连接建立与HTTP通信 浏览器与服务器建立TCP连接(默认端口80),并进行三次握手。首先,客户端发送SYN报文,表示请求建立连接,并携带初始序列号。服务器收到SYN报文后,返回SYN-ACK报文,表示同意建立连接,并携带服务器的初始序列号以及对客户端序列号的确认。最后,客户端发送ACK报文,确认服务器的序列号,完成三次握手,连接建立成功[^1]。 ### 3.4 HTTP请求与响应 TCP连接建立后,客户端会发送HTTP请求报文。以GET请求为例,请求报文包括请求行、请求头和请求体。请求行包含请求方法(如GET)、请求的资源路径和HTTP版本;请求头包含客户端信息、接受内容类型、主机名等;请求体通常在POST请求中携带数据[^1]。 服务器收到HTTP请求后,会处理该请求,并返回HTTP响应报文。响应报文包括状态行、响应头和响应体。状态行包含HTTP版本、状态码和状态消息;响应头包含服务器信息、内容类型、内容长度等;响应体包含实际的响应数据,如HTML文档、图片等[^1]。 ### 3.5 TCP连接关闭 在数据传输完成后,客户端和服务器会关闭TCP连接。关闭过程包括四次挥手。首先,客户端发送FIN报文,表示请求关闭连接。服务器返回ACK报文,确认客户端的FIN报文。随后,服务器发送FIN报文,表示关闭连接。最后,客户端返回ACK报文,确认服务器的FIN报文,连接关闭完成[^1]。 ### 3.6 浏览器渲染 浏览器接收到服务器返回的HTTP响应数据后,会解析HTML文档,并根据文档中的CSS和JavaScript代码进行渲染。最终,用户可以看到完整的网页界面[^1]。 ```http GET / HTTP/1.1 Host: www.baidu.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: keep-alive ``` ```http HTTP/1.1 200 OK Date: Thu, 18 Nov 2021 12:00:00 GMT Server: Apache/2.4.1 (Unix) Content-Type: text/html; charset=UTF-8 Content-Length: 1234 Connection: keep-alive <!DOCTYPE html> <html> <head> <title>Baidu</title> </head> <body> <h1>Welcome to Baidu</h1> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值