Что происходит, когда браузер, поддерживающий SPDY, получает ответ HTTP2 (H2)?
У меня такое чувство, что браузер с поддержкой SPDY будет воспринимать его как ответ SPDY. Тем не менее, самое большее, что я могу найти, это заверение, что ответ H2 изящно ухудшится до HTTP1.1. Я рассматриваю возможность обслуживания ресурсов в режиме H2 (множественные запросы, отсутствие шардинга домена и т. Д.), Но мне нужно поддерживать некоторые браузеры, отличные от H2 (например, браузер Android 4.1). Я буду в порядке, если все клиенты будут по крайней мере совместимы со SPDY?
Бонусный вопрос: есть ли сложности, связанные с протоколами смешивания? Мы находимся в веб-среде, которая не поддерживает H2, но я рассматриваю возможность обслуживания большей части наших активов из CDN. Предположим, TLS.
1 ответ
Браузеры с поддержкой SPDY или HTTP/2 используют расширение TLS (старое NPN или новое ALPN) для согласования протокола, по которому они говорят по TLS.
Клиент отправляет список протоколов, на которые он способен говорить, в порядке предпочтения (например, h2,spdy/3.1,http/1.1
), и сервер выбирает один протокол из тех в этом списке, который он также поддерживает (и который соответствует требованиям безопасности).
Например, если у вас старый браузер, который не поддерживает h2
, отправим spdy/3.1,http/1.1
и сервер никогда не выберет h2
(даже если это поддерживает). Если сервер не поддерживает SPDY, остается только http/1.1
и это то, что составляет "изящную деградацию" к HTTP/1.1.
Никогда не существует вероятность, что, если клиент запросит говорить SPDY (а не HTTP/2), сервер ответит HTTP/2, если только грубые ошибки реализации на сервере.
SPDY постепенно сокращается в пользу HTTP/2. Например, последние версии Chrome больше не поддерживают SPDY.
Нет никаких сложностей, когда вы отправляете запросы в разные домены, а серверы используют разные протоколы: это прозрачно обрабатывается браузерами.
Если ваш сервер может говорить на SPDY и HTTP/1.1, а CDN может говорить на HTTP/2 и HTTP/1.1, то вы должны использовать браузер, который поддерживает все 3 протокола, чтобы использовать преимущества SPDY и HTTP/2. Браузер может согласовывать SPDY с вашим сервером и согласовывать HTTP/2 с CDN и страницей, состоящей из ресурсов обоих источников.
Тем не менее, браузеры скоро отбросят (или уже удалили) SPDY, поэтому в последних браузерах вы можете в конечном итоге говорить HTTP / 1.1 с вашим сервером и HTTP/2 с CDN, тем самым теряя преимущества SPDY|HTTP/2 для ресурсов на вашем сервере. сервер.