Web服务器程序和内容提供程序之间交互范例的演变是什么?

时间:2011-01-07 02:16:20

标签: apache iis tomcat webserver

在我看来,网络服务器负责向客户提供内容。如果它是 静态 内容,如图片和静态HTML文档,Web服务器只是直接将它们作为比特流传递。如果是在处理客户端请求期间生成的某些动态内容,则Web服务器将 生成conetnt本身,但调用一些外部proram来生成内容。

AFAIK,这种动态内容生成技术包括以下内容:

  • CGI

  • ISAPI

  • ...

here开始,我注意到了:

  

...在IIS 7中,模块取代了ISAPI   过滤器...

还有其他人吗?任何人都可以帮我完成上面的列表并详细说明或显示一些指向 evolution 的链接吗?我认为理解IIS,TomCat和Apache等应用程序会非常有用。

我曾经写过一个小型CGI程序,虽然它是一个 内容生成器 ,但它仍然只是一个普通的独立程序。我称之为正常,因为CGI程序有一个main()入口点。但是像ASP.NET这样的接收技术,我不是在编写完整的程序,而只是编写一些类库。 为什么会发生这种根本性的变化?

非常感谢。

2 个答案:

答案 0 :(得分:1)

嗯,你问题中最大的缺失就是你可以让网络服务器动态生成内容。这在PHP和Perl之外的大多数平台上都很常见。您经常将该网站设置为用作代理的apache或nginx,但它不会在任何合理的意义上“调用外部程序”,它会将http请求转发给代理服务器。这主要是为了让您可以在同一台服务器上拥有多个站点,这样您就可以让apache / nginx保护您免受不正确的请求。

但是可以肯定的是,为了这个问题,我们可以说“代理”是一种调用外部程序的方法。 : - )

“调用外部程序”的另一种方法是Pythons WSGI,您可以在其中调用永久运行的服务器。所以你再次没有启动外部程序,它更像是在ASP中调用模块(虽然它是一个单独的程序,而不是一个模块,但是你没有用每个请求启动它,你使用API​​)。

从在CGI中调用外部程序到在ASP.NET中调用模块,使用WGI进行处理或代理到另一个Web服务器的过程发生了变化,因为使用CGI,您必须为每个请求启动一个新的prpogram。 PERL / PHP解释器需要连接到内存,以及它们使用的所有模块。这很快变得非常沉重,并且过程/内存密集。

因此,为了能够使用永久运行的更大系统,已经开发了其他技术。它们中的大多数都依赖于平台/语言,并且唯一一个独立于平台的是真正构建一个完整的Web服务器,然后在前面使用apache / nginx作为代理(在这种情况下,严格地说不再需要apache / nginx) )。

我希望这有点清楚。

答案 1 :(得分:0)

fastcgi和wsgi是内容生成器可以用来与Web服务器通信的另外两个接口 - 更新近的接口不是完整程序的原因是分支和执行期望可执行的东西是昂贵的。

OTOH,以这样一种方式编写你的小生成器,它不会在调用之间泄漏任何东西比让自由在最后退出(并依赖环境变量和命令行参数,如普通可执行文件)更难。

这完全是出于性能原因,但您在Web服务器中有更复杂的内容生成器和进程管理。