当您在浏览器中浏览网站时到底发生了什么?

Rac*_*hel 67 browser

当我们在浏览器中输入 www.cnn.com 时,幕后发生了什么,信息如何显示在屏幕上?

技术解释将不胜感激。

Ila*_*ste 140

浏览器: “好吧,我有一个用户请求这个地址: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总部,一条消息终于出现在了Web Server的门口。

CNN网络服务器: “Nzhôô!客户!他想要新闻!头版!怎么样?”

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 幸灾乐祸了!”

浏览器: “嘿用户!网站准备好了 - 去获取你的新闻!”

  • 所以这就是我的电脑在天黑后所做的。 (17认同)
  • 很好的解释......向你致敬......宾果...... (7认同)
  • 精彩的讲故事:) (7认同)
  • @dex:......直到今天,他们仍然很强大,以一种在历史书中值得称赞的勤奋来整理用户的所有异想天开的要求。但是,就像所有事物一样,总有一天他们会退休进入过时状态,优雅地为更现代的方法让路,以适应更现代的时代。但是请放心,他们将永远留在我们的遗产中,带着会意的微笑看着他们,并将他们在新兴互联网通信的这个充满活力的时代学到的所有惨痛教训传递给后代。 (5认同)
  • 反对者万岁,对吧,@wahnfrieden?我认为它非常准确,而且信息量很大。 (3认同)

小智 20

Web 是如何工作的:HTTP 和 CGI​​ 解释

也是来自 CERN 的一个很好的解释——网络的母校:网络是如何工作的

在此处输入图片说明


Kyl*_*tan 18

  • 浏览器将您键入的内容(URL)拆分为主机名和路径。
  • 浏览器形成一个 HTTP 请求以请求给定主机名和路径的数据。
  • 浏览器执行 DNS 查找以将主机名解析为 IP 地址。
  • 浏览器与通过 IP 地址指定的计算机建立 TCP/IP 连接。(这个连接实际上是由多台计算机组成的,每台计算机都将数据传递给下一台。)
  • 浏览器将 HTTP 请求通过连接发送到给定的 IP 地址。
  • 该计算机从 TCP/IP 连接接收 HTTP 请求并将其传递给 Web 服务器程序。
  • Web 服务器读取主机名和路径并查找或生成您要求的数据。
  • Web 服务器生成包含该数据的 HTTP 响应。
  • Web 服务器通过 TCP/IP 连接将该 HTTP 响应发送回您的机器。
  • 浏览器接收 HTTP 响应并将其拆分为标头(描述数据)和正文(数据本身)。
  • 浏览器解释数据以决定如何在浏览器中显示它 - 通常这是指定信息类型及其一般形式的 HTML 数据。
  • 一些数据将是元数据,用于指定需要加载的更多资源,例如用于详细布局的样式表、内嵌图像或 Flash 电影。这个元数据再次被指定为一个 URL,整个过程对每一个重复,直到所有的都被加载。


wah*_*den 12

第一步是 DNS(域名服务器)查找。它使用在您的网络设置中指定的 DNS 服务器(或由 DHCP 提供给您)来查找顶级域 (cnn.com),然后向该域的名称服务器询问指定子域 (www.cnn.com) 的 IP 地址。

获得 IP 地址后,您的浏览器开始与 Web 服务器通信。这是使用指定的协议(通常默认为 HTTP 1.1)完成的。向服务器发出对“/”的“GET”请求,服务器以 HTML 文档内容和适当的标题(告诉浏览器文档的内容类型、HTML 和其他信息)进行响应。然后浏览器解析文档并找到它需要嵌入到页面中的任何 URL(如图像或链接的样式表),并对每个 URL 执行 GET 请求。

浏览器通常还会自动向“/favicon.ico”发出 GET 请求(以在站点标题旁边显示小 CNN 图标)。

您的浏览器也可能会在其请求标头中指定它希望使用 gzip 算法压缩响应内容。如果服务器支持,这会使文件下载小得多。这对您来说都是透明的,即使这就像下载 ZIP 文件并解压一样。

当您重新加载页面时,您的浏览器会检查该页面是否已经缓存在您的系统中,如果是,它会仅针对文档的标题发出 HTTP 请求,并检查其修改日期。如果此日期晚于其缓存副本,它会再次请求完整的文档内容并刷新页面。否则它只会使用您的本地副本。

  • 他询问了技术细节。如果他愿意,他可以查询IP。 (6认同)

red*_*una 8

与其他答案相去甚远的是 CNN 方面发生的事情:

  • CNN 的一台机器从您的计算机接收请求页面的消息。
  • 它将此请求重定向到 CNN 用于其网站的多台计算机之一(这样做的原因是,通过这种方式,您可以将响应网页放在一起的工作分散到多台计算机上)
  • CNN 计算机收到您的请求,并以几乎完全预先计算好的网页进行响应,但在发送给您之前,它可能会更改一些内容(可能是顶部的广告,也可能是头条新闻)。有时,计算机每次收到请求时都会从许多小组件中组装页面;不知道 CNN 是做什么的
  • 响应通过网络到达您的计算机,然后显示它。
  • 响应不包括图像:您的计算机然后发送另一个对图像的请求,并且发生了几乎相同的情况。


小智 6

这显然不是技术解释,但它是一个可爱的视觉辅助(来自优秀的Vladstudio.com),可能对某些人有帮助:

互联网如何运作