【问题标题】:How a website works/ What happens behind the scene网站如何运作/幕后发生了什么
【发布时间】:2011-09-08 13:02:55
【问题描述】:

我试图了解使用网站时后台发生的事情,或者基本上是用户与浏览器交互时发生的事情。我知道这是一个庞大的列表,并且高度依赖于架构和用户操作等,我只是想了解主要的事情并消除我的误解,并使用它来阅读更多关于我不了解的内容。

作为一个练习,我试图记下后台发生的与用户在浏览器中的操作相关的事情。这是我对这个开放式但有趣的问题的尝试:

用户输入一个 url => 浏览器检查是否 在浏览器缓存中可用 => DNS 外观 up [根 dns 查找 => 递归 dns => 获取 ip ] => 建立 tcp 连接 => 发送 http req => 获取 来自网络服务器的静态页面=> if 需要进行身份验证 发生 [要么从 浏览器或要求用户输入 凭据] => 以某种方式获得 动态元素以及[如何? , 这里有一些惰性初始化 ?] => 然后用户执行一些 动作[点击链接或其他东西] => 检查浏览器缓存 => 如果没有用 [取输入参数并嵌入 以某种方式在网址中[可能是 如果需要,加密一些东西] => 命中负载均衡器 => 定向到 应用程序服务器 [取决于如何 LB 选择主机] => 应用程序 检查服务器缓存 [memcached 或 某种缓存,不确定是否这样 “通常”发生在这里或某些地方 其他级别] => 应用服务器 试图理解请求 [如果 它是一个监听某个端口的服务, http 端口 80 它将获取 URL 和 解析执行一些操作] => 如果需要,则查询数据库 => 可能再次有联系 管理/缓存/并行查询等在这里 => 数据库将结果返回给应用服务器 => 应用服务器创建一个 结果负载和标头 [http] => 将其发送到浏览器进行渲染 => 浏览器缓存已更新 => 用户 对响应做出反应。

我没有考虑重试/失败以及如何处理它们,但我也想在一般意义上得到一些输入

注意:
我在看一般情况,我相信很少有公司会以不同的方式来做这件事等等。不过,我也想听听替代方案!。

  • 这是为了获得更多 透视和阅读几件事 总的来说,这将对我有所帮助。
  • 显然我做了一个诚实的尝试
  • 我也希望这对其他人有帮助 总体上看这个问题 学习新知识。
  • 我不是在问 对于意见等,所以这不是一个 完全开放式问题[不是 一切都是对的,尽管有 多种选择]

谢谢!

【问题讨论】:

  • 我认为这太开放了,无论如何,这是错误的地方,因为它不是 编程 问题。
  • 我试图使其具体化,并给出了人们可以添加的初始流程。恕我直言,有人可以清楚地添加并从中获得价值。如果有任何建议以不同的方式表达这一点,我将不胜感激。
  • @Kirk Woll :或者,有什么推荐的地方可以问一些开放式的问题,我发现SO上很多人都有现实生活经验,所以他们可以最好地回答开放式问题经验中的问题。谢谢

标签: web-services web-applications architecture web


【解决方案1】:

浏览器的静态或动态没有区别。浏览器发出 HTTP 请求并获得 HTTP 响应。如果响应是 HTML 页面,则浏览器会呈现 HTML、应用样式并执行页面附带的 JavaScript 代码。这个页面可以是动态的或静态的——浏览器不在乎!一边是关心 - 是服务器端。如果页面是静态的,那么 HTTP 服务器只会从磁盘中获取页面并将其作为 HTTP 响应发送给客户端。如果页面是动态的,那么 HTTP 服务器将调用某个应用程序并要求该应用程序提供所请求的资源。这个应用程序可以是用于 Apache(http 服务器)的 PHP 模块,或用于 IIS 的 ASP.net,甚至可以是生成您想要的任何内容的 C++ 代码。 如何准确构建页面或资源(HTTP 响应也可以是 xml,或图像等)取决于使用的应用程序(服务器端技术)。

例如,如果您使用 PHP - HTTP 服务器会检测到请求的资源扩展名为 .php,服务器会将这个 PHP 文件传递​​给 PHP 模块进行处理,并将结果作为响应发送到 HTTP 客户端(浏览器)。

当用户执行某些操作时,这又是普通的 HTTP 请求。 HTTP 方法 GET 和 POST(在 Wikipedia 上查找有关 HTTP 的文章)用于将一些输入从服务器传递到客户端。页面可以包含一些繁重的 JS,这将使页面看起来更像桌面应用程序(丰富的控件,在无需请求服务器的情况下动态响应用户操作,或者在后台与服务器通信),但这对于 Web 应用程序来说并不是 Web 应用程序所必需的(为网站动态)。它可以是带有 HTML 表单和一些服务器端代码的老式静态 HTML。

Web 应用程序是可能由许多 HTTP 资源(服务器响应的不同 URL)组成的抽象实体。 Web 应用程序也是客户端代码,它在 HTTP 客户端(浏览器)和 HTTP 服务器的帮助下通过 HTTP 与服务器端代码进行通信。 Web 应用程序不是某个独立的部分,它只有在用户执行某些操作时才会起作用。

Web-service 可能符合这个描述 - 作为通常不关心页面的东西,并且仅在需要一些操作时才会出现。它是一种特殊类型的 Web 应用程序,通过 HTTP(通常)公开一些 API。你可以请求一些资源,并传递一些参数,你会得到一些结果的响应。它是相同的 Web 应用程序,但没有页面。但是 web 服务通常是带有页面的大型 web 应用程序的一部分,甚至是同一 web 应用程序的其他部分(取决于你如何看待这个)。它可以是相同的服务器端技术,也可以是相同的 HTTP 服务器。如果您想制作一些网络应用程序(动态网站),则无需创建网络服务。

Web 应用程序的服务器端部分也可以与某些数据库通信,但这也不是必需的。 可以有真正的数据库,或者只是磁盘上的一些文本文件。而且浏览器、客户端代码和 HTTP 服务器也不关心服务器端代码获取数据的数据库或来源。

缓存、负载平衡器等 - 它只是附加元素,通常对所有这些常规内容都是透明的。

每个 HTTP 请求都会将 Cookies 传递给 HTTP 服务器,如果请求的资源不是静态页面,那么 HTTP 服务器会将它们进一步传递给服务器端代码/应用程序(部分)。它通常是如何进行身份验证和授权的 - cookie 包含有关会话的信息,并且在服务器端包含一些与会话相关的数据 - 它可以是用户的 ID,因此服务器端代码将在每个请求上识别用户。

【讨论】:

    猜你喜欢
    • 2011-10-19
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2018-03-29
    • 2019-06-05
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    相关资源
    最近更新 更多