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

Aad*_*mia 289 browser

从我在浏览器中输入URL到浏览器上的页面时,有人能告诉我幕后发生的一切吗?详细介绍该过程将有很大帮助.

Pis*_*3.0 582

注意:这是一个非常粗略和过于简化的草图,假设最简单的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(证书和密码和固定,哦,我的!)更复杂一个数量级.

  • 那超出了这个答案的范围。但是请检查上面链接的GH页面,它提供了简要概述:https://github.com/alex/what-happens-when/blob/master/README.rst#tls-handshake (2认同)

nai*_*sts 41

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

然后,您的浏览器打开与目标主机的TCP连接,并根据HTTP 1.1发送请求(或者可能使用HTTP 1.0,但普通浏览器不再执行此操作).

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

然后,浏览器使用HTML解析器重新创建文档结构,稍后将在屏幕上显示该文档结构.如果它找到对外部资源的引用,例如图片,css文件,javascript文件,则它们的传递方式与HTML文档本身相同.


Joh*_*ohn 3

查阅HTTP规范。或者要开始,请尝试http://www.jmarshall.com/easy/http/