#http #http-headers
#http #http-заголовки
Вопрос:
Если клиент хочет согласовать изменение протокола, он делает это через upgrade
http-заголовок, возможно, вот так:
Upgrade: TLS/1.0
Если сервер готов к обновлению, он отвечает с 101 status code
и upgrade
заголовком, возможно, примерно так:
HTTP/1.1 101 Switching Protocols
Upgrade: TLS/1.0, HTTP/1.1
Но что, если сервер не желает или не может выполнить обновление? Каким кодом состояния он отвечает? И какие заголовки он отправляет?
Ответ №1:
Он игнорирует запрос на обновление и отвечает так, как если бы Upgrade
поле отсутствовало в запросе, поэтому запрошенный ресурс возвращается.
Комментарии:
1. Это то, что говорится в спецификации, что обычно делают браузеры или что?
2. @james.garriss это то, что говорится в спецификации и что делают соответствующие серверы. Не уверен, почему браузеры здесь уместны, поскольку речь идет о поведении сервера.
3. Я нашел другой документ, RFC 2817, который более понятен. В нем говорится (в 3.1): «В этом случае сервер МОЖЕТ нормально реагировать на операцию очистки HTTP или переключаться на защищенную операцию». ietf.org/rfc/rfc2817.txt Но эта спецификация касается обновления до TLS, поэтому я не уверен, применимо ли это ко всем обновлениям.
4. Сервер либо обновляется, и сообщает об этом в сообщении 101, либо нет. Если это не так, он отвечает на запрос как есть. Я думаю, это довольно ясно.
5. Подумайте об этом так: клиент может разговаривать с сервером HTTP 1.0, который вообще не знает об обновлении и, следовательно, игнорирует поле. Поскольку спецификация, безусловно, не объявляет все старые серверы несоответствующими, разрешается игнорировать запросы на обновление.