HTTP/2 в IIS

Дэвид Со

Совместимость

Версия Примечания
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-уведомлений?

Так как отправка сервера — это новая функция в HTTP/2, существуют новые API, которые необходимо вызвать, чтобы воспользоваться преимуществами этой функции. При вызове API PushPromise в ASP.NET или API HttpDeclarePush из собственного модуля IIS вы предоставляете URL-адрес и необязательные заголовки запроса для запроса, который ожидается клиентом. Если принудительная отправка поддерживается базовым подключением, происходит две вещи:

  • Клиенту отправляется PUSH_PROMISE, поэтому клиент может проверка, существует ли ресурс в кэше.
  • В очередь запросов для отправленного ресурса добавляется новый запрос.

Если базовое подключение не поддерживает отправку (клиент отключенную отправку или клиент 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 и т. д.

В пользовательском интерфейсе диспетчера служб Интернета эту функцию можно найти в разделе Ведение журнала в разделе Выбор полей.

Изображение страницы ведения журнала I I S с раскрывающимся списком

После внесения изменений щелкните Применить в области Действия справа.

Ниже приведен пример выходных данных файла журнала с включенным полем "Версия протокола".

#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

  1. Если вы используете Windows 10, это можно найти в разделе Программы и компоненты, а затем включить или отключить компоненты Windows, а затем установить флажок Internet Information Services . Если вы используете Windows Server 2016, запустите диспетчер сервера, затем добавьте роли и компоненты на панели мониторинга, а затем выберите в списке веб-сервер (IIS).

    Изображение страницы

  2. После завершения установки запустите диспетчер служб Интернета и создайте самозаверяющий сертификат, выбрав параметр Сертификаты сервера в представлении Компонентов сервера. Обратите внимание, что самозаверяющий сертификат в этом примере используется только для демонстрации или тестирования (не рекомендуется для защиты рабочих сайтов).

    Изображение представления

    Изображение диалогового окна

  3. Перейдите на веб-сайт по умолчанию и в разделе Привязки создайте новую привязку TLS с помощью только что созданного самозаверяющего сертификата.

    Снимок экрана: диалоговое окно добавления привязки сайта с выделенным типом I P-адреса и выбранным в раскрывающемся списке локальным сервером IS.

  4. Запустите браузер с компьютера с Windows 10 или Windows Server 2016 и нажмите клавишу F12 (или перейдите в раздел Параметры и включите средства разработчика F12), а затем перейдите на вкладку Сеть. Перейдите в https://localhost раздел и вуаля, вы находитесь на HTTP/2!

    Снимок экрана: дефис локального узла F 12 Developer Tools с вкладкой

Когда 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 см. в статье Сборка 2015 talk HTTP/2 в Windows 10: браузер, приложения и веб-сервер.

Авторы: Майк Бишоп, Дэвид Со (с вкладами и признаниями Роб Трейс, Барис Каглар, Назим Лала)