В заголовке запроса Host указывается номер порта сервера,на который отправляется запрос.


HTTP Host представляет собой доменное имя сервера.Он также может представлять номер порта Transmission Control Protocol (TCP),который использует сервер.Определение номера порта является необязательным,значение по умолчанию.

Заголовок HTTP host-это заголовок запроса,в котором указывается домен,к которому хочет получить доступ клиент (браузер).Этот заголовок необходим,потому что это довольно стандартная ситуация,когда серверы размещают веб-сайты и приложения на одном IP-адресе.

Имя узла используется,когда веб-клиент делает HTTP-запрос к узлу.Пользователь,делающий запрос,может указать IP-адрес сервера,а не имя хоста,но сейчас в Интернете это редкость.Имена хостов более удобны для пользователей,чем числовые IP-адреса.


Host заголовка запроса определяет хост и номер порта сервера , к которому запрос отправляется.

Если порт не указан, подразумевается порт по умолчанию для запрошенной службы (например,

443 для URL-адреса HTTPS и 80 для URL-адреса HTTP).

Host поле заголовка должно быть отправлено во всех сообщениях HTTP / 1.1 запроса. 400 (Bad Request) код состояния может быть отправлен на любое сообщение / 1.1 запроса HTTP , который испытывает недостаток или содержит более одного Host поля заголовка.

Header typeRequest header
Запрещенное имя заголовкаyes

Syntax

Host: <host>:<port>

Directives

<host>

доменное имя сервера (для виртуального хостинга).

<port> Optional

Номер TCP порта,на котором прослушивается сервер.

Examples

Host: developer.mozilla.org

Specifications

Specification
Семантика HTTP
# field. host

Browser compatibility

DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebView AndroidChrome AndroidFirefox для AndroidOpera AndroidSafari на IOSSamsung 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 на протяжении последних лет.

Как проявляется баг?

Самыми частыми симптомами появления проблемы являются появившиеся ошибки в отчетах поисковых краулеров

Google и Яндекс. В один прекрасный день после перехода на https протокол в отчетах начинают попадаться ошибочные страницы с urlhttp://host.com:443/page или наоборот https://host.com:80/page

Простым взглядом на строки легко понять, что проблема кроется в том, что страница «находящаяся» на 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

Открытые порты

Завершите запрос на сканирование

Пожалуйста, заполните ваши данные, чтобы получить
быстрый аудит безопасности по электронной почте.