2011-06-04 29 views
3

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

作为一个练习,我试图记录下与用户在浏览器中的操作有关的背景。这是我在此位的尝试开放式的,但有趣的问题:

用户输入一个URL =>浏览器检查 在浏览器缓存中可用=> DNS查询 了[根DNS查找=> DNS递归 =>获得IP] =>建立一个TCP连接=>发送HTTP REQ =>得到 从Web服务器静态页面=>如果 认证要求 发生[无论是从 浏览器读取cookie或要求用户输入 凭据] = >以某种方式获得 动态元素以及[如何? , 有一些懒惰动初始化这里 ?] =>然后用户执行某些 动作[点击一个链接或东西] => 检查浏览器缓存=>如果不利用 [获取输入参数,并在URL中嵌入 某种方式[可以是 加密一些事情,如果需要] => 命中负载平衡器=>定向到 应用服务器[取决于 的LB如何选择一个主机] =>应用 服务器高速缓存被选中[分布式缓存或 某种缓存,不确定这个 “正常”发生在这里还是某个 其他级别] =>应用服务器 尝试理解请求[如果 其服务监听某个端口上, http端口80将得到URL和 解析做一些操作,如果需要=> 有可能再次成为连接 MGMT => 查询数据库/缓存/并行查询等 =>数据库将结果返回给应用服务器=>应用服务器创建一个 结果有效负载和标头[http] => 将其发送到浏览器进行呈现=> 浏览器缓存更新=>用户 对响应作出反应。

我还没有考虑重试/失败,它们是如何处理的,但我想获得一些输入有作为一般意义上

注:
我在看的东西一般来说,我相信很少有公司可以用不同的方式来做等等。我也希望听到替代品,但是!

  • 这是尝试,并获得更多 的视角和对几件事情 ,这将帮助我在读一般的努力。
  • 显然,我做了一个诚实的努力
  • 我也希望这将有助于其他 一般看问题 学到新的东西。
  • 我不要求 征求意见等,所以这是不是一个 完全开放式的问题[不 一切都是正确的,虽然有很多 选项]

谢谢!

+0

我认为这太开放了,无论如何,SO是错误的地方,因为它不是一个*编程*问题。 – 2011-06-04 22:30:43

+0

我试图让它具体化,并给出了人们可以添加的初始流程。 Imho有人可以清楚地添加并从中获得价值。如果有任何建议以不同的方式表达这一点,我会很感激。 – codeObserver 2011-06-04 22:32:44

+0

@Kirk Woll:或者,有没有推荐的地方可以问一些开放式的问题,我发现很多人都有真实的生活经验,所以他们可以从经验中回答最好的问题。谢谢 – codeObserver 2011-06-04 22:51:17

回答

2

浏览器的静态或动态没有区别。浏览器发出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(在维基百科中查找关于HTTP的文章)用于将某些输入从服务器传递到客户端。页面可以包含一些沉重的JS,这将使页面看起来更像是桌面应用程序(丰富的控件,在没有请求的情况下动态响应用户操作,或者在后台与服务器通信),但这对于Web应用程序成为Web应用程序来说并不是必需的(通过动态网站)。它可以是具有HTML表单的老式静态HTML,也可以是一些服务器端代码。

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

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

服务器端部分也可以与一些数据库进行通信,但它也没有必要。 可以有真实的数据库,或只是在磁盘上的一些文本文件。浏览器,客户端代码和HTTP服务器也不关心服务器端代码获取数据的数据库或源代码。

缓存,负载均衡,等等 - 这只是额外的元素,通常是透明的这一切一般的东西。

饼干传递与每一个HTTP请求到HTTP服务器,如果请求的资源是不是静态网页,那HTTP服务器将进一步通过他们的服务器端代码/应用(部分)。它通常如何验证和授权 - cookie包含有关会话的信息,并且在服务器端有一些与会话包含的数据 - 它可以是用户的ID,因此服务器端代码将在每个请求中识别用户。