在浏览器中键入URL时会发生什么


293

有人可以告诉我从我在浏览器中键入URL到我在浏览器中看到页面之间发生的所有幕后情况吗?详细说明该过程将有很大帮助。


2
尽管这可能与编程有关(最终),但可以回答的详细程度将(并且已经)填满。请重新声明为编程查询。
KevinDTimm 2010年

28
获取O'Reilly的DNS和绑定书。只有624页。
Wim Hollebrandse,2010年


1
为了子孙后代,这是互联网工作原理的详细版本-goo.gl/eEHmpZ
2014年

4
现在,人们正在竭尽全力来尽可能详细地回答这个问题:github.com/alex/what-happens-when/blob/master/README.rst
Piskvor在

Answers:


587

注意:这是一个非常粗糙且过于简化的草图,假设最简单的HTTP请求(没有HTTPS,没有HTTP2,没有额外功能),最简单的DNS,没有代理,单栈IPv4,仅一个HTTP请求,一个简单的HTTP服务器另一端,任何步骤都没有问题。就大多数当代意图和目的而言,这是不现实的情况;所有这些在实际使用中都更加复杂,并且自编写以来,技术堆栈就变得更加复杂了一个数量级。考虑到这一点,以下时间表仍然有效:

  1. 浏览器检查缓存;如果请求的对象在缓存中并且是新鲜的,则跳至#9
  2. 浏览器要求操作系统提供服务器的IP地址
  3. 操作系统进行DNS查找并将IP地址回复给浏览器
  4. 浏览器打开与服务器的TCP连接(对于HTTPS,此步骤要复杂得多)
  5. 浏览器通过TCP连接发送HTTP请求
  6. 浏览器收到HTTP响应,并可能关闭TCP连接,或将其重新用于其他请求
  7. 浏览器检查响应是重定向响应还是条件响应(3xx结果状态代码),授权请求(401),错误(4xx和5xx)等;这些处理方式与正常响应方式不同(2xx)
  8. 如果可缓存,则响应存储在缓存中
  9. 浏览器解码响应(例如,如果压缩)
  10. 浏览器确定如何处理响应(例如,是HTML页面,是图像还是声音剪辑?)
  11. 浏览器呈现响应,或为无法识别的类型提供下载对话框

同样,对这些要点的讨论充满了无数篇幅。仅将此作为摘要,为清楚起见而略去。此外,与此同时还发生了许多其他事情(处理键入的地址,推测性的预取,将页面添加到浏览器历史记录,向用户显示进度,通知插件和扩展名,在下载过程中呈现页面,管道化,保持活动状态,Cookie管理,检查恶意内容等),而使用HTTPS(证书,密码和固定,哦,我的天!)会使整个操作复杂一个数量级。


如果在第4步中有https请求,将会发生什么情况,您能解释一下吗?
穆罕默德·拉希姆

2
那超出了这个答案的范围。但是做检查上面链接的页面GH,它给出了一个简要概述:github.com/alex/what-happens-when/blob/master/...
Piskvor离开大楼

41

首先,计算机查找目标主机。如果它存在于本地DNS缓存中,它将使用该信息。否则,将执行DNS查询,直到找到IP地址。

然后,您的浏览器打开与目标主机的TCP连接,并根据HTTP 1.1发送请求(或可能使用HTTP 1.0,但普通浏览器不再这样做)。

服务器查找所需的资源(如果存在)并使用HTTP协议进行响应,将数据发送到客户端(=您的浏览器)

然后,浏览器使用HTML解析器重新创建文档结构,该文档结构随后在屏幕上呈现给您。如果它找到对外部资源的引用,例如图片,css文件,javascript文件,则这些引用的传递方式与HTML文档本身相同。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.