Я изучаю поле заголовка Upgrade в HTTP 1.1 (RFC 2817) и выяснил запись wikipedia для HTTP. Эта статья имеет следующее утверждение:
"Поддержка браузера для заголовка Upgrade, однако, почти не существует, поэтому HTTPS по-прежнему является доминирующим методом установления безопасного HTTP-соединения".
Я надеялся реализовать свой веб-сервис, чтобы он использовал поле заголовка Upgrade, чтобы избежать необходимости прослушивания двух сокетов (один для HTTP, а другой для HTTPS). Это выражение, которое я не смог проверить ни в каком другом месте, заставляет меня немного нервничать из-за этого. Является ли приведенное выше утверждение в википедии где-то рядом с правильным или это грубое обобщение?
Ответ 1
Я изучал это на этой странице в Википедии и наткнулся на этот вопрос. Я огляделся, и здесь ситуация с поддержкой браузера как можно ближе:
- Chromium поддерживает заголовок Upgrade, как указано, например, эта ошибка.
- Firefox не поддерживает "Upgrade: TLS", несмотря на открытую ошибку с 2005 года, последний комментарий 2010 года. Думаю, они не будут добавив его в ближайшее время.
- Internet Explorer 10+, вероятно, делает это, учитывая эту статью, в которой описывается использование Upgrade для подключения к серверу websocket. Это сообщение фиксации также подразумевает, что IE 10 поддерживает "Обновление: websocket".
- Safari 6+ поддерживает обновление (см. здесь).
Для всех поддерживаемых браузеров я нашел примеры использования "Upgrade: websocket", и никто не сказал, что будут работать обновления TLS. Таким образом, общий ответ заключается в том, что рискованно полагаться на это в производственном приложении.
Поддержка сервера кажется лучше; У Apache была поддержка "Upgrade: TLS" с версии 2.1.
Ответ 2
Я бы хотел, чтобы все это было в http, но текущая ситуация больше опирается на Server Name Indication, так как широко поддерживается. Его также трудно указать, что вы хотите, чтобы клиент обновлялся с использованием URL-адреса. Итак, если целью является виртуальный хостинг, одним из способов сделать это является TLS "указание имени сервера". См. RFC 3546 http://www.ietf.org/rfc/rfc3546.txt или http://en.wikipedia.org/wiki/Server_Name_Indication