当您在浏览器中输入 URL 时会发生啥 [关闭]
Posted
技术标签:
【中文标题】当您在浏览器中输入 URL 时会发生啥 [关闭]【英文标题】:what happens when you type in a URL in browser [closed]当您在浏览器中输入 URL 时会发生什么 [关闭] 【发布时间】:2011-01-06 17:51:36 【问题描述】:有人能告诉我从我在浏览器中输入 URL 到我在浏览器上看到页面的这段时间,幕后发生了什么吗?详细说明该过程会很有帮助。
【问题讨论】:
虽然这可能与编程相关(最终) - 可以回答的详细程度将(并且已经)填充卷。请重述为编程查询。 获取 O'Reilly 的 DNS 和绑定 书。它只有 624 页。 edusagar.com/articles/view/70/… 这是最好的答案! 为了子孙后代,这里是互联网工作原理的详细版本 - goo.gl/eEHmpZ。 现在正在共同努力以尽可能详细地回答这个问题:github.com/alex/what-happens-when/blob/master/README.rst 【参考方案1】:查看 HTTP 的规范。或者要开始使用,请尝试http://www.jmarshall.com/easy/http/
【讨论】:
【参考方案2】:首先计算机查找目标主机。如果它存在于本地 DNS 缓存中,它会使用该信息。否则,将执行 DNS 查询,直到找到 IP 地址。
然后,您的浏览器打开到目标主机的 TCP 连接并根据 HTTP 1.1 发送请求(或者可能使用 HTTP 1.0,但普通浏览器不再这样做了)。
服务器查找所需资源(如果存在)并使用 HTTP 协议进行响应,将数据发送到客户端(=您的浏览器)
然后,浏览器使用 html 解析器重新创建文档结构,然后在屏幕上呈现给您。如果它找到对外部资源的引用,例如图片、css 文件、javascript 文件,它们的传递方式与 HTML 文档本身相同。
【讨论】:
【参考方案3】:注意:这是一个非常粗略且过于简单的草图,假设最简单的 HTTP 请求(无 HTTPS、无 HTTP2、无额外功能)、最简单的 DNS、无代理、单栈 IPv4、只有一个 HTTP 请求,另一端是一个简单的 HTTP 服务器,任何步骤都没有问题。对于大多数当代意图和目的来说,这是一个不切实际的场景;所有这些在实际使用中都要复杂得多,而且自编写以来,技术堆栈已经变得复杂了一个数量级。考虑到这一点,以下时间表仍然有效:
-
浏览器检查缓存;如果请求的对象在缓存中并且是新鲜的,请跳到 #9
浏览器向操作系统询问服务器的 IP 地址
操作系统进行 DNS 查找并将 IP 地址回复给浏览器
浏览器打开与服务器的 TCP 连接(此步骤使用 HTTPS 复杂得多)
浏览器通过 TCP 连接发送 HTTP 请求
浏览器收到 HTTP 响应并可能关闭 TCP 连接,或将其重新用于另一个请求
浏览器检查响应是重定向还是条件响应(3xx结果状态码)、授权请求(401)、错误(4xx和5xx)等;这些处理方式与正常响应不同 (2xx)
如果可缓存,则响应存储在缓存中
浏览器解码响应(例如,如果它被压缩)
浏览器决定如何处理响应(例如,它是 HTML 页面、图像还是声音剪辑?)
浏览器呈现响应,或为无法识别的类型提供下载对话框
再一次,对每一点的讨论都写满了无数页;仅将其作为摘要,为清楚起见而进行了删减。此外,还有许多其他事情与此并行发生(处理键入的地址、推测性预取、将页面添加到浏览器历史记录、向用户显示进度、通知插件和扩展、在下载页面时呈现页面、流水线、连接跟踪keep-alive、cookie 管理、检查恶意内容等)- 整个操作使用 HTTPS 变得复杂一个数量级(证书和密码以及固定,哦,天哪!)。
【讨论】:
第 4 步中出现 https 请求会发生什么,你能解释一下吗? 这超出了这个答案的范围。但是请检查上面链接的 GH 页面,它提供了一个简要概述:github.com/alex/what-happens-when/blob/master/…以上是关于当您在浏览器中输入 URL 时会发生啥 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
当您在 Linux 中更改进程所有权 (uid/gid) 时,已打开的文件会发生啥情况?