【问题标题】:Should I port my WebBroker projects to Indy我应该将我的网上经纪服务项目移植到 Indy
【发布时间】:2011-09-24 01:35:09
【问题描述】:

很久以前,我使用 Delphi 2007 和 WebBroker (TWebModule) 开始了一些“网络应用程序”。当时我认为您需要一个诸如 Apache 或 Microsoft IIS 之类的网络服务器来创建任何类型的网站。此外,我不使用大多数 Apache 功能(虚拟服务器除外,因此我可以在单个 IP 地址和 SSL 上拥有多个域)。所以对我来说,Apache 只是一个额外的层,使调试变得困难。

现在输入 Indy (TIdHTTPServer)。如果我理解正确的话,Indy 是一个网络服务器。因此,通过使用 Indy,我不再需要使用 Apache 或其他网络服务器。这是正确的吗?

在 Indy 环境中支持虚拟服务器是否会有任何问题?那么 SSL 呢?我搜索了文献,据我所知,它完全支持 SSL 证书。

我现在正在将我的一些应用程序从 WebBroker 移植到 Indy。这主要需要在我的代码中将 Request: TWebRequest 引用替换为 ARequestInfo: TIdHTTPRequestInfo 并将 Response: TWebResponse 引用替换为 AResponseInfo: TIdHTTPResponseInfo

是否可以在 Indy 中使用 TWebModule 架构,这样我就不需要进行所有这些重写?

最后我还有什么需要注意的吗?我的目标是让 Apache 脱离循环。

【问题讨论】:

  • Delphi 的哪个版本?
  • @TOndrej Indy 支持 Delphi 5(或 6)及更新版本 ...
  • @mjn 我问的是 Delphi 的版本,因为 XE 已经有独立的 WebBroker 应用程序,使用 Indy,开箱即用。
  • @TOndrej 抱歉,我不知道(仍在使用 2009),删除 Apache 依赖项的简单选项

标签: delphi


【解决方案1】:

是的,您可以使用 Indy 的 TidHTTPServer 作为网络服务器,但它比 IIS 或 Apache 低得多。没有虚拟服务器的概念-您必须自己实现。

Indy 也通过 OpenSSL dll 支持 SSL。

我想您最大的担忧将是与安全相关的...有数以百万计的站点在运行 Apache 或 IIS,并且有很多人致力于发现这些平台中的缺陷,并有很多人在修复其中一些缺陷出现时。 Indy 并非如此……有一两个人会在新闻组上回复您发现的错误。 (特别是一个人,他可能也会在这里回答你的问题。)

现在,我使用 Indy HTTP 服务器(以及 SecureBlackBox SSL 支持),我发现它非常适合我的目的。

【讨论】:

  • 另外 - Web App Debugger 在内部使用 Indy HTTP Server 来运行 Web Broker 数据模块...所以您可以在 Delphi 中的 WAD 实用程序之后为您的服务器建模。
  • 当然,这使得 Apache 和 IIS 成为更大的目标,所以你也有更多的坏人在寻找和开发漏洞利用!使服务器绝对安全的唯一方法是关闭它;-)
  • 我认为使用 Indy HTTP 服务器,扩展几乎和安全问题一样严重。
  • 所以你是说 Indy 不能很好地扩展?或者至少不如 WebBroker/Apache?
  • 关于扩展确实是一个问题,但很多问题都可以通过 $$ - 更多硬件、更多内存、负载平衡器等来解决。在这种情况下,安全性不容易购买。
【解决方案2】:

Indy HTTP 服务器调用 WinSock API,并且能够实现:

  • 完整的 HTTP/1.1 服务器;
  • 完整的 HTTPS 服务器(使用 OpenSSL 库或其他第三方,如 SecureBlackBox)。

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 内容。它自 Windows XP SP2 起以标准形式提供,因此在 Vista 和 7 中可用。使用此组件将让 Microsoft 为您完成所有调试工作,并将使用主机操作系统进行更新。例如,我在我们的客户端-服务器 ORM 中使用它,或者直接替换已弃用的 DCOM 连接,在客户端具有非常好的速度和稳定性。

【讨论】:

    【解决方案3】:

    关于虚拟服务器 - HTTP 1.1 规范要求客户端发送 Host 请求标头,以便虚拟服务器知道哪个域专门用于处理多个域具有相同 IP 的情况。 TIdHTTPRequestInfo 具有该值的 Host 属性。事实上,TIdHTTPServer 会在内部验证以确保 HTTP 1.1 请求在触发其任何 OnCommand... 事件之前具有 Host 标头。

    【讨论】:

    • Ahhh - 然后我根据主机使用 if..then 语句来处理虚拟主机。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 2011-02-27
    • 2013-02-03
    • 2020-08-03
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多