2011-10-31 26 views
1

我有一個用CPP編寫的web服務器。我想確定請求的服務器類型。即請求是來自http還是https URL?從http請求中確定服務器類型

+2

你真的不能辦理'http'和'https'同一網絡端口上,如'https'要求加密連接。 –

+1

http://或https://定義了用於請求的PROTOCOL,而不是服務器類型... –

+0

難道你不能從實際的服務器代碼中找出什麼嗎?您使用的是哪些服務器代碼 - 它可能會傳遞一些額外的數據,您可以通過HTTPS查看有關受保護請求的額外數據。 – Rup

回答

4

如果你有自己的用C++編寫的網絡服務器,你已經知道它是通過http還是https訪問,因爲它們通過不同的端口並需要不同的處理。

+0

問題是HTTP和HTTP服務器都在同一端口上偵聽,即兩個VIPS都指向相同的端口? – TopCoder

+0

「虛擬IP」不是一個端口。 TCP/IP使用IP地址來標識特定(虛擬)機器,以及TCP端口號以標識該機器上的服務。 – MSalters

+1

虛擬IP地址與端口不同。您通常在端口80上監聽HTTP,而端口443監聽HTTPS,這兩個IP地址都是相同的。 – janm

3

你正在聽哪個端口? 默認情況下,HTTPS URL以「https://」開頭,默認情況下使用端口443,其中HTTP URL以「http://」開頭,默認使用端口80。

還有其他問題,例如您如何管理證書以提供安全連接?

這篇文章可能會有所幫助 - http://java.sun.com/developer/technicalArticles/Security/secureinternet/

+0

問題是HTTP和HTTP服務器都在同一端口上偵聽,即兩個VIPS都指向同一個端口? – TopCoder

+1

我懷疑是否有可能在同一個端口上有http和https,那麼您將如何區分要說的語言? 如果使用CONNECT方法,則可以將請求連接轉換爲透明的TCP/IP隧道,通常通過未加密的HTTP代理來實現SSL加密通信(HTTPS)。 (請參閱維基百科) 我在Serverfault中找到一個有趣的線程 - http://serverfault.com/questions/47876/handling-http-and-https-requests-using-a-single-port-with-nginx – sarat