独立的Web服务器与Apache / IIS

时间:2010-01-10 18:39:24

标签: delphi http web-applications webserver

我正在使用win32和web访问开发一个相当复杂的应用程序。服务器端实现是自定义的,它将在我们公司托管。 HTTP服务器可以作为独立的Indy(或其他)HTTP服务器实现,或者更传统地使用Apache / IIS实现。

我想知道独立HTTP服务器与Apache / IIS在安全性或您认为相关的任何其他方面的优点/缺点。

7 个答案:

答案 0 :(得分:5)

我会说这取决于您的需求和期望。如果您正在编写一个自定义的纯http服务器,甚至可能支持ISAPI等等,或者您正在编写高度专业化的http服务器/代理/等...这只会缩小专门的任务,这是一个很大的区别。例如,我有专门的代理和专门的ISAPI模块处理框架。我会说的优点并不那么简单。所以专业人士是:

  1. 易于部署。尝试将apache与您的应用程序一起部署到每台计算机上
  2. 更好的性能,更小的内存占用。尝试在低端笔记本电脑上使用apache
  3. 更好的安全性。因为你只做狭窄的任务,所以违规的可能性要小得多。 Apache做到了这一切,因此违规的可能性要高得多。
  4. 完全控制此类服务器的工作方式并控制代码。如果你需要稍微不同的行为或新功能,你就明白了。
  5. 如果您像我一样运行ISAPI模块,您可以在单独的进程中对它们进行沙盒化并获得更好的稳定性。如果一个模块/请求崩溃,其他模块/请求就不会受到伤害。
  6. 缺点:

    1. 编写另一个http服务器
    2. 从零开始学习协议和内部工作
    3. 错误的错误数量和错误的可能性更高,因为代码尚未加强战斗力。这需要时间来解决。
    4. 因为你的焦点很窄,所以你不像Apache那样多才多艺。如前所述,不一定是坏事。
    5. 我的判决就是这样。如果您只需要一个普通的http服务器来提供某些内容,并且您将在内部托管,在一台或几台服务器上,请选择Apache。如果你正在制作一个专门的http处理代码片段,它将被安装很多,你需要控制,然后开发自己的。相信我,值得花时间。我现在很高兴,当我们决定同样的事情的时候,我坚持这个。现在我有很多笔记本电脑安装的软件非常复杂,我无法想象必须在每台笔记本电脑上安装Apache。然后将其配置为我需要的工作。

      Indy(包括所有麻烦和怪癖)已被证明是一个非常稳定的开箱即用的Web服务器。 ICS在这里可能是相同的,但我还没有使用它,所以我不能说。设置Indy HTTP服务器非常容易。

      只是我的两分钱;)

答案 1 :(得分:4)

“独立网络服务器”是指嵌入在您的应用程序中?我从未使用过Indy,但我使用Jetty库处理了几个Java应用程序。由于Web服务紧密集成到应用程序中,因此无需额外安装即可轻松部署和配置Apache / IIS代理到应用服务器的主要优点。

如果您现有应用程序,并且允许将此新应用程序部署到同一环境,我非常确定您的系统管理员会要求您使用现有的应用程序服务器。没有人喜欢额外的操作复杂性,即使你更容易构建。将另一个应用添加到应用服务器是微不足道的。

其他考虑因素是:

安全性:网络配置,日志文件,访问控制等都将具有与Apache / IIS系统不同的实现,而不同通常意味着更差的安全性。系统管理员对Apache / IIS理解的SSL身份验证等简单操作与嵌入式Web服务器的工作方式不同。

性能:嵌入式服务器可能效率更高,但可扩展性稍差。您的编码决策会极大地影响这一点,而嵌入式服务器则很容易搞砸。

开发:我发现嵌入式服务器更容易处理,因为我可以将它们作为简单的Java应用程序而不是Web应用程序运行,例如使用Tomcat集成的Eclipse Java视图而不是J2EE视图。

我知道这是答案来自Java观点,但我希望一般的想法适用于Delphi。

答案 2 :(得分:3)

IIS和Apache是​​很好理解的http服务器。

拥有自己的http服务器的唯一优势是简化部署,假设您的应用程序的服务器端部分将专门托管在您的公司中,这可能不会有利。

另一个优势可以是性能,您可以使用自定义的http服务器实现更高的吞吐量和更好的响应时间。但除了易于部署和性能之外,我看不到任何其他优势。

但是有很多缺点

  • 您正在编写已编写的代码
  • 您需要证明并解释新开发人员为何IIS和Apache不适合
  • 您需要记录并培训其他人如何使用这样的http服务器。例如,新开发人员应该知道如何在IIS / Apache上设置SSL证书或GZIP压缩,但他们必须向您学习如何在您的http服务器中执行此操作以及是否支持该功能
  • 如果这是您要编写的第一个http服务器,则需要花费大量时间学习和研究应用程序真正针对的主要业务领域之外的各种标准和约定。

答案 3 :(得分:1)

我通常只是独立开发,因此我获得了更好的调试体验,然后部署为ISAPI DLL。

答案 4 :(得分:1)

我曾经多次对这件事感到疑惑。

我也一直在研究一些IInternetProtocol实现,以使Internet Explorer能够使用其他URL模式。

所以我前段时间开始了一个开源项目:http://xxm.sourceforge.net/

它使您可以在ISAPI扩展,独立服务器之间自由切换,也许更晚。 (Apache模块和Firefox协议处理程序正在制作中。)

Delphi代码和HTML与其他Web脚本语言很相似,但是使用(快速)Delphi编译器来构建用于运行网站的库。

答案 5 :(得分:1)

我编写了几个实现Indy HTTP Stack并提供Web服务的应用程序。这既简单又复杂。当您开始使用线程时,复杂性就会出现,因为您需要了解Indy如何为HTTP请求创建线程。因此,将其与服务器代码集成可能需要一些考虑,特别是如果服务器连接到数据源或某种类型的公共控件。

此外,您需要管理所有安全性,文件访问权限以及常规Web服务器自己执行的所有其他操作。在这里你可能会被解开,因为Indy的例子有限。

话虽如此,我发现Indy 10 HTTP Server非常强大,如果您针对特定需求,例如根据您的应用正在执行的操作提供XML,则效果非常好。您可以完全控制服务器正在执行的操作,您可以选择不同的部署模型 - Windows服务,独立应用程序等...

如果你有一个设计良好的线程安全应用程序,那么在它上面实现HTTP就像将Indy HTTP Server组件放到表单或单元上一样简单。无需为网络内容复制任何代码。

答案 6 :(得分:0)

我一直专注于ISAPI并使用IDDebugger来调试此过程。这为您提供了两全其美的优势,您可以根据最终部署的相同版本进行调试。不幸的是,我不为Apache开发,所以不能说它易于开发。

由于我使用此方法,因此我不必担心未同步的独立版本和ISAPI版本之间的更改,并且可以轻松地将客户版本放入我的测试环境中以复制任何特定行为,然后使用修复并确保它在现场部署时能够正常工作。

即使考虑使用面向互联网的独立Web服务器,也有太多事情需要担心。将这种担心(以及多年的经验)放到IIS / Apache手中会好得多。