Прочитать на английском

Поделиться через


Реализации веб-сервера в ASP.NET Core

Примечание

Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 9 этой статьи.

Предупреждение

Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 9 этой статьи.

Важно!

Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

В текущем выпуске см . версию .NET 9 этой статьи.

Авторы: Том Дисктра (Tom Dykstra), Стив Смит (Steve Smith), Стивен Хальтер (Stephen Halter) и Крис Росс (Chris Ross)

Приложение ASP.NET Core выполняется вместе с внутрипроцессной реализацией HTTP-сервера. Реализация сервера прослушивает HTTP-запросы и передает их в приложение как набор функций запросов, объединенных в HttpContext.

ASP.NET Core поставляется с Kestrel сервером, который является межплатформенным HTTP-сервером по умолчанию.

Kestrel

Kestrel сервер представляет собой кроссплатформенную реализацию HTTP-сервера по умолчанию. Kestrel обеспечивает максимальную производительность и использование памяти, но обладает некоторыми дополнительными функциями в HTTP.sys. Дополнительные сведения см. в разделе Kestrel и HTTP.sys настоящего документа.

Используйте Kestrel в следующих случаях:

  • Сам по себе как пограничный сервер обработки запросов непосредственно из сети, включая Интернет.

    Kestrel обмен данными напрямую с Интернетом без обратного прокси-сервера

  • С обратным прокси-сервером, таким как службы IIS, Nginx или Apache. Обратный прокси-сервер получает HTTP-запросы из Интернета и пересылает их на Kestrel.

    Kestrel взаимодействует косвенно с Интернетом через обратный прокси-сервер, например IIS, Nginx или Apache.

Поддерживается любая из этих конфигураций размещения (с обратным прокси-сервером и без него).

Рекомендации Kestrel по настройке и сведения о том, когда следует использовать Kestrel в конфигурации обратного прокси-сервера, см Kestrel . в ASP.NET Core.

ASP.NET Core поставляется с Kestrel сервером, который является межплатформенным HTTP-сервером по умолчанию.

Nginx с Kestrel

Сведения о том, как использовать Nginx в Linux в качестве обратного прокси-сервера для Kestrel, см. в статье Размещение ASP.NET Core в Linux с использованием Nginx.

HTTP.sys

Если приложения ASP.NET Core запускаются в Windows, HTTP.sys является альтернативой Kestrel. Kestrel рекомендуется для HTTP.sys, если приложению не требуются функции, недоступные в Kestrel. Дополнительные сведения см. в статье Реализация веб-сервера HTTP.sys в ASP.NET Core.

HTTP.sys взаимодействует с Интернетом напрямую.

HTTP.sys можно также использовать для приложений, которые имеют доступ только к внутренней сети.

HTTP.sys взаимодействует с внутренней сетью напрямую

Руководство по настройке HTTP.sys см. в статье Реализация веб-сервера HTTP.sys в ASP.NET Core.

Инфраструктура сервера ASP.NET Core

IApplicationBuilder, доступный в методе Startup.Configure, предоставляет свойство ServerFeatures типа IFeatureCollection. Kestrel и HTTP.sys предоставляют только одну функцию каждый, IServerAddressesFeature, однако разные реализации сервера могут предоставлять дополнительные функции.

IServerAddressesFeature можно использовать для того, чтобы узнать, какой порт в реализации сервера привязан к среде выполнения.

Пользовательские серверы

Если встроенные серверы не отвечают требованиям приложения, можно создать реализацию пользовательского сервера. В руководстве по открытому веб-интерфейсу .NET (OWIN) демонстрируется запись реализации на основе IServer. Требуют реализации только интерфейсы компонентов, используемых приложением, но как минимум должны поддерживаться IHttpRequestFeature и IHttpResponseFeature.

Запуск сервера

Сервер запускается, когда интегрированная среда разработки (IDE) или редактор запускает приложение:

  • Visual Studio — профили запуска можно использовать для запуска приложения и сервера с помощью IIS Express/модуля ASP.NET Core или консоли.
  • Visual Studio Code: приложение и сервер запускаются Omnisharp, который активирует отладчик CoreCLR.
  • Visual Studio для Mac. Приложение и сервер запускаются отладчиком Mono Soft-Mode.

При запуске приложения из командной строки в папке проекта dotnet run запускает приложение и сервер (только Kestrel и HTTP.sys). Конфигурация определяется параметром -c|--configuration, который может принимать значение Debug (по умолчанию) или Release.

Файл launchSettings.json предоставляет конфигурацию при запуске приложения с помощью dotnet run или с помощью отладчика, встроенного в инструментарий, например Visual Studio. Если профили запуска присутствуют в launchSettings.json файле, используйте --launch-profile {PROFILE NAME} параметр с dotnet run командой или выберите профиль в Visual Studio. Дополнительные сведения см. в статьях dotnet run и Упаковка дистрибутивов .NET Core.

Поддержка HTTP/2

