网站如何运作/幕后发生了什么

时间:2011-06-04 22:14:46

标签: web-services web-applications architecture web

我试图了解在使用网站时后台发生的事情,或者基本上当用户与浏览器交互时会发生什么。我知道这是一个巨大的列表,高度依赖于架构和用户操作等,我只是想了解一些重要的事情并解决我的误解,并使用它来阅读更多关于我不理解的东西。

作为练习,我试图记下在浏览器中用户操作背景中发生的事情。这是我尝试这个有点开放但有趣的问题:

  

用户输入网址=>浏览器检查是否   在浏览器缓存中可用=> DNS看   up [root dns lookup =>递归的dns   => get ip] =>建立tcp连接=>发送http req =>得到   来自web服务器的静态页面=>如果   认证是必需的   发生[从...读取cookie]   浏览器或要求用户输入   凭证] =>莫名其妙地得到了   动态元素[如何? ,   这里有一些懒惰的启动   ?] =>然后用户执行一些   行动[点击链接或其他内容] =>   检查浏览器缓存=>如果没有用   [取输入参数并嵌入   以某种方式在网址中[可能是   如果需要加密一些东西] =>   命中负载均衡器=>针对一个   应用服务器[取决于如何   LB选择主机] =>应用   检查服务器缓存[memcached或   某种缓存,不确定是否这样   “通常”发生在这里或某些地方   其他级别] =>应用服务器   试图理解请求[如果   它是一个侦听某个港口的服务,   http端口80它将获取URL和   解析以执行某些操作] =>   如果需要,则查询数据库=>   可能会再次有联系   mgmt / caching / parallel queries等   =>数据库将结果返回给app server =>应用服务器创建一个   结果有效负载和标头[http] =>   将其发送到浏览器进行渲染=>   浏览器缓存已更新=>用户   对回应做出反应。

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

注意:
我正在看一般的事情,我相信很少有公司会以不同的方式等等。我也想听听其他的选择!。

  • 这是努力尝试获得更多 透视并阅读一些事情 这将对我有所帮助。
  • 显然我做了一个诚实的尝试
  • 我也希望这会对别人有所帮助 一般来看这个问题 学习新东西。
  • 我不是问 对于意见等,所以这不是一个 完全开放的问题[不是 一切都是对的,尽管有 很多选择]

谢谢!

1 个答案:

答案 0 :(得分: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资源(服务器到响应的不同URL)。 Web应用程序也是客户端代码,在HTTP客户端(浏览器)和HTTP服务器的帮助下通过HTTP与服务器端代码进行通信。 Web应用程序不是一个独立的部分,只有在用户执行某些操作时才会起作用。

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

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

缓存,负载均衡器等 - 它只是通常对所有这些常规内容透明的其他元素。

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