我用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协议。它也可以用自定义标题代替。 –