HTTP/2 поддерживается в ASP.NET Core для следующих сценариев развертывания:

  • Kestrel
    • Операционная система
      • Windows Server 2016 / Windows 10 или более поздних версий†
      • Linux с OpenSSL 1.0.2 или более поздней версии (например, Ubuntu 16.04 или более поздней версии)
      • macOS 10.15 или более поздней версии
    • Требуемая версия .NET Framework: .NET Core версии 2.2 или более поздней
  • HTTP.sys
    • Windows Server 2016 / Windows 10 или более поздних версий
    • Требуемая версия .NET Framework: не применимо к развертываниям HTTP.sys.
  • IIS (внутрипроцессный)
    • Windows Server 2016 / Windows 10 или более поздних версий; IIS 10 или более поздней версии
    • Требуемая версия .NET Framework: .NET Core версии 2.2 или более поздней
  • IIS (внепроцессный)
    • Windows Server 2016 / Windows 10 или более поздних версий; IIS 10 или более поздней версии
    • Общедоступные подключения пограничного сервера используют HTTP/2, однако обратное прокси-соединение с Kestrel использует HTTP/1.1.
    • Требуемая версия .NET Framework: не применимо к внепроцессным развертываниям IIS.

†Kestrel имеет ограниченную поддержку HTTP/2 в Windows Server 2012 R2 и Windows 8.1. Поддержка ограничена из-за небольшого числа поддерживаемых комплектов шифров TLS, доступных для этих операционных систем. Для обеспечения безопасности TLS-подключений может потребоваться сертификат, созданный с использованием алгоритма ECDSA.

  • Kestrel
    • Операционная система
      • Windows Server 2016 / Windows 10 или более поздних версий†
      • Linux с OpenSSL 1.0.2 или более поздней версии (например, Ubuntu 16.04 или более поздней версии)
      • HTTP/2 будет поддерживаться для macOS в будущих выпусках.
    • Требуемая версия .NET Framework: .NET Core версии 2.2 или более поздней
  • HTTP.sys
    • Windows Server 2016 / Windows 10 или более поздних версий
    • Требуемая версия .NET Framework: не применимо к развертываниям HTTP.sys.
  • IIS (внутрипроцессный)
    • Windows Server 2016 / Windows 10 или более поздних версий; IIS 10 или более поздней версии
    • Требуемая версия .NET Framework: .NET Core версии 2.2 или более поздней
  • IIS (внепроцессный)
    • Windows Server 2016 / Windows 10 или более поздних версий; IIS 10 или более поздней версии
    • Общедоступные подключения пограничного сервера используют HTTP/2, однако обратное прокси-соединение с Kestrel использует HTTP/1.1.
    • Требуемая версия .NET Framework: не применимо к внепроцессным развертываниям IIS.

†Kestrel имеет ограниченную поддержку HTTP/2 в Windows Server 2012 R2 и Windows 8.1. Поддержка ограничена из-за небольшого числа поддерживаемых комплектов шифров TLS, доступных для этих операционных систем. Для обеспечения безопасности TLS-подключений может потребоваться сертификат, созданный с использованием алгоритма ECDSA.

  • Kestrel
    • Операционная система
      • Windows Server 2016 / Windows 10 или более поздних версий†
      • Linux с OpenSSL 1.0.2 или более поздней версии (например, Ubuntu 16.04 или более поздней версии)
      • HTTP/2 будет поддерживаться для macOS в будущих выпусках.
    • Требуемая версия .NET Framework: .NET Core версии 2.2 или более поздней
  • HTTP.sys
    • Windows Server 2016 / Windows 10 или более поздних версий
    • Требуемая версия .NET Framework: не применимо к развертываниям HTTP.sys.
  • IIS (внутрипроцессный)
    • Windows Server 2016 / Windows 10 или более поздних версий; IIS 10 или более поздней версии
    • Требуемая версия .NET Framework: .NET Core версии 2.2 или более поздней
  • IIS (внепроцессный)
    • Windows Server 2016 / Windows 10 или более поздних версий; IIS 10 или более поздней версии
    • Общедоступные подключения пограничного сервера используют HTTP/2, однако обратное прокси-соединение с Kestrel использует HTTP/1.1.
    • Требуемая версия .NET Framework: не применимо к внепроцессным развертываниям IIS.

†Kestrel имеет ограниченную поддержку HTTP/2 в Windows Server 2012 R2 и Windows 8.1. Поддержка ограничена из-за небольшого числа поддерживаемых комплектов шифров TLS, доступных для этих операционных систем. Для обеспечения безопасности TLS-подключений может потребоваться сертификат, созданный с использованием алгоритма ECDSA.

  • HTTP.sys
    • Windows Server 2016 / Windows 10 или более поздних версий
    • Требуемая версия .NET Framework: не применимо к развертываниям HTTP.sys.
  • IIS (внепроцессный)
    • Windows Server 2016 / Windows 10 или более поздних версий; IIS 10 или более поздней версии
    • Общедоступные подключения пограничного сервера используют HTTP/2, однако обратное прокси-соединение с Kestrel использует HTTP/1.1.
    • Требуемая версия .NET Framework: не применимо к внепроцессным развертываниям IIS.

Подключение HTTP/2 должно использовать согласование протокола уровня приложений (ALPN) и TLS 1.2 или более поздней версии. Дополнительные сведения см. в разделах, о конкретных сценариях развертывания сервера.

Шаблоны корпоративных веб-приложений

Рекомендации по созданию надежного, безопасного, производительного, тестового и масштабируемого приложения ASP.NET Core см. в шаблонах веб-приложений Enterprise. Полный пример веб-приложения с высоким качеством рабочей среды, реализующий шаблоны, доступен.

Дополнительные ресурсы