Я установил hsts для своего домена на сайте http: //server.mydom.tld: 80, поэтому браузер переходит в порт https: //server.mydom.tld на порт 443
Однако у меня также есть другие веб-серверы, работающие на других портах. Итак, когда я иду в http: //server.mydom.tld: 8888 он пересылается https: //server.mydom.tld: 8888, но этот сервер не поддерживает https, поэтому запрос не выполняется.
Это согласно спецификации?
Я заметил, что не запускаю hsts на http: //mydom.tld или http: //www.mydom.tld, что, вероятно, является ошибкой.
Что делать?
Да, это сделано намеренно. RFC 6797 состояния:
The UA MUST replace the URI scheme with "https" [RFC2818], and if the URI contains an explicit port component of "80", then the UA MUST convert the port component to be "443", or>> if the URI contains an explicit port component that is not equal to "80", the port component value MUST be preserved; otherwise, if the URI does not contain an explicit port component, the UA MUST NOT add one. NOTE: These steps ensure that the HSTS Policy applies to HTTP over any TCP port of an HSTS Host.
Вы должны запускать простые службы HTTP в другом домене или, что еще лучше, использовать сервер HTTP + TLS в качестве обратного прокси-сервера для внутренней простой службы HTTP.
Заголовок Strict-Transport-Security игнорируется браузером, когда доступ к вашему сайту осуществляется по протоколу HTTP; это потому, что злоумышленник может перехватить HTTP-соединения и внедрить заголовок или удалить его. Когда доступ к вашему сайту осуществляется через HTTPS без ошибок сертификата, браузер знает, что ваш сайт поддерживает HTTPS, и будет учитывать заголовок Strict-Transport-Security.
Если кто-то действительно не хочет запускать https в другой службе, можно добавить псевдоним в DNS, поэтому https: //server.domain.tld и http: //service.domain.tld: 8888 находятся на одном IP / сервере
Тогда можно добавить редирект с http: //service.domain.tld и https: //service.domain.tld к http: //service.domain.tld: 8888