当你敲下www.baidu.com后发生了什么 —Web前端与后端_网络基础/18/4/7

本文详细介绍了从输入域名到页面加载完成的全过程,包括DNS解析、TCP连接建立、HTTP请求与响应,以及HTML文件的解析与渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从域名到页面 —— Web前端与后端

这个问题可归结为一个很形象的问题:

  • 从你敲下www.baidu.com之后发生了什么?
    从全局角度可总结为一下几点:
    1,浏览器向DNS服务器查找输入URL对应的IP地址
    2,DNS服务器返回网站的IP地址
    3,浏览器根据IP地址与目标Web服务器在80端口上建立TCP 连接。
    4,浏览器获取客户端请求页面的HTML代码。
    5,浏览器在显示窗口渲染HTML文件,并进行界面控制显示
    6,窗口关闭时,浏览器终止与服务器的连接

一,DNS域名解析

  • 对于第1,2步的DNS域名解析,是一个服务于应用层的域名转换协议。《计算机网络—自顶向下》中对DNS有如下定义:
    1) 一个由分层的DNS服务器(DNS Doimain Name System,DNS)实现 的分布式数据库。
    2) 一个使得主机能够查询分布式数据库的应用层协议。
  • 我们知道,用户输入的网址(域名)是IP地址的一个别名,在一个DNS内,一个域名对应一个IP地址。域名系统DNS的工作就是将域名与它的IP地址对应起来。
  • DNS的工作分为以下几步:(以www.baidu.com为例)
    1) 同一台用户主机上运行着DNS应用的客户端
    2) 浏览器从上述URL中抽取出主机名 www.badiu.com 并将这台主机名传送给DNS应用的客户端
    3) DNS 查询浏览器缓存 -> 查询系统缓存 -> 查询路由器缓存 -> 查询ISP DNS缓存。进行递归搜索,从.com顶级域名服务器到 baidu 的域名的服务器。
    4) DNS 客户向服务器发送一个包含主机名的请求。
    5) DNS 客户最终会收到一份回答报文,其中有对应该主机的IP地址
    6) 一旦浏览器收到一份来自DNS域名服务器的该IP地址,它能够向位于该IP的80端口的HTTP服务器进程发起一个TCP连接。
  • 对于其中的第3步——查询查询IP的过程中,首先查找自身缓 存,对于DNS缓存有如下解释:

共同实现DNS分布式数据库的所有DNS服务器储存了 资源记录 (Resource Record,RR),
RR提供了主机名到IP的映射,这也是为了改善时延性能并减少在因特网上到处传输的DNS报文数量。
其原理很简单:在一个请求链中,当某DNS服务器接收到一个DNS回答时,它能够将该回答中的信息缓存到本地储存器。
——《计算机网络—自顶向下》

对于其第二条——递归搜索,因为在以往的集中式设计中,客户将所有的DNS请求发往同一个DNS服务器,但对于今天用户数量巨大的因特网来说,在单一的DNS服务器上运行集中式数据库完全没有可扩展能力,因此采用了分布式数据库的设计方案:
这里写图片描述

  • 一个域名服务器虽然只记录一个小的子网内的主机名和IP地址,但所有的域名服务器联合起来工作,就能将全网内的域名与它们的IP地址对应起来。这也就意味着,如果一个域名服务器无法找到某个请求域名所对应的IP地址,他就会向其他域名服务器发出请求进行寻找。

1) 根DNS域名服务器:在因特网上有13个根域名服务器,
2) 顶级域DNS服务器:如 com,org,net,edu,gov等以及所有国家 的顶级域名。
3) 权威DNS服务器:在因特网上具有公共可访问主机的域名。

二,HTML文件的获取与显示

对于上面的第3步——TCP连接的建立就跳过。

  • HTML文件的请求
    分析HTML文件的请求的过程其实就是分析HTTP通信的过程,在浏览器通过DNS获取到了域名对应的IP地址后,会立即给Web服务器发送一个HTTP请求:
GET http://www.baidu.com/index.html HTTP/1.0
User-Agent: Wget/1.12 (linux-gun)
Host: www.baidu.com
Connection: close
  • GET请求声明了客户端想要获取的该网址上的某一个html文件。close表示短连接,发送之后立即关闭。
    请求中还包含浏览器储存的该域名的cookies,在不同的请求中,cookies是与跟踪一个网站状态相匹配的键值,cookies会储存登录用户名,服务器分配的密码和一些用户设置等。Cookies会以文本文档形式储存爱客户机里,每次请求时发送给服务器。

接下来服务器会发送一个HTML响应:

HTTP/1.0 200 OK
Server: BWS/1.0
Connect-Length: 8024
Connect-Type: text/html;charset =gbk
Set-Cookies: ............................
Via: 1.0 localhost (squid/3.0 STABLE18)

服务器回复200 OK表示请求成功,Connect-Type: text/html表示让浏览器将该响应以HTML形式呈现,而不是以文形式下载它。

接下来会对这个HTML文件进行解析并呈现出来。

所以综上所述,可以将开头的步骤细化一下:

1,浏览器获得URL对应的请求,向操作系统请求该URL对应的IP地址
2,操作系统查询DNS(首先查询本地host文件,没有则查询网络)获得对应的IP地址
3,浏览器发送TCP连接的请求向IP地址对应的服务器(带SYN表示的数据包)
4,服务器收到TCP连接的请求后,回复可以连接请求(带有SYN/ACK标志的数据包)
5,浏览器收到回传的数据,确认OK后,还会向服务端发送数据(带ACK标志的数据包),表示三次握手结束。
6,三次握手成功以后,浏览器和服务器端开始TCP连接形式传输数据包。
7,服务器传给浏览器所需要的资源数据
8,浏览器获得数据,渲染王永强然后呈现给用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值