Apache web服务器程序和内容提供商程序之间交互范式的演变是什么?

Apache web服务器程序和内容提供商程序之间交互范式的演变是什么?,apache,iis,tomcat,webserver,Apache,Iis,Tomcat,Webserver,在我看来,web服务器负责向客户端交付内容。如果是静态的内容,比如图片和静态html文档,web服务器只需直接以比特流的形式交付它们。如果是在处理客户端请求期间生成的动态内容,web服务器将不生成内容本身,而是调用一些外部程序来生成内容 另外,这种动态内容生成技术包括以下内容: CGI 伊萨皮 从那时起,我注意到: …在IIS 7中,模块取代ISAPI 过滤器 还有其他的吗?有没有人能帮我完成上面的列表,并对它们的进化过程进行讨论或显示一些链接?我认为了解IIS、TomCat和Apache

在我看来,web服务器负责向客户端交付内容。如果是静态的内容,比如图片和静态html文档,web服务器只需直接以比特流的形式交付它们。如果是在处理客户端请求期间生成的动态内容,web服务器将生成内容本身,而是调用一些外部程序来生成内容

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

  • CGI

  • 伊萨皮

从那时起,我注意到:

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

还有其他的吗?有没有人能帮我完成上面的列表,并对它们的进化过程进行讨论或显示一些链接?我认为了解IIS、TomCat和Apache等应用程序会非常有帮助

我曾经写过一个小的CGI程序,虽然它是一个内容生成器,但它仍然是一个普通的独立程序。我称之为正常,因为CGI程序有一个main()入口点。但有了最近的ASP.NET技术,我并没有编写完整的程序,只是编写了一些类库为什么会发生如此剧烈的变化?


非常感谢。

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

当然,为了回答这个问题,我们可以说“代理”是调用外部程序的一种方式。:-)

另一种“调用外部程序”的方法是pythonswsgi,在这里您可以调用一个永久运行的服务器。因此,同样,您不启动外部程序,这更像是在ASP中调用模块(虽然它是一个单独的程序,而不是模块,但您并不是在每次请求时启动它,而是使用API)

从调用CGI中的外部程序到调用ASP.NET中的模块、使用WGI处理或代理到另一个Web服务器的更改发生了,因为使用CGI,您必须为每个请求启动一个新的prpogram。PERL/PHP解释器需要被加载到内存中,它们使用的所有模块也需要加载到内存中。这会很快变得非常繁重,并且会占用大量的进程/内存

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


我希望这能澄清一些问题。

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

当然,为了回答这个问题,我们可以说“代理”是调用外部程序的一种方式。:-)

另一种“调用外部程序”的方法是pythonswsgi,在这里您可以调用一个永久运行的服务器。因此,同样,您不启动外部程序,这更像是在ASP中调用模块(虽然它是一个单独的程序,而不是模块,但您并不是在每次请求时启动它,而是使用API)

从调用CGI中的外部程序到调用ASP.NET中的模块、使用WGI处理或代理到另一个Web服务器的更改发生了,因为使用CGI,您必须为每个请求启动一个新的prpogram。PERL/PHP解释器需要被加载到内存中,它们使用的所有模块也需要加载到内存中。这会很快变得非常繁重,并且会占用大量的进程/内存

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


我希望这能澄清一些问题。

fastcgi和wsgi是内容生成器可以用来与Web服务器对话的另外两个接口——最近的接口之所以不是完整的程序,是因为分叉和执行预期可执行的东西成本很高

OTOH,编写您的小生成器时,要使它在调用之间不会泄漏任何信息,这比在最后自由退出(并像普通可执行文件一样依赖环境变量和命令行参数)要困难得多


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

fastcgi和wsgi是内容生成器可以用来与Web服务器对话的另外两个接口——较新的接口不是完整程序的原因是,分叉和执行预期可执行的内容代价高昂

OTOH,编写您的小生成器时,要使它在调用之间不会泄漏任何信息,这比在最后自由退出(并依赖于环境变量和命令)要困难得多