Насколько хорошо поддерживается механизм HTTP Upgrade?

Я изучаю поле заголовка 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