【问题标题】:Restlet HTTP to HTTPS (non-default port) redirectRestlet HTTP 到 HTTPS(非默认端口)重定向
【发布时间】:2015-01-14 12:06:49
【问题描述】:

假设 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 重写不是我想要的。

【问题讨论】:

    标签: java http ssl https restlet


    【解决方案1】:

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

    使用Restlet等应用服务器时,处理这种重定向的典型方法是在其前面放置一个Apache httpd等Web服务器,在端口80上监听HTTP,在端口443上监听HTTPS,并代理两者它们连接到端口 9999(您不需要将其暴露给 Internet,因为它只能通过环回访问)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-29
      • 2020-09-18
      • 2019-02-02
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      相关资源
      最近更新 更多