从输入网址到浏览器的地址栏以获取浏览器中呈现的页面的完整过程是什么?

Zhu*_*Tao 17 html browser webserver tcp

我很长时间都在考虑这个问题.这是一个很大的问题,因为它几乎涵盖了与网络开发相关的所有角落.

根据我的理解,这个过程应该是这样的:

  1. 输入地址栏的URL
  2. 请求将根据您的网络配置发送到DNS服务器
  3. DNS会将您路由到域名的真实IP
  4. 一个请求(带有完整的Http头)将被发送到服务器(用3的IP来识别)的80端口(假设我们没有指定另一个端口)
  5. 服务器将搜索侦听端口并将请求转发到正在侦听80端口的应用程序(比如说这里是nginx)或转发到另一台服务器(然后3的服务器就像负载均衡器)
  6. nginx将尝试将url与其配置匹配并直接充当静态页面,或者调用相应的脚本intepreter(例如PHP/Python)或其他应用程序来获取动态内容(使用DB查询或其他逻辑)
  7. 将使用完整的Http响应头将html发送回浏览器
  8. 浏览器将使用其解析器解析html的DOM
  9. 外部资源(JS/CSS/images/flash/videos ..)将按顺序请求(或不?)
  10. 对于JS,它将由JS引擎执行
  11. 对于CSS,它将由CSS引擎呈现,HTML的显示将根据CSS进行调整(也是按顺序或不是?)
  12. 如果DOM中有iframe,则从步骤1-12开始执行单独的相同过程

以上是我的理解,但我不知道它是否正确?多少精确?我错过了什么?

如果它是正确的(或几乎正确),我希望:

  1. 在您的文字中使步骤的描述更精确,或者如果有大的变化则写下您的步骤
  2. 对您最熟悉的每个步骤做出深入的解释.
  3. 每步一个答案.其他人可以在每个答案的评论中补充.

我希望这个主题可以帮助所有Web开发人员更好地了解我们每天的工作.

我会根据答案更新这个问题.

谢谢.

Nic*_*ico 5

正如你所说,这是一个广泛的问题,可以在很多主题上详细介绍.你描述的序列没有任何问题,但你遗漏了很多细节.提一下:

  • DNS层可以帮助将客户端基于地理位置定向到不同的服务器,以帮助实现负载平衡和延迟最小化,并且一个服务器可以响应来自许多不同DNS名称的请求.
  • 浏览器可以发出不同类型的请求(GET,POST,HEAD等),并且通常包括几个不同的标题,包括cookie,浏览器功能,语言首选项等.
  • 大多数浏览器通常维护缓存以避免多次下载内容,并使用各种技术来确定文件的缓存版本是否有效.
  • 在现代网页中,许多不同类型的文件(HTML,CSS,图像,JavaScript,视频,Flash等)之间经常会有复杂的交互,而Web开发人员通常需要详细了解浏览器之间的差异,以保持其页面的工作状态.大家

可以详细讨论这些主题中的每一个以及更多主题.或许就您感兴趣的主题提出更具体的问题更实际?