当我们在浏览器中输入 www.cnn.com 时,幕后发生了什么,信息又如何显示在屏幕上?
如果能提供技术解释的话我将非常感激。
答案1
浏览器:“好的,那么,我有一个用户请求这个地址:www.cnn.com。我想既然没有斜线或其他东西,这是一个主页的直接请求。也没有定义协议或端口,所以我假设它是 HTTP 并且转到端口 80...哦,好吧,首先要做的事情。嘿 DNS,伙计,醒醒!这个 www.cnn.com 藏在哪里?”
DNS:“好的……等一下,我会询问 ISP 服务器。好的,看起来像是 157.166.226.25。”
浏览器:“好的。互联网协议套件,轮到你了!请拨打 157.166.226.25。向他们发送这个 HTTP 标头。它要求提供他们主页的基本结构和内容,这样我就知道还要获取什么……哦,我想你不会关心这个。”
TCP/IP:“你是什么意思轮到我了?难道我不是在为 DNS 拼命工作吗?天啊,在这里要怎样才能得到一点赞赏...”
浏览器:...
TCP/IP:“是的,是的……连接……我会让网关转发它。你知道,这并不容易,我必须把你的请求分成多个部分,这样它才能到达终点,然后从我收到的数千个包裹中整理他们发回的所有东西……啊,对,你不在乎。想想吧。”
与此同时,在 CNN 总部,一条消息终于到达了网络服务器的门口。
CNN 网络服务器:“恩佐!有顾客!他想要新闻!头版新闻!怎么样?”
CNN服务器端脚本引擎:“好的,就这么做!上头版吧?”
CNN数据库服务器:“耶!帮我工作!你需要什么内容?”
CNN服务器端脚本引擎:“……嗯,对不起 DB,我的缓存里就有首页的副本,不需要编译任何东西。但是,嘿,把这个用户 ID 保存起来,我也会把它发送给客户,这样我们就知道以后要和谁交谈了。”
CNN数据库服务器:“耶!”
回到用户的计算机...
TCP/IP:“好吧,回复来了。天哪,我怎么觉得这会是一件大事呢……”
浏览器:“哇哦……这里面有各种各样的 javascript 代码……一堆图片,几个表格……好吧,这需要一段时间才能渲染出来。最好赶紧开始吧。嘿,IP 系统,你还需要获取很多东西。让我看看我需要从 i.cdn.turner.com 获取一些样式表 - 通过 HTTP 并请求文件 /cnn/.element/css/2.0/common.css。然后从 i.cdn.turner.com 获取一些脚本,我目前已经数到六个了……”
TCP/IP:“我明白了。只要给我服务器地址和所有东西。并将文件内容包装在 HTTP 请求中,我不想处理它。”
DNS:“检查 i.cdn.turner.com...嘿,有点小知识,它实际上叫做 cdn.cnn.com.c.footprint.net。IP 是 4.23.41.126”
浏览器:“当然,当然......等一下,这需要几纳秒来处理,我正在尝试理解整个脚本......”
TCP/IP:“嘿,这是您要求的 CSS。哦,还有……是的,那些附加脚本也刚刚回来了。”
浏览器:“呼,还有……某种视频广告!”
TCP/IP:“哦天哪,这听起来多有趣啊……”
浏览器:“还有各种各样的图像!而且这个 CSS 看起来有点恶心……对,所以如果那部分放在那里,并在顶部有这条线……那怎么才能放得下呢……不,我得把它拉长一点才能做到……哦,但是另一个 CSS 文件覆盖了那个规则……好吧,这个肯定不会很容易渲染!”
TCP/IP:“好吧,好吧,别再分散我的注意力了,这里还有很多事要做。”
浏览器:“用户,这里有一份简短的进度报告。抱歉,这一切可能需要几秒钟,大约有 140 个不同的元素需要加载,目前加载了 16 个。”
一两秒后……
TCP/IP:“好的,就这些了。嘿,听着……抱歉我刚才对你大发雷霆,你能应付吗?这对你来说似乎也是很大的负担。”
浏览器:“呼,是啊,现在这么多网站,确实不容易。好吧,我会想办法的。这就是我来这里的目的。”
TCP/IP:“我想这对我们所有人来说现在都是相当沉重的负担......哦,别再幸灾乐祸了 DNS!”
浏览器:“嘿,用户!网站已准备就绪 - 快去获取新闻吧!”
答案2
CERN(Web 母校)也给出了很好的解释:网络如何运作
答案3
- 浏览器将您输入的内容(URL)分为主机名和路径。
- 浏览器形成 HTTP 请求,以请求给定主机名和路径的数据。
- 浏览器执行 DNS 查找以将主机名解析为 IP 地址。
- 浏览器通过 IP 地址与指定的计算机建立 TCP/IP 连接。(此连接实际上由多台计算机组成,每台计算机都将数据传递给下一台计算机。)
- 浏览器通过连接将 HTTP 请求发送到给定的 IP 地址。
- 该计算机从 TCP/IP 连接接收 HTTP 请求并将其传递给 Web 服务器程序。
- Web 服务器读取主机名和路径并查找或生成您请求的数据。
- Web 服务器生成包含该数据的 HTTP 响应。
- Web 服务器通过 TCP/IP 连接将该 HTTP 响应发送回您的计算机。
- 浏览器接收 HTTP 响应并将其拆分为标头(描述数据)和正文(数据本身)。
- 浏览器解释数据以决定如何在浏览器中显示它 - 通常这是指定信息类型及其一般形式的 HTML 数据。
- 部分数据将是指定需要加载的更多资源的元数据,例如详细布局的样式表、内联图像或 Flash 影片。此元数据再次指定为 URL,整个过程对每个资源重复进行,直到全部加载完毕。
答案4
到目前为止,其他答案都遗漏了 CNN 方面发生的事情:
- CNN 的一台机器从您的计算机接收请求该页面的消息。
- 它将请求重定向到 CNN 用于其网站的众多计算机之一(这样做的原因是,这样可以将整理响应网页的工作分散到多台计算机上)
- CNN 计算机收到您的请求后,会回复一个几乎完全预先计算好的网页,但也许它会在发送给您之前更改一些内容(可能是顶部的广告,也可能是头条新闻)。有时计算机每次收到请求时都会从许多小组件中组装出一个页面;不确定 CNN 会怎么做
- 响应通过网络传输到您的计算机,然后显示出来。
- 响应中不包含图像:然后您的计算机会发送另一个图像请求,并且几乎会发生相同的情况。