Требуется ли номер порта в HTTP-заголовке "Host"?

Скажем, я делаю HTTP-запрос к: foosite.com но порт, на который я фактически отправляю запрос, это 6103, и я НЕ помещаю этот порт в заголовок Host например:

GET /barpage HTTP/1.1
Host: foosite.com
Method: GET

Должен ли http-сервер распознать, что я пытаюсь связаться с ним по порту 6103? Или, так как это было опущено в заголовке запроса, я играю, если сервер фактически распознает это?

Я задаю этот вопрос, чтобы сказать следующее: я обнаружил, что браузеры, по крайней мере, Firefox + Chrome, поместили порт в заголовок Host. Но я не использую приложение Java. И когда порт не передается Host сервер отвечает обратно, думая, что я на порте 80. Так кому же мне нужен барсук? Оператор сервера или программист на Java?

Ответ 2

ОБНОВЛЕНО для современных браузеров:

Браузеры (и завиток) добавят порт только в том случае, если он не является стандартным портом, как того требует спецификация HTTP и указан в ответе @superfell.

Браузеры в этот день (2013), фактически лишат порт из заголовка хоста, когда порт является стандартным (http-порт 80, https-порт 443). Некоторые клиенты, которые используют свой собственный метод, например Baidu Spider, включают номер порта, даже если порт равен 80.

Является ли это правильным или нет, я не знаю. Спецификация не говорит, будет ли это нормально или не включать номер порта, когда используемый порт используется по умолчанию.

Чтобы ответить на ваш комментарий, серверы будут делать все, что им нужно, чтобы соответствовать спецификации, и спецификация предлагает только те случаи, КОТОРЫЕ ему нужны. Из-за этого я чувствую, что это не вопрос о том, как сервер справляется с ним - это больше, как клиент выдает запрос: включает номер порта в заголовке хоста, или нет.

Ответ 3

В RFC2616 говорится, что

"Хост" без какой-либо дополнительной информации о портах подразумевает порт по умолчанию для запрошенной услуги (например, "80" для URL-адреса HTTP). Например, запрос на исходном сервере для http://www.w3.org/pub/WWW/ должен включать:

GET /pub/WWW/ HTTP/1.1
Host: www.w3.org

Это означает, что https://example.com не понадобится также порт для трейлинга, поскольку порт по умолчанию известен для https. Я проверил HTTP-запросы от Firefox, Chrome и Edge и обнаружил, что ни один из них не добавил номер порта для заголовка хоста, когда протоком домена был https. Наверняка номер порта добавляется, когда номер порта также добавлен в URL. Ниже приведены скриншоты из Google chrome

Host header for a HTTP 1.1 request using https procotole Host header for a HTTP 1.1 resquest using a https with a port number in the URL

Ответ 4

Образцы заголовков фактического запроса на надежный несуществующий сервер " http://myhost.com:3003/content/page.htm "

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US;q=0.9,en;q=0.8,nb;q=0.7,de;q=0.6
Connection: keep-alive
Host: myhost.com:3244
Referer: http://myhost.com:3244/content/page.htm

RFC https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html требует некоторой подготовки для чтения.

Раздел 14:24 не так легко перевести все элементы в простую реальность:

Host = "Host" ":" host [ ":" port ] ;