В заголовке запроса Host указывается номер порта сервера,на который отправляется запрос.
HTTP Host представляет собой доменное имя сервера.Он также может представлять номер порта Transmission Control Protocol (TCP),который использует сервер.Определение номера порта является необязательным,значение по умолчанию.
Заголовок HTTP host-это заголовок запроса,в котором указывается домен,к которому хочет получить доступ клиент (браузер).Этот заголовок необходим,потому что это довольно стандартная ситуация,когда серверы размещают веб-сайты и приложения на одном IP-адресе.
Имя узла используется,когда веб-клиент делает HTTP-запрос к узлу.Пользователь,делающий запрос,может указать IP-адрес сервера,а не имя хоста,но сейчас в Интернете это редкость.Имена хостов более удобны для пользователей,чем числовые IP-адреса.
Host
заголовка запроса определяет хост и номер порта сервера , к которому запрос отправляется.
Если порт не указан, подразумевается порт по умолчанию для запрошенной службы (например,
для URL-адреса HTTPS и 80
для URL-адреса HTTP).
Host
поле заголовка должно быть отправлено во всех сообщениях HTTP / 1.1 запроса. 400
(Bad Request) код состояния может быть отправлен на любое сообщение / 1.1 запроса HTTP , который испытывает недостаток или содержит более одного Host
поля заголовка.
Header type | Request header |
---|---|
Запрещенное имя заголовка | yes |
Syntax
Host: <host>:<port>
Directives
- <host>
доменное имя сервера (для виртуального хостинга).
- <port> Optional
Номер TCP порта,на котором прослушивается сервер.
Examples
Host: developer.mozilla.org
Specifications
Specification |
---|
Семантика HTTP # field. host |
Browser compatibility
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | |
Host | Yes | 12 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
See also
400
<base>
HTTP
-
Forwarded
Заголовок перенаправленного запроса содержит информацию,которая может быть добавлена обратными прокси-серверами (балансировщиками нагрузки,CDN и т.
-
From
Заголовок запроса From содержит адрес электронной почты в Интернете для пользователя,который управляет запрашивающим агентом.
-
If-Match
Заголовок HTTP-запроса If-Match ставит условие.
-
If-Modified-Since
HTTP-заголовок запроса If-Modified-Since ставит условие:сервер отправляет обратно запрошенный ресурс со статусом 200,только если он был последним после указанной даты.
- 1
- …
- 157
- 158
159- 160
- 161
- …
- 405
- Next
Ошибочный редирект с https на http://$host:443
СМСдизайн
актуально
Главная
Блог
Битрикс
Ошибочный редирект с https на http://$host:443
Ошибка неверного порта при отдельных переходах по страницам характерна не только для Виртуальной Машины, а и многих самостоятельных конфигураций с Nginx. Однако, данная ошибка присутствует во всех VM Bitrix на протяжении последних лет.
Как проявляется баг?
Самыми частыми симптомами появления проблемы являются появившиеся ошибки в отчетах поисковых краулеров
Простым взглядом на строки легко понять, что проблема кроется в том, что страница «находящаяся» на https пытается быть открытой по протоколу http или в «иную сторону».
Зачастую найти точки входа ботов на ошибочные страницы довольно сложно. Это могут быть результаты поиска, переход после авторизации, результаты форм и что угодно еще. Радует то, что по-большому счету искать причину и не нужно. Главное устранить эти «нелогичные» редиректы на уровне сервера.
Отдельным случаем проявления данной проблемы является открытие страницы с <i>ошибкой 400</i>. На данной странице красуется сообщение: The plain HTTP request was sent to HTTPS port
Правим конфиги «Виртуалки»
/etc/httpd/bx/conf/bx_ext_fgstockstudio.com.conf
Если у вас на виртуальной машине работает один сайт, то понадобится найти файл конфига Апапч:
/etc/httpd/bx/conf/default.conf
и над ServerAdmin [email protected]
ServerName https://YOUR_SITE
При многосайтовой конфигурация виртуалки делаем тоже самое, но в файле нужного сайта bx_ext_YOUR_SITE.conf
Альтернативный способ
Иногда описанного выше недостаточно. Приходится идти глубже и править директивы связанные с страницами ошибок. Ищем файл отвечающий за конфиг nginx нашего ssl домена
/etc/nginx/bx/site_avaliable/ssl.s1.conf
Добавляем error_page 497 https://$host$request_uri;. Получим нечто похожее на:
# Default SSL certificate enabled website server { listen 443 default_server http2; server_name _; # Enable SSL connection server_name_in_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host:443; proxy_set_header HTTPS YES; set $proxyserver "http://127.0.0.1:8888"; set $docroot "/home/bitrix/www"; index index.php; root /home/bitrix/www; include bx/conf/bitrix.conf; # Include server monitoring API's include bx/server_monitor.conf; error_page 497 https://$host$request_uri; }
Решение наверняка 🙂
Если не помогло все вышеописанное и ошибка остается — то причина в файле настроек nginx :
/etc/nginx/bx/site_avaliable/bx_ext_s1.conf
Нужен именно файл обычного протокола http (bx_ext_), а не https (bx_ext_ssl)
Добавляем return 301 https:/YourDomain.com$request_uri;. Получим нечто похожее на:
# Ansible managed # Additional website http server { listen 80 ; server_name YourDomain.com www.YourDomain.com; return 301 https://YourDomain.com$request_uri; . .. ... error_page 497 https://$host$request_uri; }
В 2020 году кроме коронавируса появилось еще что-то новое … и иногда нужно колдовать совсем не с nginx, а с http. Альтернативное решение описали тут.
Возврат к списку
Что такое HTTP-заголовок «Host»?
Заголовок Host
сообщает веб-серверу, какой виртуальный хост использовать (если настроен). Вы даже можете иметь один и тот же виртуальный хост, используя несколько псевдонимов (= домены и домены с подстановочными знаками). В этом случае у вас все еще есть возможность прочитать этот заголовок вручную в своем веб-приложении, если вы хотите обеспечить различное поведение в зависимости от адресованных доменов. Это возможно, потому что в вашем веб-сервере вы можете (и, если я не ошибаюсь, вы должны) настроить один виртуальный хост в качестве хоста по умолчанию. Этот виртуальный хост по умолчанию используется всякий раз, когда заголовок host
не соответствует ни одному из настроенных виртуальных хостов.
Это означает: Вы правильно поняли, хотя фраза «несколько хостов» может несколько ввести в заблуждение: Хост (адресуемая машина) один и тот же, то, что действительно разрешается в IP-адрес, отличается доменных имен (включая поддомены) которые также называются именами хостов (но не хостами!).
Хотя это и не является частью вопроса, забавный факт: эта спецификация привела к проблемам с SSL в первые дни, потому что веб-сервер должен доставлять сертификат, соответствующий домену, к которому обратился клиент. Однако, чтобы знать, какой сертификат использовать, веб-сервер должен заранее знать адресованное имя хоста. Но поскольку клиент отправляет эту информацию только по зашифрованному каналу (что означает: после того, как сертификат уже отправлен), сервер должен был предположить, что вы просматривали хост по умолчанию. Это означало один защищенный SSL домен на каждый IP-адрес/комбинацию портов.
Это устранено с помощью индикации имени сервера; однако это снова нарушает некоторую конфиденциальность, поскольку имя сервера теперь снова передается в виде обычного текста, поэтому каждый человек посередине увидит , к какому имени хоста вы пытаетесь подключиться.
Хотя веб-сервер может узнать имя хоста из указания имени сервера, заголовок Host
не устарел, поскольку информация об указании имени сервера используется только в рукопожатии TLS. При незащищенном соединении индикация имени сервера вообще отсутствует, поэтому Заголовок узла
все еще действителен (и необходим).
Еще один забавный факт: большинство веб-серверов (если не все) отклоняют ваш HTTP-запрос, если он не содержит ровно один заголовок Host
, даже если его можно было бы опустить, поскольку настроен только виртуальный хост по умолчанию. Это означает, что минимальной необходимой информацией в HTTP-(GET-)запросе является первая строка, содержащая METHOD
RESOURCE
и PROTOCOL VERSION
и по крайней мере заголовок Host
, например:
ПОЛУЧИТЬ /someresource.html HTTP/1.1 Хост: www.example.com
В документации MDN в заголовке «Хост» они на самом деле формулируют это так:
Поле заголовка узла должно быть отправлено во всех сообщениях запроса HTTP/1. 1. А Код состояния 400 (Bad Request) будет отправлен на любой запрос HTTP/1.1. сообщение, в котором отсутствует поле заголовка Host или которое содержит более одного поля.
Как упомянул Даррел Миллер, полные спецификации можно найти в RFC7230.
Заголовок узла — что такое инъекция заголовка узла HTTP?
7 марта 2022 г.
Чтение: 11 мин.
Ивона Симич
В этой статье:
HTTPSHTTP
Анализируем https://example.com
Цель сканирования https://example.com
Crashtest Security Suite будет проверять:
Раскрытие информации
Известные уязвимости
Неверная конфигурация SSL
Открытые порты
Завершите запрос на сканирование
Пожалуйста, заполните ваши данные, чтобы получить
быстрый аудит безопасности по электронной почте.