2010-11-04 2 views
10

Я изучаю поле заголовка Upgrade в HTTP 1.1 (RFC 2817) и случайно прочитал запись wikipedia для HTTP. В этой статье есть следующее утверждение:Насколько хорошо поддерживается механизм HTTP Upgrade?

«Поддержка браузера для заголовка Upgrade, однако, почти не существует, поэтому HTTPS по-прежнему является доминирующим методом установления безопасного HTTP-соединения».

Я надеялся реализовать свой веб-сервис, чтобы он использовал поле заголовка Upgrade, чтобы избежать необходимости прослушивания двух сокетов (один для HTTP, а другой для HTTPS). Это заявление, которое я не смог проверить ни в каком другом месте, заставляет меня немного нервничать из-за этого. Является ли приведенное выше утверждение в Википедии где-то рядом с правильным или это грубое обобщение?

+0

Это нормально использовать порт 80 для http и порта 443 для https - почему вы хотите избежать прослушивания на двух портах? – thejh

+0

^как говорит thejh, и, кроме того, вы можете использовать SSL и non-SSL на одном и том же порту, но это еще хуже ИМХО. – Wrikken

+0

RFC 2817 предназначен для того, чтобы точно сказать, что говорит Wrikken, и содержит введение, которое оправдывает причины этого. Я не уверен, почему вы говорите, что это «хуже». –

ответ

2

Я изучал эту страницу на Википедии и наткнулся на этот вопрос. Я посмотрел вокруг и вот ситуации браузера поддержки так близко, как я могу сказать:

  • Хром поддерживает заголовок Upgrade, как показано, например, this bug.
  • Firefox не поддерживает «Upgrade: TLS», несмотря на то, что an open bug from 2005, последний комментарий 2010 года. Я думаю, они не будут добавлять его в ближайшее время.
  • Internet Explorer 10+, возможно, имеет значение this article, в котором описывается использование Upgrade для подключения к серверу websocket. This commit message также подразумевает, что IE 10 поддерживает «Upgrade: websocket».
  • Safari 6+ поддерживает обновление (см. here).

Для всех поддерживаемых браузеров я нашел примеры использования «Обновления: websocket», и никто не говорит, что обновление TLS будет работать. Таким образом, общий ответ заключается в том, что рискованно полагаться на это в производственном приложении.

Поддержка серверов кажется лучше; У Apache была поддержка «Upgrade: TLS» с 2.1.

0

Мне бы хотелось, чтобы все это было в http, но текущая ситуация больше зависит от имени сервера, поскольку его широко поддерживается. Его также трудно указать, что вы хотите, чтобы клиент обновлялся с использованием URL-адреса. Итак, если целью является виртуальный хостинг, одним из способов сделать это является TLS «указание имени сервера». См. RFC 3546 http://www.ietf.org/rfc/rfc3546.txt или http://en.wikipedia.org/wiki/Server_Name_Indication

+1

В моем случае речь идет о пользовательской программе, которая реализует HTTP-сервер. Я решил просто перенаправить на HTTPS, если HTTPS включен. Функция «указание имени сервера» действительно не имеет ничего общего с тем, что я изначально пытался выполнить, и не имеет ничего общего с механизмом обновления HTTP. –

Смежные вопросы