当你在浏览器中输入URL时会发生什么

谁能告诉我,从我在浏览器中输入URL到我在浏览器中看到页面,幕后发生了什么?对这一过程的详细描述将会很有帮助。

248874 次浏览

查找HTTP规范。或者尝试http://www.jmarshall.com/easy/http/来开始

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

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

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

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

注意:这是一个非常粗略的过于简单化的草图,假设最简单的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. 浏览器解码响应(例如,如果它是gzip)
  10. 浏览器决定如何处理响应(例如,它是一个HTML页面,它是一个图像,它是一个声音剪辑?)
  11. 浏览器呈现响应,或为无法识别的类型提供下载对话框

同样,关于这些观点的讨论已经占据了无数页;这只是一个摘要,为了清楚起见,略去了一些。此外,还有许多其他事情与此并行(处理输入地址,推测预取,将页面添加到浏览器历史记录,向用户显示进度,通知插件和扩展,在下载时呈现页面,管道,连接跟踪以保持活跃,cookie管理,检查恶意内容等)-整个操作在HTTPS(证书、密码和固定,哦,天哪!)