Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Совместимость
| Версия | Примечания |
|---|---|
| IIS 10.0 | Поддержка HTTP/2 появилась в IIS 10.0 |
| IIS 8.5 и более ранних версий | ПРОТОКОЛ HTTP/2 не поддерживается до IIS 10.0 |
Что такое HTTP/2?
HTTP/2 — это переработка того, как передаются семантики HTTP через TCP-соединения, и поддержка HTTP/2 имеется в Windows 10 и Windows Server 2016. HTTP/2 является основным обновлением после почти двух десятилетий использования HTTP/1.1 и снижает влияние задержки и нагрузки подключения на веб-серверах.
Основным достижением HTTP/1.1 было использование постоянных подключений для обслуживания нескольких запросов подряд. В HTTP/2 постоянное подключение можно использовать для обслуживания нескольких одновременных запросов. В процессе HTTP/2 представлены несколько дополнительных функций, которые повышают эффективность HTTP через сеть.
Одно подключение для нескольких запросов
Для настройки каждого TCP-подключения требуется круговая поездка. Если вы используете шифрование, то подтверждение TLS занимает дополнительные 1-2 цикла. Все это происходит до отправки первого байта первого ответа. Повторное использование существующего подключения вместо настройки нового позволяет распределить накладные расходы между многими запросами. HTTP/2 резко сокращает необходимость ожидания запроса во время установки нового подключения или ожидания простоя существующего подключения. Так как одно подключение мультиплексируется между многими запросами, запрос обычно можно отправлять немедленно, не ожидая завершения других запросов.
Сжатие заголовков с помощью HPACK
HTTP поддерживает сжатие данных на протяжении веков. Однако заголовки отправляются как несжатый текст с большим количеством избыточности между запросами. (Многие из самых длинных заголовков отправляются точно с одинаковым значением по каждому запросу!) HTTP/2 представляет HPACK, схему сжатия заголовков HTTP, которая снижает избыточность между запросами.
Сжатие помогает мультиплексирование, так как запросы меньше. Это позволяет клиентам выполнять множество запросов в своих первых пакетах подключения, а окна управления потоками TCP по-прежнему малы.
Пуш-уведомление сервера
Запросы приходят по определённым шаблонам. Если клиент запрашивает один ресурс, сервер часто может предсказать, что понадобятся другие ресурсы, указанные на странице. В HTTP/1.1 инлайнинг использовался для доставки этих ресурсов клиентам в составе первого ответа. Встраивание имеет свои недостатки, а именно, встроенный ресурс не может быть кэширован для использования на других страницах, где на него также могут ссылаться.
HTTP/2 представляет концепцию "push" — сервер отвечает на запросы, которые клиент еще не сделал, но сервер прогнозирует, что клиент их сделает. Это позволяет серверам продолжать предоставлять преимущества сокращения задержки при встраивании, но в форме, которую клиент может кэшировать и повторно использовать на других страницах.
Как использовать HTTP/2?
Вы, возможно, уже готовы! Так как почти все браузеры уже поддерживают HTTP/2 в их самом текущем выпуске, а текущие данные показывают, что более 50% пользователей уже находятся в браузерах с поддержкой HTTP/2.
На сервере IIS, работающем на Windows 10 или Windows Server 2016, поддерживается протокол HTTP/2.
В настоящее время IIS поддерживает HTTP/2 только через TLS. При подключении HTTPS к веб-серверу под управлением IIS в Windows 10 http/2 используется, если клиент и сервер поддерживают его. В службах IIS мы реализовали HTTP/2 настолько прозрачно, насколько это возможно - вам не нужно ничего менять в приложении, чтобы HTTP/2 работал. Некоторые оптимизации HTTP/1.1 (сегментирование домена, встраивание и т. д.) больше не рекомендуется использовать в ПРОТОКОЛе HTTP/2, поэтому следует спланировать их удаление в будущем.
Что насчет push-уведомлений?
Так как push-отправка сервера является новой функцией в HTTP/2, существуют новые API, которые необходимо вызвать, чтобы воспользоваться его преимуществами. При вызове API PushPromise в ASP.NET или API HttpDeclarePush из собственного модуля IIS вы предоставляете URL-адрес и необязательные заголовки запросов для запроса, который вы ожидаете, что клиент делает. Если push-отправка поддерживается базовым подключением, происходит две вещи:
- PUSH_PROMISE отправляется клиенту, поэтому клиент может проверить, существует ли ресурс в кэше.
- Новый запрос добавляется в очередь запросов для отправленного ресурса.
Если базовое подключение не поддерживает push-отправку (клиент с отключенной отправкой или клиент HTTP/1.1), вызов ничего не делает и, тем не менее, считается успешным, поэтому вы можете безопасно вызвать API, не беспокоясь о том, разрешена ли отправка.
Параметры IIS
Новые параметры конфигурации IIS, относящиеся к ПРОТОКОЛу HTTP/2, отсутствуют.
В Windows Server 2016 Tech Preview упоминался ключ реестра 'DuoEnabled'. Этого больше не требуется. Как упоминалось выше, если конфигурация клиента и сервера поддерживает HTTP/2, службы IIS будут использовать HTTP/2 (или вернуться к HTTP/1.1, если это невозможно).
Версия протокола ведения журнала
Ведение журнала IIS имеет поле "Версия протокола", которое по умолчанию отключено. Включение этого поля полезно, если вы хотите отслеживать, какие запросы выполняются через HTTP/2, HTTP/1.1 и т. д.
В пользовательском интерфейсе Диспетчера служб Интернета это можно найти в разделе " Ведение журнала " с помощью команды "Выбрать поля".
После внесения изменений нажмите кнопку "Применить" в области "Действия " в правом углу.
Ниже приведен пример выходных данных файла журнала с включенным полем версии протокола:
#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2015-08-13 18:46:11
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2015-08-13 18:46:11 ::1 GET / - 443 - ::1 HTTP/2.0 Mozilla/5.0+(Windows+NT+10.0;+WOW64;+Trident/7.0;+Touch;+rv:11.0)+like+Gecko - 200 0 0 391
2015-08-13 18:46:11 ::1 GET /iisstart.png - 443 - ::1 HTTP/2.0 Mozilla/5.0+(Windows+NT+10.0;+WOW64;+Trident/7.0;+Touch;+rv:11.0)+like+Gecko https://localhost/ 200 0 0 100
Пошаговое руководство по IIS с http/2
Если вы работаете под управлением Windows 10, это можно найти с помощью программ и компонентов, а затем включить или отключить функции Windows, а затем включить флажок "Службы Internet Information Services ". Если вы используете Windows Server 2016, запустите диспетчер серверов, а затем добавьте роли и компоненты на панели мониторинга, а затем выберите веб-сервер (IIS) из списка.
После завершения установки запустите диспетчер служб Интернета и создайте самозаверяющий сертификат, выбрав параметр "Сертификаты сервера " в представлении компонентов сервера. Обратите внимание, что использование самозаверяющего сертификата в этом примере предназначено только для демонстрации или тестирования (не рекомендуется защищать рабочие сайты).
Перейдите на веб-сайт по умолчанию и в разделе "Привязки", создайте новую привязку TLS с только что созданным самозаверяющим сертификатом.
Запустите браузер с компьютера с Windows 10 или Windows Server 2016 и нажмите клавишу F12 (или перейдите к параметрам и включите средства разработчика F12), а затем перейдите на вкладку "Сеть ". Перейдите к
https://localhostи voila, вы находитесь на HTTP/2!
Когда http/2 не поддерживается?
В некоторых случаях http/2 нельзя использовать в сочетании с другими функциями. В таких ситуациях Windows вернется к HTTP/1.1 и продолжит транзакцию. Это может включать согласование HTTP/1.1 во время рукопожатия или отправку кода ошибки клиенту с указанием повторить попытку через соединение HTTP/1.1.
- Проверка подлинности Windows (NTLM/Kerberos/Negotiate) не поддерживается с протоколом HTTP/2. В этом случае IIS перейдет на протокол HTTP/1.1.
- Открытый текст — как упоминалось выше, IIS в настоящее время поддерживает только протокол HTTP/2 через TLS. Снова IIS перейдёт на HTTP/1.1.
- Регулирование пропускной способности — в IIS есть функция ограничения пропускной способности (в Inetmgr выберите сайт, в области "Действия" под "Настройка" — "Ограничения"). Это относится к HTTP/1.1, но не применяется для HTTP/2 (будет продолжаться без ошибок или ограничения пропускной способности).
Дополнительные сведения
Дополнительную информацию об углубленном обсуждении HTTP/2 и реализации клиента и сервера в Windows 10 см. в докладе "HTTP/2 в Windows 10: браузеры, приложения и веб-серверы" на конференции Build 2015.
Авторы: Майк Бишоп, Дэвид Со (с участием и благодарностями Робу Трейсу, Барису Каглару, Назиму Лала)