我们假设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重写并不是我想要的。
答案 0 :(得分:1)
在同一端口上从HTTP重定向到HTTPS并不容易。通常,端口专用于每个协议。当您在公共网站上看到从http到https的重定向(使用默认端口)时,第一个请求是http://example.com(浏览器将通过端口80请求,HTTP的默认端口)并返回响应重定向到https://example.com(浏览器将通过端口443请求,HTTPS的默认设置)。
使用Restlet等应用程序服务器时,处理此重定向的典型方法是在其前面放置Apache httpd等Web服务器,在端口80上侦听HTTP,在端口443上侦听HTTPS,并在它们到端口9999(你不需要暴露在互联网上,因为它只能通过环回来访问)。
但是当您连接到http://myapp.com:9999时,您的应用程序服务器首先需要进行TLS握手,并且您的浏览器或用户代理不会提供,因为它不是vanilla HTTP协议所必需的。也就是说,您可能能够找到一种方法来检测浏览器正在使用的协议并动态响应。有关创建方法的更详细说明,请参阅此node.js protocol detection example。如果你真的必须为两个协议使用一个端口,那么可以在Restlet中做同样的事情。