2014-11-17 2 views
0

Предположим, что защищенное SSL приложение работает на порту HTTPS не по умолчанию, 9999.Переадресация HTTP на HTTPS (не по умолчанию порт) перенаправление

Когда пользователь будет иметь доступ к странице, как это:

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 

Теперь вопрос в том, возможно ли это чтобы перенаправить пользователя с HTTP на HTTPS с помощью Restlet в этом случае?

PS: Обратите внимание, что перенаправление/URI-переписывание с помощью Apache или аналогичного решения не является тем, что я ищу.

+0

[Restirect Redirect] (http://restlet.com/technical-resources/restlet-framework/guide/2.3/core/routing/redirection) – Dongqing

ответ

1

Непросто переадресовать с HTTP на HTTPS на тот же порт. Обычно для каждого протокола используется порт. Когда вы видите перенаправление с http на https на общедоступном веб-сайте (используя порты по умолчанию), первый запрос - http://example.com (который браузер запрашивает по порту 80, по умолчанию для HTTP) и возвращает ответ, который является перенаправлением на https://example.com (который браузер запросит через порт 443, по умолчанию для HTTPS).

При использовании сервера приложений, такого как Restlet, типичным способом обработки этого перенаправления является установка перед ним веб-сервера, такого как Apache httpd, прослушивания HTTP на порту 80 и HTTPS на порту 443 и проксирования обоих из них в порт 9999 (который вам не нужно выставлять в Интернет, поскольку он будет доступен только через loopback).

Но когда вы подключаетесь к http://myapp.com:9999, ваш сервер приложений ожидает в первую очередь рукопожатия TLS, и ваш браузер или пользовательский агент не будет предоставлять это, поскольку он не требуется для протокола HTTP-ванили. Тем не менее, вы можете придумать способ обнаружения протокола, который использует браузер, и динамически реагировать в соответствии с требованиями. Более подробное объяснение творческого способа сделать это см. В этом node.js protocol detection example. Если вы действительно должны использовать один порт для двух протоколов, это может сделать то же самое в Restlet.

Смежные вопросы