Этот код ответа возвращается, если предыдущий запрос содержал запрос на обновление используемого в настоящее время соединения до другого протокола с использованием Connection: upgrade
и Upgrade
заголовка , который определяет один или несколько другие протоколы для изменения на.
Эта функция полезна, если вы еще не уверены, поддерживает ли сервер HTTP / 2, и вы сначала подключаетесь к нему через HTTP / 1.1, а также после того, как узнали, что он также поддерживает HTTP / 2 переключитесь на этот протокол при запросе сервера обновить текущее соединение до HTTP / 2. Сервер может объявить о поддержке других протоколов, добавив к своим ответам заголовок Upgrade
с поддерживаемыми протоколами.
Как указано в RF C, клиент выдаст запрос, такой как:
GET /some/resource HTTP/1.1
Host: www.acme.com
Connection: upgrade
Upgrade: HTTP/2.0
Если сервер поддерживает HTTP / 2, он, вероятно, ответит ответом, таким как
HTTP/1.1 101 Switching Protocols
Connection: upgrade
Upgrade: HTTP/2.0
, чтобы указать, что соединение было успешно обновлено до HTTP / 2, и любой дальнейший обмен данными по этому соединению должен следовать протоколу HTTP / 2.
Обратите внимание, однако, что сервер не вынужден переключать протоколы. Он также может полностью игнорировать такой запрос, если предпочитает общаться по старому протоколу. В то время как список предлагаемых протоколов должен быть выражен в порядке предпочтения, в первую очередь с наиболее предпочтительным протоколом, серверу также разрешается игнорировать любой порядок предпочтений и выбирать один из предложенных протоколов самостоятельно. Однако серверу не разрешено переключаться на любой другой протокол, не указанный клиентом, поскольку клиент может не поддерживать этот тип протокола и, таким образом, препятствовать дальнейшему обмену данными.