很久以前,我使用Delphi 2007和WebBroker(TWebModule)开始了一些“Web应用程序”。当时我假设您需要一个Web服务器,如Apache或Microsoft IIS,以便创建任何类型的网站。此外,我不使用大多数Apache功能(除了虚拟服务器,所以我可以在一个IP地址和SSL上有多个域)。所以对我来说,Apache只是一个额外的层,使调试变得困难。
现在输入Indy(TIdHTTPServer)。如果我理解正确,Indy是一个网络服务器。因此,通过使用Indy,我不再需要使用Apache或其他一些网络服务器。这是对的吗?
在Indy环境中,我是否有任何支持虚拟服务器的问题?那么SSL呢?我搜索了文献,从我可以看到它完全支持SSL证书。
我现在正在将一些应用程序从WebBroker移植到Indy。这主要是在我的代码中用请求:TWebRequest 替换 ARequestInfo:TIdHTTPRequestInfo ,并使用响应:TWebResponse 引用 AResponseInfo:TIdHTTPResponseInfo
无论如何在Indy中使用 TWebModule 架构,这样我就不需要进行所有这些重写了吗?
最后还有什么我需要关注的吗?我的目标是让Apache脱离循环。
答案 0 :(得分:3)
是的,你可以使用Indy的TidHTTPServer作为网络服务器,但它比IIS或Apache低得多。没有虚拟服务器的概念 - 您必须自己实现。
Indy也通过OpenSSL dll支持SSL。
我想你最关心的问题是与安全有关......有数百万的网站运行Apache或IIS,有很多人致力于在这些平台上找到漏洞,有很多人在修复他们出现时的一些缺陷。对于Indy来说并非如此......有一两个人在新闻组中回应你发现的错误。 (特别是一个人,他也可能在这里回答你的问题。)
现在,我使用Indy HTTP服务器(以及SecureBlackBox SSL支持),我发现它非常适合我的目的。
答案 1 :(得分:2)
Indy HTTP服务器调用WinSock API,并且能够实现:
AFAIK您可以使用Indy发布Web模块。 见http://www.2p.cz/files/2p.cz/downloads/howto/indy_soap_web_services_in_delphi.pdf
您还可以使用其他服务器,例如directly the kernel-mode http.sys server,例如由ISS和.Net WCF使用,并且已知非常稳定和高效(它绕过WinSock API)。当然,如果需要,它将提供HTTPS conent。它自Windows XP SP2以来一直在标准版本中提供,因此在Vista和Seven中可用。使用此组件将允许Microsoft为您完成所有调试工作,并将使用主机操作系统进行更新。我在我们的客户端 - 服务器ORM中使用它,或直接替换已弃用的DCOM连接,在客户端具有非常好的速度和稳定性。
答案 2 :(得分:2)
关于虚拟服务器 - HTTP 1.1规范要求客户端发送Host
请求标头,以便虚拟服务器知道哪个域专门用于处理多个域具有相同IP的情况。 TIdHTTPRequestInfo
具有该值的Host
属性。实际上,TIdHTTPServer
在内部验证以确保HTTP 1.1请求在触发任何Host
事件之前具有OnCommand...
标头。