我用Java編寫了一個servlet,我想知道是否使用HTTP或HTTPS執行對該servlet的請求。如何知道對servlet的請求是否使用HTTP或HTTPS執行?
我想我可以使用request.getProtocol()
,但它在兩種方法上都返回HTTP/1.1。
任何想法?
我用Java編寫了一個servlet,我想知道是否使用HTTP或HTTPS執行對該servlet的請求。如何知道對servlet的請求是否使用HTTP或HTTPS執行?
我想我可以使用request.getProtocol()
,但它在兩種方法上都返回HTTP/1.1。
任何想法?
HttpSerlvetRequest.isSecure()就是答案。 ServletContainer負責在以下情況下返回true:
容器也應該當HTTPS收到請求該請求屬性可供選擇:
isSecure。一定要檢查繼承的方法。
https和http在不同的端口上運行。因此,您可以從請求中獲取端口,並知道請求來自哪個端口,以便您可以瞭解該協議。 int port = request.getServerPort();
@Krishnan端口號是任意的......我可以在44上運行HTTP 3和HTTPS 80或其任何組合。 – hd1
isSecure至少回到[1.2](http://download.oracle.com/javaee/1.2.1/api/javax/servlet/ServletRequest.html#isSecure%28%29),並且不是Tomcat特定的。 –
您可以請分享您在哪裏獲得'X-SSL-Secure:真實'位?我一直在搜索,我無法找到有關此標題的更多信息。 – Zotov
這不適用於我的環境:Apache 2.4.10作爲前端代理;在java中知道這個請求是不可能的,因爲這個請求是通過http或https到apache完成的。當然,我把它當作http來訪問Java,但我需要知道,前臺代理如何被訪問。 - 事實上,正如@Zotov也提到的那樣:幾乎沒有關於X-SSL-Sercure標題的信息。所以我認爲這不是大致實施?! – badera
標題名稱可能不同,因爲它不是很標準。但是,這裏的概念是代理可以添加關於SSL的標題,服務器可以讀取它們。對於Ex,Nginx添加了X-SSL協議。它也可以用自定義標題代替。 –