从在浏览器地址栏输入url到在浏览器中获取渲染页面的完整过程是怎样的?

2024-03-28

这个问题我想了很久。它是一个big问题,因为它几乎涵盖了与 Web 开发相关的所有角落。

按照我的理解,流程应该是这样的:

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

以上是我的理解,不知道对不对?精确到多少?我错过了什么?

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

  1. 让步骤的描述更加准确,或者如果有很大的变化,请写下您的步骤
  2. 对您最熟悉的每个步骤进行深入解释。
  3. 每一步一个答案。其他人可以在每个答案的评论中进行补充。

我希望这个帖子可以帮助所有 Web 开发人员更好地了解我们每天所做的事情。

我将根据答案更新这个问题。

Thanks.


正如您所说,这是一个广泛的问题,可以对许多主题进行详细介绍。你所描述的顺序没有任何问题,但你遗漏了很多细节。提几个:

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

这些主题中的每一个以及更多主题都可以进行详细讨论。也许针对您感兴趣的主题提出更具体的问题更实际?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从在浏览器地址栏输入url到在浏览器中获取渲染页面的完整过程是怎样的? 的相关文章

  • 你能阻止 jQuery focusout 在失去焦点时触发吗?

    我有一个输入框 我想在它失去焦点时保存它的值 非常简单的事情 我可以通过 jQuery 来完成focusout event 然而问题是我不想解雇focusout当用户单击输入框旁边的 X 图标时发生的事件 示例如下所示 因此 当用户跳出此输
  • 如何使 Flexbox 响应式?

    我有一个包含两个元素的 div 我想水平堆叠它们 Div C 具有固定宽度 div B 将填充其余空间 然而 div B 的内容可能是固定宽度 动态 或 100 宽度 div B 我想要的效果是 如果屏幕宽度足够小 以至于在 div B 和
  • 在 iOS 中禁用文本选择标注

    我知道当用户长按某个按钮时您可以禁用标注link使用这个 body webkit touch callout none important a webkit user select none important 但是文本选择菜单呢 我的用例
  • 如何模拟 TCP/IP 错误?

    在多层应用程序上 我需要模拟各种 TCP IP 错误来测试一些重新连接代码 有谁知道我可以使用什么工具 基于 Windows 来实现此目的 谢谢 Scapy http secdev org projects scapy 允许您控制数据包的各
  • KineticJS - 如何在按钮单击时更改图像 src

    我试图通过单击按钮来更改kineticjs阶段中图像的src 我有一个可拖动的图像 在本例中为达斯维德 和顶部的静态图像 在本例中为猴子 单击按钮后 我希望能够用新图像替换可拖动图像 yoda JSFiddle 可以在这里看到 http j
  • 为什么我们可以将 sockaddr 转换为 sockaddr_in

    我明白为什么强制转换很有用sockaddr to sockaddr in 但我不明白这怎么可能 据我所知 它们的大小相同sockaddr in添加了sin zero使其大小相同 我想知道编译器如何知道从哪里获取信息sockaddr in如果
  • haml 文件中的 yaml 前面内容

    我正在尝试使用Haml Jekyll 扩展 https github com codegram haml jekyll extension只是我不明白如何包含 yaml 前面的内容 我有以下内容 user hello html title
  • 在 Chrome 扩展程序中访问 Chrome 设置

    我正在寻找开发一个 chrome 扩展程序 可以访问 wrench gt 选项 gt 引擎盖下的内容设置 那可能吗 我当时正在看API page http code google com chrome extensions api inde
  • CSS 可调整大小的带标题的图像

    我正在尝试获取并排显示的两个图像的 HTML 布局 并填充页面 同时保持其纵横比并保持图像彼此相邻 即不在页面每一半的中心 我还想要顶部有一个标题 我几乎已经使用下面的 CSS hackery 实现了这一目标 目前它看起来像这样 如果我水平
  • 获取浏览器中正在查看的当前页面(可能吗?)

    我想知道 作为一名 Android 开发人员 我是否可以知道浏览器应用程序当前是否打开 如果是 正在查看哪个页面 网址 如果是这样 我将如何去做这件事 如果没有 我也很想知道 所以我不会再搜索了 谢谢 奥姆里 我不知道是否有可能知道浏览器应
  • Internet Explorer 8 不会修改打印样式表中的 HTML5 标记

    我之前正在制作打印样式表 并遇到了 IE8 的问题 我正在使用 HTML5 和几个布局标签 包括页眉 导航和页脚 由于某种原因 在我的打印样式表中显示 无 这些标签上的声明在 IE8 中被忽略 我只能假设后续的较低版本 我首先认为 IE9
  • Github Pages 网站图标未显示

    我正在使用 Github Pages 托管一个网站 由于 SSL 我将 Cloudflare 连接到该网站 当我最后添加时favicon ico到我的网站和以下代码使图标显示出来 它仍然不显示 我能做些什么 英语不是我的母语 Edit 似乎
  • d3 转换改变了哪些属性?

    我试图了解 d3 中到底发生了什么转换 例如 var bars svg selectAll null data my values enter append rect statement before transition attr x 1
  • 为什么负边距会影响我的页面宽度?

    请参考以下内容example http jsfiddle net wdm954 Fcznp 9 其中 200px 宽的外部 div 旨在确定我们的页面宽度 它包含一个 400px 宽的内部 div 但左 右负边距为 100px 我预期的最终
  • input[type=hidden] 和visibility="hidden" 之间的区别

    有什么区别input type hidden and visibility hidden 第一个是输入元素 第二个用于 CSS2 中的样式 visibility hidden 可见性属性指定元素是否可见 输入 类型 隐藏 http www
  • 使用 jQuery 将播放/暂停/结束功能绑定到 HTML5 视频

    我正在尝试绑定play pause and ended使用 jQuery 的事件但有一个问题 当我右键单击视频并选择播放或暂停时 图标会正确更改 当我单击播放按钮时 它会更改为暂停 但如果我单击暂停按钮继续播放视频 它不会更改为再次播放 谁
  • jQuery 中的按钮点击

    我是 jQuery 新手 我想使用按钮单击事件来引发警报框 这是我的代码 但它似乎不起作用
  • 使用 javascript/jquery 仅选择特定元素后面的文本

    如下面的代码片段所示 我有多个文本 div 其中有粗体部分 然后是换行符 然后是一段文本 我可以 find 粗体部分 但如何使用 javascript jquery 只获取粗体部分后面换行符后面的文本部分 div class thecont
  • 将表格行换行到下一行

    table tr td testtesttesttest td td testtesttesttest td tr table 我想如果表格不适合屏幕 那么表格的第二个单元格将被转移到另一行 不是单元格中的文本 而是整个单元格 将单元格更改
  • 删除 JavaScript 中的不间断空格

    我无法从字符串中删除空格 首先我要转换div to text 删除标签 有效 然后我尝试删除 nbsp 字符串的一部分 但它不起作用 知道我做错了什么 newStr myDiv text newStr newStr replace nbsp

随机推荐