这个问题我想了很久。它是一个big问题,因为它几乎涵盖了与 Web 开发相关的所有角落。
按照我的理解,流程应该是这样的:
- 在地址栏输入url
- 将根据您的网络配置向 DNS 服务器发送请求
- DNS会将您路由到域名的真实IP
- 一个请求(带有完整的Http header)将被发送到服务器(用3的IP来标识)的80端口(假设我们不指定其他端口)
- 服务器将搜索监听端口并将请求转发到正在监听80端口的应用程序(这里假设为nginx)或另一个服务器(然后3的服务器将像一个负载均衡器)
- nginx 会尝试将 url 与其配置匹配并直接作为静态页面,或者调用相应的脚本解释器(例如 PHP/Python)或其他应用程序来获取动态内容(使用数据库查询或其他逻辑)
- html 将被发送回浏览器,并带有完整的 Http 响应标头
- 浏览器将使用其解析器解析 html 的 DOM
- 将请求外部资源(JS/CSS/images/flash/video..)按顺序(或不?)
- 对于JS,将由JS引擎执行
- 对于CSS,它将由CSS引擎渲染,并且HTML的显示将根据CSS进行调整(也按顺序或不按顺序?)
- 如果 DOM 中有 iframe,则将从步骤 1-12 执行一个单独的相同进程
以上是我的理解,不知道对不对?精确到多少?我错过了什么?
如果它是正确的(或几乎正确的),我希望:
- 让步骤的描述更加准确,或者如果有很大的变化,请写下您的步骤
- 对您最熟悉的每个步骤进行深入解释。
- 每一步一个答案。其他人可以在每个答案的评论中进行补充。
我希望这个帖子可以帮助所有 Web 开发人员更好地了解我们每天所做的事情。
我将根据答案更新这个问题。
Thanks.
正如您所说,这是一个广泛的问题,可以对许多主题进行详细介绍。你所描述的顺序没有任何问题,但你遗漏了很多细节。提几个:
- DNS 层可以帮助根据地理位置将客户端定向到不同的服务器,以帮助实现负载平衡和延迟最小化,并且一台服务器可以响应来自许多不同 DNS 名称的请求。
- 浏览器可以发出不同类型的请求(GET、POST、HEAD 等),并且通常包含几个不同的标头,包括 cookie、浏览器功能、语言首选项等。
- 大多数浏览器通常会维护缓存以避免多次下载内容,并使用各种技术来确定文件的缓存版本是否有效。
- 在现代网页中,许多不同类型的文件(HTML、CSS、图像、JavaScript、视频、Flash 等)之间通常存在复杂的交互,并且 Web 开发人员通常需要详细了解浏览器之间的差异,以保持其页面正常工作每个人
这些主题中的每一个以及更多主题都可以进行详细讨论。也许针对您感兴趣的主题提出更具体的问题更实际?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)