Как обрабатывать http-запросы, которые перенаправляются как https, с помощью моего приложения nodejs-express?
Я внедряю некоторые теги сценариев на веб-сайт с таким источником, как http:localhost:3000/css/my-page-css.css
, Хотя он работает практически на всех сайтах, есть этот конкретный сайт, который как-то отправляет все мои http
запросы как https
, Как мне справиться с таким делом?
Я настроил сервер https также в моем приложении nodejs, которое слушает порт 8443
и http слушает 3000
, Но когда я внедряю теги своего скрипта, у них есть src URL, которые указывают на порт 3000
, Таким образом, даже если в моем приложении nodejs настроен https, он не будет работать, поскольку будет прослушивать другой порт.
1 ответ
Вы используете HTTP Strict Transport Security (HSTS)
Используя веб-сайт securityheader.com по вашему URL-адресу или инструменты Chrome Developer, мы видим, что следующий заголовок HTTP возвращается вашим сайтом:
Strict-Transport-Security max-age=7889238
Этот заголовок HTTP будет настроен на вашем веб-сервере, и ваш веб-сервер будет сообщать браузеру: "В течение следующих 7889238 секунд используйте только HTTPS для этого домена. Если кто-то пытается использовать HTTP (набрав или нажав ссылку), тогда автоматически переключать HTTP на HTTPS перед отправкой на сервер."
Это функция безопасности, поскольку в настоящее время по умолчанию (если схема явно не указана) используется HTTP. Это позволяет владельцам веб-сайтов переключаться по умолчанию и, даже если это сильно, предотвращает возможность его переключения обратно.
HSTS установлен на уровне домена, и его нельзя включить для одного порта (например, 443), но не для другого (например, 3000) - он либо включен для этого домена, либо выключен.
Если вы действительно хотите использовать HTTP, то вам нужно удалить этот заголовок и удалить запомненное значение этого заголовка из вашего браузера. Хотя Chrome позволяет сделать это, набрав chrome://net-internals/#hsts
в URL и используя опцию удаления, самый простой способ сделать это - изменить максимальный возраст с 7889238 на 0, а затем снова загрузить веб-сайт. А затем полностью удалите заголовок.
Это может быть особенно раздражающим для сайтов, таких как localhost, где вы запрашиваете прокси и случайно устанавливаете его для этого фиктивного имени хоста. Вы должны увидеть, позволяет ли прокси-сервер вашего узла отбирать этот HTTP-заголовок. Некоторые могут сказать, что было бы лучше, если бы производители браузеров игнорировали HSTS для localhost, однако я думаю, что было бы лучше, если бы разработчики просто прекратили бороться с HTTPS и использовали это даже для сред разработки, использующих самозаверяющий сертификат, который добавляется в ваше локальное хранилище доверия. Это позволяет избежать проблем, таких как смешанный контент, а также использовать функции, которые только HTTPS (включая Brotli, HTTP/2, Geo Location... и т. Д.) При разработке (хотя некоторые браузеры, такие как Chrome, по-прежнему разрешают их на http://localhost/).
В качестве альтернативы настройте локальный псевдоним DNS для каждого из ваших сайтов разработчиков и используйте его с HTTPS или без него, в зависимости от того, о каком сайте идет речь.