2011-09-23 54 views
3

很久以前,我使用Delphi 2007和WebBroker(TWebModule)開始了一些「Web應用程序」。當時我認爲你需要一個網絡服務器,如Apache或微軟IIS來創建任何類型的網站。此外,我不使用大部分Apache功能(虛擬服務器除外,因此我可以在一個IP地址和SSL上擁有多個域)。所以對我來說,Apache只是一個額外的層,使得調試變得困難。我應該將我的WebBroker項目移植到Indy

現在進入Indy(TIdHTTPServer)。如果我理解正確,Indy是一個網絡服務器。所以通過使用Indy,我不再需要使用Apache或其他Web服務器。它是否正確?

我在Indy環境中是否有任何支持虛擬服務器的問題?那麼SSL呢?我已經搜索了文獻,並從我能看到它完全支持SSL證書。

我現在正在將我的一些應用程序從WebBroker移植到Indy。這主要需要請求我的代碼參照內替換:與AResponseInfo TWebResponse:TIdHTTPResponseInfo TWebRequest與ARequestInfo:TIdHTTPRequestInfo和引用響應。

有沒有辦法在Indy中使用TWebModule體系結構,以便我不需要全部重寫?

最後還有什麼我需要關心的?我的目標是讓Apache擺脫困境。

+0

Delphi的哪個版本? –

+0

@TOndrej Indy支持Delphi 5(或6)和更新版本... – mjn

+0

@mjn:Delphi 5. –

回答

3

是的,您可以使用Indy的TidHTTPServer作爲網絡服務器,但它比IIS或Apache低得多。沒有虛擬服務器的概念 - 你必須自己實現。

Indy通過OpenSSL dll支持SSL。

我想你最擔心的將是安全相關......有數百萬和數百萬個運行Apache或IIS的站點,並且有很多人致力於在這些平臺上發現缺陷,一羣人修復這些缺陷。印地安人不是這樣......有一兩個人在新聞組上回應你發現的錯誤。 (尤其是一個人,他可能會在這裏迴應你的問題。)

現在,我使用Indy HTTP服務器(以及SecureBlackBox SSL支持),我發現它對我的目的非常好。

+0

另外 - Web應用程序調試器內部使用Indy HTTP Server來運行Web Broker數據模塊...所以你可以建模你的服務器後Delphi中的WAD實用程序。 –

+1

當然,這使得Apache和IIS有更多更大的目標,所以你也有更多的壞人在尋找和開發漏洞利用!讓服務器絕對安全的唯一方法就是關閉它;-) – HMcG

+0

我認爲,使用Indy HTTP服務器,縮放與安全問題幾乎一樣糟糕。 –

2

印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和Seven中也是如此。使用這個組件可以讓Microsoft爲你做所有的調試工作,並且它將被主機操作系統更新。我在客戶端 - 服務器ORM中使用它,或者直接替換掉已棄用的DCOM連接,並在客戶端以非常好的速度和穩定性進行替換。

2

關於虛擬服務器 - HTTP 1.1規範要求客戶端發送Host請求標頭,以便虛擬服務器知道當多個域具有相同的IP時,虛擬服務器專門用於處理這種情況。 TIdHTTPRequestInfo擁有該值的Host屬性。實際上,TIdHTTPServer內部驗證以確保HTTP 1.1請求在觸發其任何OnCommand...事件之前具有Host標頭。

+0

Ahhh - 然後我根據主機簡單地使用if..then語句處理虛擬主機。 –

+0

這是正確的。 –