有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Restlet HTTP到HTTPS(非默认端口)重定向

假设SSL安全应用程序正在非默认HTTPS端口9999上运行

当用户访问这样的页面时:

https://myapp.com:9999

将返回正确的响应

但当他试图通过非安全的方式访问页面时-如下所示:

http://myapp.com:9999

这是返回的响应(十六进制):

15 03 01 00 02 02 0A

这实际上意味着:

15 alert
03 01 Version
00 02 Length
02 0A Fatal-unexpected message

现在的问题是,在这种情况下,是否可以使用Restlet将用户从HTTP重定向到HTTPS

PS:请注意,使用Apache或类似解决方案重写重定向/URI不是我想要的


共 (1) 个答案

  1. # 1 楼答案

    在同一端口上从HTTP重定向到HTTPS并不容易。通常每个协议都有一个专用端口。当您在公共网站上看到从http重定向到https(使用默认端口)时,第一个请求是到http://example.com(浏览器将通过端口80请求,http的默认端口),它返回一个重定向到https://example.com(浏览器将通过端口443请求,https的默认端口)

    当使用应用程序服务器(如Restlet)时,处理此重定向的典型方法是将web服务器(如Apache httpd)放在它前面,在端口80上侦听HTTP,在端口443上侦听HTTPS,并将两者代理到端口9999(您无需将其公开到Internet,因为它只能通过环回访问)

    但是,当您连接到http://myapp.com:9999时,您的应用程序服务器首先需要TLS握手,而您的浏览器或用户代理不会提供这种握手,因为普通HTTP协议不需要TLS握手。也就是说,您可能能够找到一种方法来检测浏览器正在使用的协议,并相应地动态响应。如需有关创造性方法的更详细说明,请参阅此node.js protocol detection example。如果您真的必须为两个协议使用一个端口,那么在Restlet中也可以做同样的事情