Модернизация
Модернизация
Заголовок HTTP 1.1 (только) Upgrade может использоваться для модернизации уже установленного соединения клиент/сервер до другого протокола (по тому же транспортному протоколу). Например, его может использовать клиент для модернизации соединения с HTTP 1.1 до HTTP 2.0 или соединения HTTP или HTTPS в WebSocket.
Предупреждение: HTTP/2 явно запрещает использование этого механизма/заголовка; он специфичен для HTTP/1.1.
| Тип заголовка | Заголовок запроса, Заголовок ответа |
|---|---|
| Запрещенное имя заголовка | да |
Обзор
Поле заголовка Upgrade может использоваться клиентами, чтобы предложить серверу переключиться на один (или несколько) из перечисленных протоколов в порядке убывания приоритета.
Например, клиент может отправить запрос GET как показано ниже, перечислив предпочтительные протоколы для переключения (в данном случае "example/1" и "foo/2"):
GET /index.html HTTP/1.1 Host: www.example.com Connection: upgrade Upgrade: example/1, foo/2
Примечание: Connection: upgrade должен быть установлен всякий раз, когда отправляется Upgrade.
Сервер может проигнорировать запрос по любой причине, в этом случае он должен ответить так, как если бы заголовок Upgrade не был отправлен (например, с 200 OK).
Если сервер решит модернизировать соединение, он должен:
- Отправить ответ со статусом
101 Switching Protocolsс заголовкомUpgrade, который указывает протокол(ы), на который происходит переключение. Например:HTTP/1.1 101 Switching Protocols Upgrade: foo/2 Connection: Upgrade
- Отправить ответ на исходный запрос с использованием нового протокола (сервер может переключиться только на протокол, с помощью которого он может выполнить исходный запрос).
Сервер также может отправить заголовок в рамках ответа 426 Upgrade Required, чтобы указать, что сервер не выполнит запрос с использованием текущего протокола, но может сделать это, если протокол изменится. Затем клиент может запросить изменение протокола, используя описанный выше процесс.
Более подробная информация и примеры приведены в разделе Механизм модернизации протокола.
Синтаксис
Connection: upgrade Upgrade: protocol_name[/protocol_version]
Примечания:
- Заголовок
Connectionс типомupgradeвсегда должен отправляться вместе с заголовкомUpgrade(как показано выше). - Протоколы перечисляются через запятую в порядке убывания приоритета. Версия протокола необязательна. Например:
Connection: upgrade Upgrade: a_protocol/1, example, another_protocol/2.2
Директивы
- любой список протоколов, разделённых запятыми (каждый с необязательной версией протокола)
-
Один или несколько имён протоколов с необязательной версией ("/" разделены). Протоколы перечислены в порядке убывания приоритета.
Примеры
Connection: upgrade Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
Connection: Upgrade Upgrade: websocket
Спецификации
| Спецификация |
|---|
| Семантика HTTP # field.upgrade |
| Семантика HTTP # status.426 |
| HTTP/2 # informational-responses |
Совместимость с браузерами
| Рабочий стол | Мобильный | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | |
Upgrade |
Да |
Да |
Да |
Нет |
Да |
Нет |
Да |
Да |
Да |
Да |
Нет |
Да |
См. также
- Механизм модернизации протокола
-
101Switching Protocol -
426Upgrade Required Connection
© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Upgrade