Activate Web Server on Windows 10 for HTTP or FTP, how to?
An simple example how to activate IIS Web Server or FTP Server on Windows 10, this solution is also for Windows 8.1 and Seven!
See also: ► sleep mode in windows 10 ► Wrong decimal symbol ► Windows 10 desktop icons are so big
(Image-1) HTTP FTP WEB Server on Windows 10!
To enable or disable the Web Server or FTP Server is suitable for Windows 10 Pro, Enterprise, Home, Windows 8.1, Windows 8, Windows-Server 2019, 2016, 2012, Windows 7 Basic, Professional, Starter, Ultimate
Internet Information Services is the web server software included with most Windows and also from Windows 10 PRO. You can also install a web server to serve dynamic content!
File Transfer Protocol (FTP) extensions are now integrated into IIS 8 and can be managed using the IIS Manager on Windows 10.
The File Transfer Protocol is a protocol used to transfer files and folder over the Internet. People commonly use File Transfer Protocol to make files available for others to download, but you can also use File Transfer Protocol to upload personal webpages for building a website or for putting images on a picture sharing site.
Microsoft also equips the desktop version of Windows with Internet Information Services. This makes it possible to turn any notebook into a web server with the Home Edition. Although the configuration is a bit more complex than many free HTTP servers, but the IIS are better integrated into the system.
Windows built in http server
This web server is designed to aid application development. It may also be useful for testing purposes or for application demonstrations that are run in controlled environments. It is not intended to be a full-featured web server. It should not be used on a public network.
The web server runs only one single-threaded process, so PHP applications will stall if a request is blocked.
URI requests are served from the current working directory where PHP was started, unless the -t option is used to specify an explicit document root. If a URI request does not specify a file, then either index.php or index.html in the given directory are returned. If neither file exists, the lookup for index.php and index.html will be continued in the parent directory and so on until one is found or the document root has been reached. If an index.php or index.html is found, it is returned and $_SERVER[‘PATH_INFO’] is set to the trailing part of the URI. Otherwise a 404 response code is returned.
If a PHP file is given on the command line when the web server is started it is treated as a «router» script. The script is run at the start of each HTTP request. If this script returns false , then the requested resource is returned as-is. Otherwise the script’s output is returned to the browser.
You can configure the built-in webserver to fork multiple workers in order to test code that requires multiple concurrent requests to the built-in webserver. Set the PHP_CLI_SERVER_WORKERS environment variable to the number of desired workers before starting the server. This is not supported on Windows.
This experimental feature is not intended for production usage. Generally, the built-in Web Server is not intended for production usage.
Example #1 Starting the web server
Постройте свое будущее с Windows Server 2019
Реализовать любую стратегию развития вашей организации поможет Windows Server 2019 — операционная система, которая объединяет локальные среды с сервисами Azure, поддерживает гибридные сценарии использования и позволяет извлечь максимальную выгоду из существующих инвестиций.
Windows Server Summit 2020
Узнайте о новейших функциях и возможностях Windows Server — непосредственно от специалистов Microsoft. Посмотрите демонстрации и ознакомьтесь с рекомендациями по модернизации рабочих нагрузок независимо от того, где вы используете Windows Server: в локальной среде, в гибридной среде или в Azure.
Microsoft Ignite
Конференция Ignite прошла 22–24 сентября 2020 г. — это было наше первое цифровое мероприятие! Посмотрите выступления об инновационных возможностях Windows Server, которые вы пропустили.
Узнайте, как создать эффективную гибридную и многооблачную стратегию, отвечающую современным меняющимся требованиям бизнеса, и подготовиться к будущему в рамках этого бесплатного онлайн-мероприятия продолжительностью 60 минут.
Best lightweight web server (only static content) for Windows [closed]
Want to improve this question? Update the question so it’s on-topic for Stack Overflow.
Closed 8 years ago .
I got application server running in Windows – IIS6.0 with Zend Server to execute PHP. I am looking for lightweight static content only web server on this same machine which will relive IIS form handling static content and increase performance.
It need to be only static content web server – maximum small and maximum effective – lighttpd seems too big because allow to FastCGI.
I am looking for: Windows, static content only, fast, and lightweight.
I am using Windows Server 2003.
8 Answers 8
single executable
very small memory footprint
allows multiple worker threads
easy to install as service
configurable with a configuration file if required
You can use Python as a quick way to host static content. On Windows, there are many options for running Python, I’ve personally used CygWin and ActivePython.
To use Python as a simple HTTP server just change your working directory to the folder with your static content and type python -m SimpleHTTPServer 8000 , everything in the directory will be available at http:/localhost:8000/
Python 3
To do this with Python, 3.4.1 (and probably other versions of Python 3), use the http.server module:
The smallest one I know is lighttpd.
Security, speed, compliance, and flexibility — all of these describe lighttpd (pron. lighty) which is rapidly redefining efficiency of a webserver; as it is designed and optimized for high performance environments. With a small memory footprint compared to other web-servers, effective management of the cpu-load, and advanced feature set (FastCGI, SCGI, Auth, Output-Compression, URL-Rewriting and many more) lighttpd is the perfect solution for every server that is suffering load problems. And best of all it’s Open Source licensed under the revised BSD license.
Edit: removed Windows version link, now a spam/malware plugin site.
Реализация веб-сервера HTTP.sys в ASP.NET Core HTTP.sys web server implementation in ASP.NET Core
Авторы: Том Дикстра (Tom Dykstra) и Крис Росс (Chris Ross) By Tom Dykstra and Chris Ross
HTTP.sys — это веб-сервер для ASP.NET Core, который запускается только в Windows. HTTP.sys is a web server for ASP.NET Core that only runs on Windows. HTTP.sys является альтернативой серверу Kestrel, предлагая некоторые функции, отсутствующие в Kestrel. HTTP.sys is an alternative to Kestrel server and offers some features that Kestrel doesn’t provide.
HTTP.sys не подходит для использования с IIS или IIS Express из-за несовместимости с модулем ASP.NET Core. HTTP.sys isn’t compatible with the ASP.NET Core Module and can’t be used with IIS or IIS Express.
HTTP.sys поддерживает следующие функции: HTTP.sys supports the following features:
Аутентификация Windows Windows Authentication
Совместное использование портов Port sharing
Использование HTTPS с SNI HTTPS with SNI
Использование HTTP/2 через TLS (Windows 10 и более поздние версии) HTTP/2 over TLS (Windows 10 or later)
Прямая передача файлов Direct file transmission
Кэширование откликов Response caching
Использование WebSockets (Windows 8 и более поздние версии) WebSockets (Windows 8 or later)
Поддерживаемые версии Windows: Supported Windows versions:
Windows 7 и более поздние версии Windows 7 or later
Windows Server 2008 R2 и более поздние версии Windows Server 2008 R2 or later
Условия для применения HTTP.sys When to use HTTP.sys
HTTP.sys удобно использовать с развертываниями в таких случаях: HTTP.sys is useful for deployments where:
когда нужно подключить сервер к Интернету напрямую без использования служб IIS; There’s a need to expose the server directly to the Internet without using IIS.
когда для внутренних развертываний нужна функция, отсутствующая в Kestrel. An internal deployment requires a feature not available in Kestrel. Дополнительные сведения см. в разделе Сравнение Kestrel и HTTP.sys For more information, see Kestrel vs. HTTP.sys
HTTP.sys — это проверенная технология, которая защищает от многих типов атак, а также обеспечивает надежность, безопасность и масштабируемость полнофункционального веб-сервера. HTTP.sys is mature technology that protects against many types of attacks and provides the robustness, security, and scalability of a full-featured web server. Сами службы IIS выполняются в качестве HTTP-прослушивателя поверх HTTP.sys. IIS itself runs as an HTTP listener on top of HTTP.sys.
Поддержка HTTP/2 HTTP/2 support
Протокол HTTP/2 включен для приложений ASP.NET Core, если выполнены следующие базовые требования: HTTP/2 is enabled for ASP.NET Core apps if the following base requirements are met:
установлена ОС Windows Server 2016 либо Windows 10 или более поздних версий; Windows Server 2016/Windows 10 or later
установлено подключение с поддержкой согласования протокола уровня приложений (ALPN); Application-Layer Protocol Negotiation (ALPN) connection
Подключение TLS 1.2 или более поздней версии. TLS 1.2 or later connection
Если установлено подключение HTTP/2, HttpRequest.Protocol возвращает HTTP/2 . If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2 .
Протокол HTTP/2 включен по умолчанию. HTTP/2 is enabled by default. Если не удается установить подключение HTTP/2, применяется резервный вариант HTTP/1.1. If an HTTP/2 connection isn’t established, the connection falls back to HTTP/1.1. В будущих версиях Windows будут доступны флаги конфигурации HTTP/2, в том числе возможность отключения HTTP/2 с использованием HTTP.sys. In a future release of Windows, HTTP/2 configuration flags will be available, including the ability to disable HTTP/2 with HTTP.sys.
Проверка подлинности в режиме ядра с помощью Kerberos Kernel mode authentication with Kerberos
HTTP.sys делегирует задачи в проверку подлинности в режиме ядра с помощью протокола проверки подлинности Kerberos. HTTP.sys delegates to kernel mode authentication with the Kerberos authentication protocol. Проверка подлинности в режиме пользователя не поддерживается с Kerberos и HTTP.sys. User mode authentication isn’t supported with Kerberos and HTTP.sys. Необходимо использовать учетную запись компьютера для расшифровки маркера/билета Kerberos, полученного из Active Directory и переадресованного клиентом на сервер для проверки подлинности пользователя. The machine account must be used to decrypt the Kerberos token/ticket that’s obtained from Active Directory and forwarded by the client to the server to authenticate the user. Зарегистрируйте имя субъекта-службы (SPN) для узла, а не пользователя приложения. Register the Service Principal Name (SPN) for the host, not the user of the app.
Способы применения HTTP.sys How to use HTTP.sys
Настройка приложения ASP.NET Core для использования HTTP.sys Configure the ASP.NET Core app to use HTTP.sys
Вызовите метод расширения UseHttpSys при создании узла, указав все необходимые параметры HttpSysOptions. Call the UseHttpSys extension method when building the host, specifying any required HttpSysOptions. В следующем примере для параметров задаются значения по умолчанию: The following example sets options to their default values:
Дополнительная настройка HTTP.sys выполняется с помощью параметров реестра. Additional HTTP.sys configuration is handled through registry settings.
Параметры HTTP.sysHTTP.sys options
Свойство. Property
Описание Description
Значение по умолчанию Default
AllowSynchronousIO
Указывает, разрешен ли синхронные операции ввода-вывода для HttpContext.Request.Body и HttpContext.Response.Body . Control whether synchronous input/output is allowed for the HttpContext.Request.Body and HttpContext.Response.Body .
Указывает разрешенные схемы аутентификации. Specify the allowed authentication schemes. Может быть изменен в любое время до удаления прослушивателя. May be modified at any time prior to disposing the listener. Предоставляет значения, полученные при перечислении AuthenticationSchemes: Basic , Kerberos , Negotiate , None и NTLM . Values are provided by the AuthenticationSchemes enum: Basic , Kerberos , Negotiate , None , and NTLM .
None
EnableResponseCaching
Выполняет попытку кэшировать режим ядра для ответов с допустимыми заголовками. Attempt kernel-mode caching for responses with eligible headers. Ответ не может включать заголовки Set-Cookie , Vary или Pragma . The response may not include Set-Cookie , Vary , or Pragma headers. Он должен включать заголовок Cache-Control со значением public , а также значение shared-max-age или max-age заголовок Expires . It must include a Cache-Control header that’s public and either a shared-max-age or max-age value, or an Expires header.
true
Http503Verbosity
Поведение HTTP.sys при отклонении запросов в соответствии с условиями регулирования. The HTTP.sys behavior when rejecting requests due to throttling conditions.
Максимальное число попыток установить одновременное подключение. The maximum number of concurrent connections to accept. Использует -1 для бесконечных циклов. Use -1 for infinite. Использует null для работы с параметром реестра на уровне компьютера. Use null to use the registry’s machine-wide setting.
null (уровень компьютер (machine-wide значение) setting)
MaxRequestBodySize
См. раздел MaxRequestBodySize. See the MaxRequestBodySize section.
30 000 000 байт. 30000000 bytes (
28.6 MB)
RequestQueueLimit
Максимально допустимое число запросов в очереди. The maximum number of requests that can be queued.
1000 1000
RequestQueueMode
Указывает, отвечает ли сервер за создание и настройку очереди запросов или он должен подключаться к существующей очереди. This indicates whether the server is responsible for creating and configuring the request queue, or if it should attach to an existing queue. Большинство имеющихся параметров конфигурации не применяются при подключении к существующей очереди. Most existing configuration options do not apply when attaching to an existing queue.
RequestQueueMode.Create
RequestQueueName
Имя очереди запросов HTTP.sys. The name of the HTTP.sys request queue.
null (анонимная очередь) null (Anonymous queue)
ThrowWriteExceptions
Указывает, следует ли вызывать исключение или завершать работу нормально, когда запись текста ответа завершается ошибкой из-за отключения клиента. Indicate if response body writes that fail due to client disconnects should throw exceptions or complete normally.
false Нормальное завершение. (complete normally)
Timeouts
Предоставляет конфигурацию TimeoutManager HTTP.sys, которую также можно настроить в реестре. Expose the HTTP.sys TimeoutManager configuration, which may also be configured in the registry. Дополнительные сведения о каждом параметре, включая значения по умолчанию, см. здесь: Follow the API links to learn more about each setting, including default values:
TimeoutManager.DrainEntityBody — время, выделенное API сервера HTTP для очистки текста сущности при активном подключении. TimeoutManager.DrainEntityBody: Time allowed for the HTTP Server API to drain the entity body on a Keep-Alive connection.
TimeoutManager.EntityBody — время, выделенное на получение текста сущности запроса. TimeoutManager.EntityBody: Time allowed for the request entity body to arrive.
TimeoutManager.HeaderWait — время, выделенное для API сервера HTTP для выполнения синтаксического анализа заголовка запроса. TimeoutManager.HeaderWait: Time allowed for the HTTP Server API to parse the request header.
TimeoutManager.IdleConnection — время, допустимое для неактивного подключения. TimeoutManager.IdleConnection: Time allowed for an idle connection.
TimeoutManager.MinSendBytesPerSecond — минимальная скорость отправки ответа. TimeoutManager.MinSendBytesPerSecond: The minimum send rate for the response.
TimeoutManager.RequestQueue — время, выделенное для пребывания запроса в очереди до его получения приложением. TimeoutManager.RequestQueue: Time allowed for the request to remain in the request queue before the app picks it up.
UrlPrefixes
Указывает UrlPrefixCollection для регистрации с использованием HTTP.sys. Specify the UrlPrefixCollection to register with HTTP.sys. Удобнее всего использовать параметр UrlPrefixCollection.Add, который добавляет префикс к коллекции. The most useful is UrlPrefixCollection.Add, which is used to add a prefix to the collection. Могут быть изменены в любое время до удаления прослушивателя. These may be modified at any time prior to disposing the listener.
MaxRequestBodySizeMaxRequestBodySize
Максимально допустимый размер текста запроса в байтах. The maximum allowed size of any request body in bytes. Если задано значение null , размер максимального запроса не ограничен. When set to null , the maximum request body size is unlimited. Это ограничение не оказывает влияния на обновленные подключения, которые не имеют ограничений. This limit has no effect on upgraded connections, which are always unlimited.
Чтобы переопределить это ограничение в приложении ASP.NET Core MVC для IActionResult , рекомендуется использовать атрибут RequestSizeLimitAttribute в методе действия: The recommended method to override the limit in an ASP.NET Core MVC app for a single IActionResult is to use the RequestSizeLimitAttribute attribute on an action method:
При попытке приложения настроить ограничение для запроса после того, как приложение начало считывать запрос, возникает исключение. An exception is thrown if the app attempts to configure the limit on a request after the app has started reading the request. Свойство IsReadOnly указывает на то, что свойство MaxRequestBodySize находится в состоянии только для чтения и настраивать ограничение слишком поздно. An IsReadOnly property can be used to indicate if the MaxRequestBodySize property is in a read-only state, meaning it’s too late to configure the limit.
Если приложение должно переопределять MaxRequestBodySize по запросу, используйте IHttpMaxRequestBodySizeFeature: If the app should override MaxRequestBodySize per-request, use the IHttpMaxRequestBodySizeFeature:
При использовании Visual Studio убедитесь, что приложение не настроено для запуска IIS или IIS Express. If using Visual Studio, make sure the app isn’t configured to run IIS or IIS Express.
В Visual Studio профиль запуска по умолчанию использует IIS Express. In Visual Studio, the default launch profile is for IIS Express. Чтобы запустить проект как консольное приложение, измените выбранный профиль вручную, как показано на следующем снимке экрана. To run the project as a console app, manually change the selected profile, as shown in the following screen shot:
Настройка Windows Server Configure Windows Server
Определите, какие порты нужно открыть для приложения, и используйте брандмауэр Windows или командлет PowerShell New-NetFirewallRule, чтобы открыть порты брандмауэра для доступа трафика к HTTP.sys. Determine the ports to open for the app and use Windows Firewall or the New-NetFirewallRule PowerShell cmdlet to open firewall ports to allow traffic to reach HTTP.sys. В следующих командах и конфигурации приложения используется порт 443. In the following commands and app configuration, port 443 is used.
При развертывании на виртуальных машинах Azure откройте эти порты в группе безопасности сети. When deploying to an Azure VM, open the ports in the Network Security Group. В следующих командах и конфигурации приложения используется порт 443. In the following commands and app configuration, port 443 is used.
При необходимости получите и установите сертификаты X.509. Obtain and install X.509 certificates, if required.
В Windows создайте самозаверяющие сертификаты с помощью командлета PowerShell New-SelfSignedCertificate. On Windows, create self-signed certificates using the New-SelfSignedCertificate PowerShell cmdlet. Примеры, которые не поддерживаются, см. в разделе UpdateIISExpressSSLForChrome.ps1. For an unsupported example, see UpdateIISExpressSSLForChrome.ps1.
Установите самозаверяющие или подписанные центром сертификации сертификаты в хранилище сервера, выбрав Локальный компьютер > Личный. Install either self-signed or CA-signed certificates in the server’s Local Machine > Personal store.
Если приложение является развертыванием, не зависящим от платформы, установите NET Core или .NET Framework (или обе платформы, если это приложение .NET Core, предназначенное для .NET Framework). If the app is a framework-dependent deployment, install .NET Core, .NET Framework, or both (if the app is a .NET Core app targeting the .NET Framework).
.NET Core. Если приложению требуется .NET Core, загрузите установщик среды выполнения .NET Core на странице скачивания .NET Core и запустите его. .NET Core: If the app requires .NET Core, obtain and run the .NET Core Runtime installer from .NET Core Downloads. Не устанавливайте полный пакет SDK на сервере. Don’t install the full SDK on the server.
Платформа .NET Framework. Если приложению требуется .NET Framework, см. руководство по установке. .NET Framework: If the app requires .NET Framework, see the .NET Framework installation guide. Установите требуемую платформу .NET Framework. Install the required .NET Framework. Установщик последней версии .NET Framework доступен на странице скачивания .NET. The installer for the latest .NET Framework is available from the .NET Core Downloads page.
Если приложение развертывается автономно, в его развертывание включена среда выполнения. If the app is a self-contained deployment, the app includes the runtime in its deployment. Устанавливать .NET Framework на сервере не нужно. No framework installation is required on the server.
Настройте URL-адреса и порты в приложении. Configure URLs and ports in the app.
По умолчанию платформа ASP.NET Core привязана к http://localhost:5000 . By default, ASP.NET Core binds to http://localhost:5000 . Чтобы настроить префиксы URL-адресов и порты, используйте следующие параметры: To configure URL prefixes and ports, options include:
Переменная среды ASPNETCORE_URLS . ASPNETCORE_URLS environment variable
UrlPrefixes
В следующем примере кода показано, как использовать UrlPrefixes с локальным IP-адресом сервера 10.0.0.4 через порт 443. The following code example shows how to use UrlPrefixes with the server’s local IP address 10.0.0.4 on port 443:
Преимущество UrlPrefixes заключается в том, что при неправильном формате префиксов сразу же создается сообщение об ошибке. An advantage of UrlPrefixes is that an error message is generated immediately for improperly formatted prefixes.
Этот параметр в UrlPrefixes переопределяет параметры UseUrls / urls / ASPNETCORE_URLS . The settings in UrlPrefixes override UseUrls / urls / ASPNETCORE_URLS settings. Таким образом, преимущество переменных среды UseUrls , urls и ASPNETCORE_URLS заключается в возможности быстрого переключения между Kestrel и HTTP.sys. Therefore, an advantage of UseUrls , urls , and the ASPNETCORE_URLS environment variable is that it’s easier to switch between Kestrel and HTTP.sys.
Не используйте привязки с подстановочными знаками ( http://*:80/ и http://+:80 ) на верхнем уровне. Top-level wildcard bindings ( http://*:80/ and http://+:80 ) should not be used. Они создают уязвимости и ставят под угрозу безопасность приложения. Top-level wildcard bindings create app security vulnerabilities. Сюда относятся и строгие, и нестрогие подстановочные знаки. This applies to both strong and weak wildcards. Вместо подстановочных знаков используйте имена узлов или IP-адреса в явном виде. Use explicit host names or IP addresses rather than wildcards. Привязки с подстановочными знаками на уровне дочерних доменов (например, *.mysub.com ) не создают таких угроз безопасности, если вы полностью контролируете родительский домен (в отличие от варианта *.com , создающего уязвимость). Subdomain wildcard binding (for example, *.mysub.com ) isn’t a security risk if you control the entire parent domain (as opposed to *.com , which is vulnerable). Дополнительные сведения см. в стандарте RFC 7230, раздел 5.4, Host. For more information, see RFC 7230: Section 5.4: Host.
Предварительно зарегистрируйте префиксы URL-адресов на сервере. Preregister URL prefixes on the server.
Встроенным средством для настройки сервера HTTP.sys является netsh.exe. The built-in tool for configuring HTTP.sys is netsh.exe. С помощью netsh.exe можно зарезервировать префиксы URL-адресов и назначить сертификаты X.509. netsh.exe is used to reserve URL prefixes and assign X.509 certificates. Для использования этого средства требуются права администратора. The tool requires administrator privileges.
Используйте средство netsh.exe для регистрации URL-адреса приложения. Use the netsh.exe tool to register URLs for the app:
. Полное имя URL-адреса. : The fully qualified Uniform Resource Locator (URL). Не используйте привязки с подстановочными знаками. Don’t use a wildcard binding. Используйте допустимое имя узла или локальный IP-адрес. Use a valid hostname or local IP address. URL-адрес должен включать косую черту в конце.The URL must include a trailing slash.
. Определяет имя пользователя или группы пользователей. : Specifies the user or user-group name.
В следующем примере сервер имеет локальный IP-адрес 10.0.0.4 . In the following example, the local IP address of the server is 10.0.0.4 :
При регистрации URL-адреса средство возвращает ответ URL reservation successfully added . When a URL is registered, the tool responds with URL reservation successfully added .
Чтобы удалить зарегистрированный URL-адрес, используйте команду delete urlacl . To delete a registered URL, use the delete urlacl command:
Зарегистрируйте сертификаты X.509 на сервере. Register X.509 certificates on the server.
Используйте средство netsh.exe для регистрации сертификатов приложения. Use the netsh.exe tool to register certificates for the app:
. Задает локальный IP-адрес для привязки. : Specifies the local IP address for the binding. Не используйте привязки с подстановочными знаками. Don’t use a wildcard binding. Используйте допустимый IP-адрес. Use a valid IP address.
. Указывает порт для привязки.
: Specifies the port for the binding.
. Отпечаток сертификата X.509. : The X.509 certificate thumbprint.
. Глобальный уникальный идентификатор приложения, задаваемый разработчиком в информационных целях. : A developer-generated GUID to represent the app for informational purposes.
В справочных целях храните GUID в приложении в виде тега пакета. For reference purposes, store the GUID in the app as a package tag:
В Visual Studio сделайте следующее: In Visual Studio:
Откройте свойства проекта приложения, щелкнув приложение правой кнопкой мыши в обозревателе решений и выбрав Properties (Свойства). Open the app’s project properties by right-clicking on the app in Solution Explorer and selecting Properties.
Перейдите на вкладку Package (Пакет). Select the Package tab.
Введите GUID, который вы указали в поле Tags (Теги). Enter the GUID that you created in the Tags field.
Если Visual Studio не используется: When not using Visual Studio:
Откройте файл проекта приложения. Open the app’s project file.
в новую или существующую группу
с GUID, который вы создали. Add a
property to a new or existing
with the GUID that you created:
В следующем примере: In the following example:
Локальный IP-адрес сервера — 10.0.0.4 . The local IP address of the server is 10.0.0.4 .
Сетевой генератор случайных GUID задает значение appid . An online random GUID generator provides the appid value.
При регистрации сертификата средство возвращает ответ SSL Certificate successfully added . When a certificate is registered, the tool responds with SSL Certificate successfully added .
Чтобы удалить регистрацию сертификата, используйте команду delete sslcert . To delete a certificate registration, use the delete sslcert command:
Дополнительные сведения см. в справочной документации по netsh.exe: Reference documentation for netsh.exe:
Запустите приложение. Run the app.
Если выполнена привязка к localhost через HTTP (не HTTPS) с номером порта больше 1024, для запуска приложения права администратора не требуются. Administrator privileges aren’t required to run the app when binding to localhost using HTTP (not HTTPS) with a port number greater than 1024. При других конфигурациях (например, при использовании локального IP-адреса или привязки к порту 443) для запуска приложения требуются права администратора. For other configurations (for example, using a local IP address or binding to port 443), run the app with administrator privileges.
Приложение отвечает по общедоступному IP-адресу сервера. The app responds at the server’s public IP address. В этом примере подключение к серверу происходит через Интернет по общедоступному IP-адресу 104.214.79.47 сервера. In this example, the server is reached from the Internet at its public IP address of 104.214.79.47 .
В этом примере используется сертификат разработки. A development certificate is used in this example. После обхода предупреждения о ненадежном сертификате браузера происходит безопасная загрузка страницы. The page loads securely after bypassing the browser’s untrusted certificate warning.
Сценарии использования прокси-сервера и подсистемы балансировки нагрузки Proxy server and load balancer scenarios
Для приложений, размещенных с помощью файла HTTP.sys, которые взаимодействуют с запросами из Интернета или корпоративной сети, может потребоваться дополнительная настройка при размещении за прокси-серверами и подсистемами балансировки нагрузки. For apps hosted by HTTP.sys that interact with requests from the Internet or a corporate network, additional configuration might be required when hosting behind proxy servers and load balancers. Дополнительные сведения см. в разделе Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки. For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.
Расширенные возможности HTTP/2 для поддержки gRPC Advanced HTTP/2 features to support gRPC
Дополнительные возможности HTTP/2 в HTTP.SYS поддерживают gRPC, включая трейлеры ответов и отправку кадров сброса. Additional HTTP/2 features in HTTP.sys support gRPC, including support for response trailers and sending reset frames.
Требования для выполнения gRPC в HTTP.sys: Requirements to run gRPC with HTTP.sys:
Сборка 19041.508 или более поздняя ОС Windows 10. Windows 10, OS Build 19041.508 or later
Подключение TLS 1.2 или более поздней версии. TLS 1.2 or later connection
Трейлеры Trailers
Трейлеры HTTP похожи на заголовки HTTP, за исключением того, что они отправляются после отправки текста ответа. HTTP Trailers are similar to HTTP Headers, except they are sent after the response body is sent. Для IIS и HTTP.sys поддерживаются только трейлеры ответов HTTP/2. For IIS and HTTP.sys, only HTTP/2 response trailers are supported.
В приведенном выше примере кода: In the preceding example code:
SupportsTrailers обеспечивает поддержку трейлеров для ответа; SupportsTrailers ensures that trailers are supported for the response.
DeclareTrailer добавляет заданное имя трейлера в заголовок ответа Trailer . DeclareTrailer adds the given trailer name to the Trailer response header. Объявлять трейлеры ответа необязательно, но рекомендуется. Declaring a response’s trailers is optional, but recommended. Вызов DeclareTrailer должен производиться перед отправкой заголовков ответа. If DeclareTrailer is called, it must be before the response headers are sent.
AppendTrailer добавляет трейлер. AppendTrailer appends the trailer.
Reset Reset
Сброс позволяет серверу сбросить запрос HTTP/2 с указанным кодом ошибки. Reset allows for the server to reset a HTTP/2 request with a specified error code. Сброшенный запрос считается прерванным. A reset request is considered aborted.
Reset в предыдущем примере кода задает код ошибки INTERNAL_ERROR . Reset in the preceding code example specifies the INTERNAL_ERROR error code. Дополнительные сведения о кодах ошибок HTTP/2 см. в соответствующем разделе спецификации HTTP/2. For more information about HTTP/2 error codes, visit the HTTP/2 specification error code section.
Дополнительные ресурсы Additional resources
HTTP.sys — это веб-сервер для ASP.NET Core, который запускается только в Windows. HTTP.sys is a web server for ASP.NET Core that only runs on Windows. HTTP.sys является альтернативой серверу Kestrel, предлагая некоторые функции, отсутствующие в Kestrel. HTTP.sys is an alternative to Kestrel server and offers some features that Kestrel doesn’t provide.
HTTP.sys не подходит для использования с IIS или IIS Express из-за несовместимости с модулем ASP.NET Core. HTTP.sys isn’t compatible with the ASP.NET Core Module and can’t be used with IIS or IIS Express.
HTTP.sys поддерживает следующие функции: HTTP.sys supports the following features:
Аутентификация Windows Windows Authentication
Совместное использование портов Port sharing
Использование HTTPS с SNI HTTPS with SNI
Использование HTTP/2 через TLS (Windows 10 и более поздние версии) HTTP/2 over TLS (Windows 10 or later)
Прямая передача файлов Direct file transmission
Кэширование откликов Response caching
Использование WebSockets (Windows 8 и более поздние версии) WebSockets (Windows 8 or later)
Поддерживаемые версии Windows: Supported Windows versions:
Windows 7 и более поздние версии Windows 7 or later
Windows Server 2008 R2 и более поздние версии Windows Server 2008 R2 or later
Условия для применения HTTP.sys When to use HTTP.sys
HTTP.sys удобно использовать с развертываниями в таких случаях: HTTP.sys is useful for deployments where:
когда нужно подключить сервер к Интернету напрямую без использования служб IIS; There’s a need to expose the server directly to the Internet without using IIS.
когда для внутренних развертываний нужна функция, отсутствующая в Kestrel, например аутентификация Windows. An internal deployment requires a feature not available in Kestrel, such as Windows Authentication.
HTTP.sys — это проверенная технология, которая защищает от многих типов атак, а также обеспечивает надежность, безопасность и масштабируемость полнофункционального веб-сервера. HTTP.sys is mature technology that protects against many types of attacks and provides the robustness, security, and scalability of a full-featured web server. Сами службы IIS выполняются в качестве HTTP-прослушивателя поверх HTTP.sys. IIS itself runs as an HTTP listener on top of HTTP.sys.
Поддержка HTTP/2 HTTP/2 support
Протокол HTTP/2 включен для приложений ASP.NET Core, если выполнены следующие базовые требования: HTTP/2 is enabled for ASP.NET Core apps if the following base requirements are met:
установлена ОС Windows Server 2016 либо Windows 10 или более поздних версий; Windows Server 2016/Windows 10 or later
установлено подключение с поддержкой согласования протокола уровня приложений (ALPN); Application-Layer Protocol Negotiation (ALPN) connection
Подключение TLS 1.2 или более поздней версии. TLS 1.2 or later connection
Если установлено подключение HTTP/2, HttpRequest.Protocol возвращает HTTP/2 . If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2 .
Протокол HTTP/2 включен по умолчанию. HTTP/2 is enabled by default. Если не удается установить подключение HTTP/2, применяется резервный вариант HTTP/1.1. If an HTTP/2 connection isn’t established, the connection falls back to HTTP/1.1. В будущих версиях Windows будут доступны флаги конфигурации HTTP/2, в том числе возможность отключения HTTP/2 с использованием HTTP.sys. In a future release of Windows, HTTP/2 configuration flags will be available, including the ability to disable HTTP/2 with HTTP.sys.
Проверка подлинности в режиме ядра с помощью Kerberos Kernel mode authentication with Kerberos
HTTP.sys делегирует задачи в проверку подлинности в режиме ядра с помощью протокола проверки подлинности Kerberos. HTTP.sys delegates to kernel mode authentication with the Kerberos authentication protocol. Проверка подлинности в режиме пользователя не поддерживается с Kerberos и HTTP.sys. User mode authentication isn’t supported with Kerberos and HTTP.sys. Необходимо использовать учетную запись компьютера для расшифровки маркера/билета Kerberos, полученного из Active Directory и переадресованного клиентом на сервер для проверки подлинности пользователя. The machine account must be used to decrypt the Kerberos token/ticket that’s obtained from Active Directory and forwarded by the client to the server to authenticate the user. Зарегистрируйте имя субъекта-службы (SPN) для узла, а не пользователя приложения. Register the Service Principal Name (SPN) for the host, not the user of the app.
Способы применения HTTP.sys How to use HTTP.sys
Настройка приложения ASP.NET Core для использования HTTP.sys Configure the ASP.NET Core app to use HTTP.sys
Вызовите метод расширения UseHttpSys при создании узла, указав все необходимые параметры HttpSysOptions. Call the UseHttpSys extension method when building the host, specifying any required HttpSysOptions. В следующем примере для параметров задаются значения по умолчанию: The following example sets options to their default values:
Дополнительная настройка HTTP.sys выполняется с помощью параметров реестра. Additional HTTP.sys configuration is handled through registry settings.
Параметры HTTP.sysHTTP.sys options
Свойство. Property
Описание Description
Значение по умолчанию Default
AllowSynchronousIO AllowSynchronousIO
Указывает, разрешен ли синхронные операции ввода-вывода для HttpContext.Request.Body и HttpContext.Response.Body . Control whether synchronous input/output is allowed for the HttpContext.Request.Body and HttpContext.Response.Body .
Указывает разрешенные схемы аутентификации. Specify the allowed authentication schemes. Может быть изменен в любое время до удаления прослушивателя. May be modified at any time prior to disposing the listener. Предоставляет значения, полученные при перечислении AuthenticationSchemes: Basic , Kerberos , Negotiate , None и NTLM . Values are provided by the AuthenticationSchemes enum: Basic , Kerberos , Negotiate , None , and NTLM .
None
EnableResponseCaching EnableResponseCaching
Выполняет попытку кэшировать режим ядра для ответов с допустимыми заголовками. Attempt kernel-mode caching for responses with eligible headers. Ответ не может включать заголовки Set-Cookie , Vary или Pragma . The response may not include Set-Cookie , Vary , or Pragma headers. Он должен включать заголовок Cache-Control со значением public , а также значение shared-max-age или max-age заголовок Expires . It must include a Cache-Control header that’s public and either a shared-max-age or max-age value, or an Expires header.
true
MaxAccepts
Максимальное число одновременных попыток. The maximum number of concurrent accepts.
Максимальное число попыток установить одновременное подключение. The maximum number of concurrent connections to accept. Использует -1 для бесконечных циклов. Use -1 for infinite. Использует null для работы с параметром реестра на уровне компьютера. Use null to use the registry’s machine-wide setting.
null (уровень компьютер (machine-wide значение) setting)
MaxRequestBodySize
См. раздел MaxRequestBodySize. See the MaxRequestBodySize section.
30 000 000 байт. 30000000 bytes (
28.6 MB)
RequestQueueLimit
Максимально допустимое число запросов в очереди. The maximum number of requests that can be queued.
1000 1000
ThrowWriteExceptions
Указывает, следует ли вызывать исключение или завершать работу нормально, когда запись текста ответа завершается ошибкой из-за отключения клиента. Indicate if response body writes that fail due to client disconnects should throw exceptions or complete normally.
false Нормальное завершение. (complete normally)
Timeouts
Предоставляет конфигурацию TimeoutManager HTTP.sys, которую также можно настроить в реестре. Expose the HTTP.sys TimeoutManager configuration, which may also be configured in the registry. Дополнительные сведения о каждом параметре, включая значения по умолчанию, см. здесь: Follow the API links to learn more about each setting, including default values:
TimeoutManager.DrainEntityBody — время, выделенное API сервера HTTP для очистки текста сущности при активном подключении. TimeoutManager.DrainEntityBody: Time allowed for the HTTP Server API to drain the entity body on a Keep-Alive connection.
TimeoutManager.EntityBody — время, выделенное на получение текста сущности запроса. TimeoutManager.EntityBody: Time allowed for the request entity body to arrive.
TimeoutManager.HeaderWait — время, выделенное для API сервера HTTP для выполнения синтаксического анализа заголовка запроса. TimeoutManager.HeaderWait: Time allowed for the HTTP Server API to parse the request header.
TimeoutManager.IdleConnection — время, допустимое для неактивного подключения. TimeoutManager.IdleConnection: Time allowed for an idle connection.
TimeoutManager.MinSendBytesPerSecond — минимальная скорость отправки ответа. TimeoutManager.MinSendBytesPerSecond: The minimum send rate for the response.
TimeoutManager.RequestQueue — время, выделенное для пребывания запроса в очереди до его получения приложением. TimeoutManager.RequestQueue: Time allowed for the request to remain in the request queue before the app picks it up.
UrlPrefixes
Указывает UrlPrefixCollection для регистрации с использованием HTTP.sys. Specify the UrlPrefixCollection to register with HTTP.sys. Удобнее всего использовать параметр UrlPrefixCollection.Add, который добавляет префикс к коллекции. The most useful is UrlPrefixCollection.Add, which is used to add a prefix to the collection. Могут быть изменены в любое время до удаления прослушивателя. These may be modified at any time prior to disposing the listener.
MaxRequestBodySizeMaxRequestBodySize
Максимально допустимый размер текста запроса в байтах. The maximum allowed size of any request body in bytes. Если задано значение null , размер максимального запроса не ограничен. When set to null , the maximum request body size is unlimited. Это ограничение не оказывает влияния на обновленные подключения, которые не имеют ограничений. This limit has no effect on upgraded connections, which are always unlimited.
Чтобы переопределить это ограничение в приложении ASP.NET Core MVC для IActionResult , рекомендуется использовать атрибут RequestSizeLimitAttribute в методе действия: The recommended method to override the limit in an ASP.NET Core MVC app for a single IActionResult is to use the RequestSizeLimitAttribute attribute on an action method:
При попытке приложения настроить ограничение для запроса после того, как приложение начало считывать запрос, возникает исключение. An exception is thrown if the app attempts to configure the limit on a request after the app has started reading the request. Свойство IsReadOnly указывает на то, что свойство MaxRequestBodySize находится в состоянии только для чтения и настраивать ограничение слишком поздно. An IsReadOnly property can be used to indicate if the MaxRequestBodySize property is in a read-only state, meaning it’s too late to configure the limit.
Если приложение должно переопределять MaxRequestBodySize по запросу, используйте IHttpMaxRequestBodySizeFeature: If the app should override MaxRequestBodySize per-request, use the IHttpMaxRequestBodySizeFeature:
При использовании Visual Studio убедитесь, что приложение не настроено для запуска IIS или IIS Express. If using Visual Studio, make sure the app isn’t configured to run IIS or IIS Express.
В Visual Studio профиль запуска по умолчанию использует IIS Express. In Visual Studio, the default launch profile is for IIS Express. Чтобы запустить проект как консольное приложение, измените выбранный профиль вручную, как показано на следующем снимке экрана. To run the project as a console app, manually change the selected profile, as shown in the following screen shot:
Настройка Windows Server Configure Windows Server
Определите, какие порты нужно открыть для приложения, и используйте брандмауэр Windows или командлет PowerShell New-NetFirewallRule, чтобы открыть порты брандмауэра для доступа трафика к HTTP.sys. Determine the ports to open for the app and use Windows Firewall or the New-NetFirewallRule PowerShell cmdlet to open firewall ports to allow traffic to reach HTTP.sys. В следующих командах и конфигурации приложения используется порт 443. In the following commands and app configuration, port 443 is used.
При развертывании на виртуальных машинах Azure откройте эти порты в группе безопасности сети. When deploying to an Azure VM, open the ports in the Network Security Group. В следующих командах и конфигурации приложения используется порт 443. In the following commands and app configuration, port 443 is used.
При необходимости получите и установите сертификаты X.509. Obtain and install X.509 certificates, if required.
В Windows создайте самозаверяющие сертификаты с помощью командлета PowerShell New-SelfSignedCertificate. On Windows, create self-signed certificates using the New-SelfSignedCertificate PowerShell cmdlet. Примеры, которые не поддерживаются, см. в разделе UpdateIISExpressSSLForChrome.ps1. For an unsupported example, see UpdateIISExpressSSLForChrome.ps1.
Установите самозаверяющие или подписанные центром сертификации сертификаты в хранилище сервера, выбрав Локальный компьютер > Личный. Install either self-signed or CA-signed certificates in the server’s Local Machine > Personal store.
Если приложение является развертыванием, не зависящим от платформы, установите NET Core или .NET Framework (или обе платформы, если это приложение .NET Core, предназначенное для .NET Framework). If the app is a framework-dependent deployment, install .NET Core, .NET Framework, or both (if the app is a .NET Core app targeting the .NET Framework).
.NET Core. Если приложению требуется .NET Core, загрузите установщик среды выполнения .NET Core на странице скачивания .NET Core и запустите его. .NET Core: If the app requires .NET Core, obtain and run the .NET Core Runtime installer from .NET Core Downloads. Не устанавливайте полный пакет SDK на сервере. Don’t install the full SDK on the server.
Платформа .NET Framework. Если приложению требуется .NET Framework, см. руководство по установке. .NET Framework: If the app requires .NET Framework, see the .NET Framework installation guide. Установите требуемую платформу .NET Framework. Install the required .NET Framework. Установщик последней версии .NET Framework доступен на странице скачивания .NET. The installer for the latest .NET Framework is available from the .NET Core Downloads page.
Если приложение развертывается автономно, в его развертывание включена среда выполнения. If the app is a self-contained deployment, the app includes the runtime in its deployment. Устанавливать .NET Framework на сервере не нужно. No framework installation is required on the server.
Настройте URL-адреса и порты в приложении. Configure URLs and ports in the app.
По умолчанию платформа ASP.NET Core привязана к http://localhost:5000 . By default, ASP.NET Core binds to http://localhost:5000 . Чтобы настроить префиксы URL-адресов и порты, используйте следующие параметры: To configure URL prefixes and ports, options include:
Переменная среды ASPNETCORE_URLS . ASPNETCORE_URLS environment variable
UrlPrefixes
В следующем примере кода показано, как использовать UrlPrefixes с локальным IP-адресом сервера 10.0.0.4 через порт 443. The following code example shows how to use UrlPrefixes with the server’s local IP address 10.0.0.4 on port 443:
Преимущество UrlPrefixes заключается в том, что при неправильном формате префиксов сразу же создается сообщение об ошибке. An advantage of UrlPrefixes is that an error message is generated immediately for improperly formatted prefixes.
Этот параметр в UrlPrefixes переопределяет параметры UseUrls / urls / ASPNETCORE_URLS . The settings in UrlPrefixes override UseUrls / urls / ASPNETCORE_URLS settings. Таким образом, преимущество переменных среды UseUrls , urls и ASPNETCORE_URLS заключается в возможности быстрого переключения между Kestrel и HTTP.sys. Therefore, an advantage of UseUrls , urls , and the ASPNETCORE_URLS environment variable is that it’s easier to switch between Kestrel and HTTP.sys.
Не используйте привязки с подстановочными знаками ( http://*:80/ и http://+:80 ) на верхнем уровне. Top-level wildcard bindings ( http://*:80/ and http://+:80 ) should not be used. Они создают уязвимости и ставят под угрозу безопасность приложения. Top-level wildcard bindings create app security vulnerabilities. Сюда относятся и строгие, и нестрогие подстановочные знаки. This applies to both strong and weak wildcards. Вместо подстановочных знаков используйте имена узлов или IP-адреса в явном виде. Use explicit host names or IP addresses rather than wildcards. Привязки с подстановочными знаками на уровне дочерних доменов (например, *.mysub.com ) не создают таких угроз безопасности, если вы полностью контролируете родительский домен (в отличие от варианта *.com , создающего уязвимость). Subdomain wildcard binding (for example, *.mysub.com ) isn’t a security risk if you control the entire parent domain (as opposed to *.com , which is vulnerable). Дополнительные сведения см. в стандарте RFC 7230, раздел 5.4, Host. For more information, see RFC 7230: Section 5.4: Host.
Предварительно зарегистрируйте префиксы URL-адресов на сервере. Preregister URL prefixes on the server.
Встроенным средством для настройки сервера HTTP.sys является netsh.exe. The built-in tool for configuring HTTP.sys is netsh.exe. С помощью netsh.exe можно зарезервировать префиксы URL-адресов и назначить сертификаты X.509. netsh.exe is used to reserve URL prefixes and assign X.509 certificates. Для использования этого средства требуются права администратора. The tool requires administrator privileges.
Используйте средство netsh.exe для регистрации URL-адреса приложения. Use the netsh.exe tool to register URLs for the app:
. Полное имя URL-адреса. : The fully qualified Uniform Resource Locator (URL). Не используйте привязки с подстановочными знаками. Don’t use a wildcard binding. Используйте допустимое имя узла или локальный IP-адрес. Use a valid hostname or local IP address. URL-адрес должен включать косую черту в конце.The URL must include a trailing slash.
. Определяет имя пользователя или группы пользователей. : Specifies the user or user-group name.
В следующем примере сервер имеет локальный IP-адрес 10.0.0.4 . In the following example, the local IP address of the server is 10.0.0.4 :
При регистрации URL-адреса средство возвращает ответ URL reservation successfully added . When a URL is registered, the tool responds with URL reservation successfully added .
Чтобы удалить зарегистрированный URL-адрес, используйте команду delete urlacl . To delete a registered URL, use the delete urlacl command:
Зарегистрируйте сертификаты X.509 на сервере. Register X.509 certificates on the server.
Используйте средство netsh.exe для регистрации сертификатов приложения. Use the netsh.exe tool to register certificates for the app:
. Задает локальный IP-адрес для привязки. : Specifies the local IP address for the binding. Не используйте привязки с подстановочными знаками. Don’t use a wildcard binding. Используйте допустимый IP-адрес. Use a valid IP address.
. Указывает порт для привязки.
: Specifies the port for the binding.
. Отпечаток сертификата X.509. : The X.509 certificate thumbprint.
. Глобальный уникальный идентификатор приложения, задаваемый разработчиком в информационных целях. : A developer-generated GUID to represent the app for informational purposes.
В справочных целях храните GUID в приложении в виде тега пакета. For reference purposes, store the GUID in the app as a package tag:
В Visual Studio сделайте следующее: In Visual Studio:
Откройте свойства проекта приложения, щелкнув приложение правой кнопкой мыши в обозревателе решений и выбрав Properties (Свойства). Open the app’s project properties by right-clicking on the app in Solution Explorer and selecting Properties.
Перейдите на вкладку Package (Пакет). Select the Package tab.
Введите GUID, который вы указали в поле Tags (Теги). Enter the GUID that you created in the Tags field.
Если Visual Studio не используется: When not using Visual Studio:
Откройте файл проекта приложения. Open the app’s project file.
в новую или существующую группу
с GUID, который вы создали. Add a
property to a new or existing
with the GUID that you created:
В следующем примере: In the following example:
Локальный IP-адрес сервера — 10.0.0.4 . The local IP address of the server is 10.0.0.4 .
Сетевой генератор случайных GUID задает значение appid . An online random GUID generator provides the appid value.
При регистрации сертификата средство возвращает ответ SSL Certificate successfully added . When a certificate is registered, the tool responds with SSL Certificate successfully added .
Чтобы удалить регистрацию сертификата, используйте команду delete sslcert . To delete a certificate registration, use the delete sslcert command:
Дополнительные сведения см. в справочной документации по netsh.exe: Reference documentation for netsh.exe:
Запустите приложение. Run the app.
Если выполнена привязка к localhost через HTTP (не HTTPS) с номером порта больше 1024, для запуска приложения права администратора не требуются. Administrator privileges aren’t required to run the app when binding to localhost using HTTP (not HTTPS) with a port number greater than 1024. При других конфигурациях (например, при использовании локального IP-адреса или привязки к порту 443) для запуска приложения требуются права администратора. For other configurations (for example, using a local IP address or binding to port 443), run the app with administrator privileges.
Приложение отвечает по общедоступному IP-адресу сервера. The app responds at the server’s public IP address. В этом примере подключение к серверу происходит через Интернет по общедоступному IP-адресу 104.214.79.47 сервера. In this example, the server is reached from the Internet at its public IP address of 104.214.79.47 .
В этом примере используется сертификат разработки. A development certificate is used in this example. После обхода предупреждения о ненадежном сертификате браузера происходит безопасная загрузка страницы. The page loads securely after bypassing the browser’s untrusted certificate warning.
Сценарии использования прокси-сервера и подсистемы балансировки нагрузки Proxy server and load balancer scenarios
Для приложений, размещенных с помощью файла HTTP.sys, которые взаимодействуют с запросами из Интернета или корпоративной сети, может потребоваться дополнительная настройка при размещении за прокси-серверами и подсистемами балансировки нагрузки. For apps hosted by HTTP.sys that interact with requests from the Internet or a corporate network, additional configuration might be required when hosting behind proxy servers and load balancers. Дополнительные сведения см. в разделе Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки. For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.
Дополнительные ресурсы Additional resources
HTTP.sys — это веб-сервер для ASP.NET Core, который запускается только в Windows. HTTP.sys is a web server for ASP.NET Core that only runs on Windows. HTTP.sys является альтернативой серверу Kestrel, предлагая некоторые функции, отсутствующие в Kestrel. HTTP.sys is an alternative to Kestrel server and offers some features that Kestrel doesn’t provide.
HTTP.sys не подходит для использования с IIS или IIS Express из-за несовместимости с модулем ASP.NET Core. HTTP.sys isn’t compatible with the ASP.NET Core Module and can’t be used with IIS or IIS Express.
HTTP.sys поддерживает следующие функции: HTTP.sys supports the following features:
Аутентификация Windows Windows Authentication
Совместное использование портов Port sharing
Использование HTTPS с SNI HTTPS with SNI
Использование HTTP/2 через TLS (Windows 10 и более поздние версии) HTTP/2 over TLS (Windows 10 or later)
Прямая передача файлов Direct file transmission
Кэширование откликов Response caching
Использование WebSockets (Windows 8 и более поздние версии) WebSockets (Windows 8 or later)
Поддерживаемые версии Windows: Supported Windows versions:
Windows 7 и более поздние версии Windows 7 or later
Windows Server 2008 R2 и более поздние версии Windows Server 2008 R2 or later
Условия для применения HTTP.sys When to use HTTP.sys
HTTP.sys удобно использовать с развертываниями в таких случаях: HTTP.sys is useful for deployments where:
когда нужно подключить сервер к Интернету напрямую без использования служб IIS; There’s a need to expose the server directly to the Internet without using IIS.
когда для внутренних развертываний нужна функция, отсутствующая в Kestrel, например аутентификация Windows. An internal deployment requires a feature not available in Kestrel, such as Windows Authentication.
HTTP.sys — это проверенная технология, которая защищает от многих типов атак, а также обеспечивает надежность, безопасность и масштабируемость полнофункционального веб-сервера. HTTP.sys is mature technology that protects against many types of attacks and provides the robustness, security, and scalability of a full-featured web server. Сами службы IIS выполняются в качестве HTTP-прослушивателя поверх HTTP.sys. IIS itself runs as an HTTP listener on top of HTTP.sys.
Поддержка HTTP/2 HTTP/2 support
Протокол HTTP/2 включен для приложений ASP.NET Core, если выполнены следующие базовые требования: HTTP/2 is enabled for ASP.NET Core apps if the following base requirements are met:
установлена ОС Windows Server 2016 либо Windows 10 или более поздних версий; Windows Server 2016/Windows 10 or later
установлено подключение с поддержкой согласования протокола уровня приложений (ALPN); Application-Layer Protocol Negotiation (ALPN) connection
Подключение TLS 1.2 или более поздней версии. TLS 1.2 or later connection
Если установлено подключение HTTP/2, HttpRequest.Protocol возвращает HTTP/2 . If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2 .
Протокол HTTP/2 включен по умолчанию. HTTP/2 is enabled by default. Если не удается установить подключение HTTP/2, применяется резервный вариант HTTP/1.1. If an HTTP/2 connection isn’t established, the connection falls back to HTTP/1.1. В будущих версиях Windows будут доступны флаги конфигурации HTTP/2, в том числе возможность отключения HTTP/2 с использованием HTTP.sys. In a future release of Windows, HTTP/2 configuration flags will be available, including the ability to disable HTTP/2 with HTTP.sys.
Проверка подлинности в режиме ядра с помощью Kerberos Kernel mode authentication with Kerberos
HTTP.sys делегирует задачи в проверку подлинности в режиме ядра с помощью протокола проверки подлинности Kerberos. HTTP.sys delegates to kernel mode authentication with the Kerberos authentication protocol. Проверка подлинности в режиме пользователя не поддерживается с Kerberos и HTTP.sys. User mode authentication isn’t supported with Kerberos and HTTP.sys. Необходимо использовать учетную запись компьютера для расшифровки маркера/билета Kerberos, полученного из Active Directory и переадресованного клиентом на сервер для проверки подлинности пользователя. The machine account must be used to decrypt the Kerberos token/ticket that’s obtained from Active Directory and forwarded by the client to the server to authenticate the user. Зарегистрируйте имя субъекта-службы (SPN) для узла, а не пользователя приложения. Register the Service Principal Name (SPN) for the host, not the user of the app.
Способы применения HTTP.sys How to use HTTP.sys
Настройка приложения ASP.NET Core для использования HTTP.sys Configure the ASP.NET Core app to use HTTP.sys
Ссылка на пакет в файле проекта не требуется при использовании метапакета Microsoft.AspNetCore.App (nuget.org). A package reference in the project file isn’t required when using the Microsoft.AspNetCore.App metapackage (nuget.org). Если метапакет Microsoft.AspNetCore.App не используется, добавьте ссылку на пакет в файл Microsoft.AspNetCore.Server.HttpSys. When not using the Microsoft.AspNetCore.App metapackage, add a package reference to Microsoft.AspNetCore.Server.HttpSys.
Вызовите метод расширения UseHttpSys при создании узла, указав все необходимые параметры HttpSysOptions. Call the UseHttpSys extension method when building the host, specifying any required HttpSysOptions. В следующем примере для параметров задаются значения по умолчанию: The following example sets options to their default values:
Дополнительная настройка HTTP.sys выполняется с помощью параметров реестра. Additional HTTP.sys configuration is handled through registry settings.
Параметры HTTP.sysHTTP.sys options
Свойство. Property
Описание Description
Значение по умолчанию Default
AllowSynchronousIO AllowSynchronousIO
Указывает, разрешен ли синхронные операции ввода-вывода для HttpContext.Request.Body и HttpContext.Response.Body . Control whether synchronous input/output is allowed for the HttpContext.Request.Body and HttpContext.Response.Body .
Указывает разрешенные схемы аутентификации. Specify the allowed authentication schemes. Может быть изменен в любое время до удаления прослушивателя. May be modified at any time prior to disposing the listener. Предоставляет значения, полученные при перечислении AuthenticationSchemes: Basic , Kerberos , Negotiate , None и NTLM . Values are provided by the AuthenticationSchemes enum: Basic , Kerberos , Negotiate , None , and NTLM .
None
EnableResponseCaching EnableResponseCaching
Выполняет попытку кэшировать режим ядра для ответов с допустимыми заголовками. Attempt kernel-mode caching for responses with eligible headers. Ответ не может включать заголовки Set-Cookie , Vary или Pragma . The response may not include Set-Cookie , Vary , or Pragma headers. Он должен включать заголовок Cache-Control со значением public , а также значение shared-max-age или max-age заголовок Expires . It must include a Cache-Control header that’s public and either a shared-max-age or max-age value, or an Expires header.
true
MaxAccepts
Максимальное число одновременных попыток. The maximum number of concurrent accepts.
Максимальное число попыток установить одновременное подключение. The maximum number of concurrent connections to accept. Использует -1 для бесконечных циклов. Use -1 for infinite. Использует null для работы с параметром реестра на уровне компьютера. Use null to use the registry’s machine-wide setting.
null (уровень компьютер (machine-wide значение) setting)
MaxRequestBodySize
См. раздел MaxRequestBodySize. See the MaxRequestBodySize section.
30 000 000 байт. 30000000 bytes (
28.6 MB)
RequestQueueLimit
Максимально допустимое число запросов в очереди. The maximum number of requests that can be queued.
1000 1000
ThrowWriteExceptions
Указывает, следует ли вызывать исключение или завершать работу нормально, когда запись текста ответа завершается ошибкой из-за отключения клиента. Indicate if response body writes that fail due to client disconnects should throw exceptions or complete normally.
false Нормальное завершение. (complete normally)
Timeouts
Предоставляет конфигурацию TimeoutManager HTTP.sys, которую также можно настроить в реестре. Expose the HTTP.sys TimeoutManager configuration, which may also be configured in the registry. Дополнительные сведения о каждом параметре, включая значения по умолчанию, см. здесь: Follow the API links to learn more about each setting, including default values:
TimeoutManager.DrainEntityBody — время, выделенное API сервера HTTP для очистки текста сущности при активном подключении. TimeoutManager.DrainEntityBody: Time allowed for the HTTP Server API to drain the entity body on a Keep-Alive connection.
TimeoutManager.EntityBody — время, выделенное на получение текста сущности запроса. TimeoutManager.EntityBody: Time allowed for the request entity body to arrive.
TimeoutManager.HeaderWait — время, выделенное для API сервера HTTP для выполнения синтаксического анализа заголовка запроса. TimeoutManager.HeaderWait: Time allowed for the HTTP Server API to parse the request header.
TimeoutManager.IdleConnection — время, допустимое для неактивного подключения. TimeoutManager.IdleConnection: Time allowed for an idle connection.
TimeoutManager.MinSendBytesPerSecond — минимальная скорость отправки ответа. TimeoutManager.MinSendBytesPerSecond: The minimum send rate for the response.
TimeoutManager.RequestQueue — время, выделенное для пребывания запроса в очереди до его получения приложением. TimeoutManager.RequestQueue: Time allowed for the request to remain in the request queue before the app picks it up.
UrlPrefixes
Указывает UrlPrefixCollection для регистрации с использованием HTTP.sys. Specify the UrlPrefixCollection to register with HTTP.sys. Удобнее всего использовать параметр UrlPrefixCollection.Add, который добавляет префикс к коллекции. The most useful is UrlPrefixCollection.Add, which is used to add a prefix to the collection. Могут быть изменены в любое время до удаления прослушивателя. These may be modified at any time prior to disposing the listener.
MaxRequestBodySizeMaxRequestBodySize
Максимально допустимый размер текста запроса в байтах. The maximum allowed size of any request body in bytes. Если задано значение null , размер максимального запроса не ограничен. When set to null , the maximum request body size is unlimited. Это ограничение не оказывает влияния на обновленные подключения, которые не имеют ограничений. This limit has no effect on upgraded connections, which are always unlimited.
Чтобы переопределить это ограничение в приложении ASP.NET Core MVC для IActionResult , рекомендуется использовать атрибут RequestSizeLimitAttribute в методе действия: The recommended method to override the limit in an ASP.NET Core MVC app for a single IActionResult is to use the RequestSizeLimitAttribute attribute on an action method:
При попытке приложения настроить ограничение для запроса после того, как приложение начало считывать запрос, возникает исключение. An exception is thrown if the app attempts to configure the limit on a request after the app has started reading the request. Свойство IsReadOnly указывает на то, что свойство MaxRequestBodySize находится в состоянии только для чтения и настраивать ограничение слишком поздно. An IsReadOnly property can be used to indicate if the MaxRequestBodySize property is in a read-only state, meaning it’s too late to configure the limit.
Если приложение должно переопределять MaxRequestBodySize по запросу, используйте IHttpMaxRequestBodySizeFeature: If the app should override MaxRequestBodySize per-request, use the IHttpMaxRequestBodySizeFeature:
При использовании Visual Studio убедитесь, что приложение не настроено для запуска IIS или IIS Express. If using Visual Studio, make sure the app isn’t configured to run IIS or IIS Express.
В Visual Studio профиль запуска по умолчанию использует IIS Express. In Visual Studio, the default launch profile is for IIS Express. Чтобы запустить проект как консольное приложение, измените выбранный профиль вручную, как показано на следующем снимке экрана. To run the project as a console app, manually change the selected profile, as shown in the following screen shot:
Настройка Windows Server Configure Windows Server
Определите, какие порты нужно открыть для приложения, и используйте брандмауэр Windows или командлет PowerShell New-NetFirewallRule, чтобы открыть порты брандмауэра для доступа трафика к HTTP.sys. Determine the ports to open for the app and use Windows Firewall or the New-NetFirewallRule PowerShell cmdlet to open firewall ports to allow traffic to reach HTTP.sys. В следующих командах и конфигурации приложения используется порт 443. In the following commands and app configuration, port 443 is used.
При развертывании на виртуальных машинах Azure откройте эти порты в группе безопасности сети. When deploying to an Azure VM, open the ports in the Network Security Group. В следующих командах и конфигурации приложения используется порт 443. In the following commands and app configuration, port 443 is used.
При необходимости получите и установите сертификаты X.509. Obtain and install X.509 certificates, if required.
В Windows создайте самозаверяющие сертификаты с помощью командлета PowerShell New-SelfSignedCertificate. On Windows, create self-signed certificates using the New-SelfSignedCertificate PowerShell cmdlet. Примеры, которые не поддерживаются, см. в разделе UpdateIISExpressSSLForChrome.ps1. For an unsupported example, see UpdateIISExpressSSLForChrome.ps1.
Установите самозаверяющие или подписанные центром сертификации сертификаты в хранилище сервера, выбрав Локальный компьютер > Личный. Install either self-signed or CA-signed certificates in the server’s Local Machine > Personal store.
Если приложение является развертыванием, не зависящим от платформы, установите NET Core или .NET Framework (или обе платформы, если это приложение .NET Core, предназначенное для .NET Framework). If the app is a framework-dependent deployment, install .NET Core, .NET Framework, or both (if the app is a .NET Core app targeting the .NET Framework).
.NET Core. Если приложению требуется .NET Core, загрузите установщик среды выполнения .NET Core на странице скачивания .NET Core и запустите его. .NET Core: If the app requires .NET Core, obtain and run the .NET Core Runtime installer from .NET Core Downloads. Не устанавливайте полный пакет SDK на сервере. Don’t install the full SDK on the server.
Платформа .NET Framework. Если приложению требуется .NET Framework, см. руководство по установке. .NET Framework: If the app requires .NET Framework, see the .NET Framework installation guide. Установите требуемую платформу .NET Framework. Install the required .NET Framework. Установщик последней версии .NET Framework доступен на странице скачивания .NET. The installer for the latest .NET Framework is available from the .NET Core Downloads page.
Если приложение развертывается автономно, в его развертывание включена среда выполнения. If the app is a self-contained deployment, the app includes the runtime in its deployment. Устанавливать .NET Framework на сервере не нужно. No framework installation is required on the server.
Настройте URL-адреса и порты в приложении. Configure URLs and ports in the app.
По умолчанию платформа ASP.NET Core привязана к http://localhost:5000 . By default, ASP.NET Core binds to http://localhost:5000 . Чтобы настроить префиксы URL-адресов и порты, используйте следующие параметры: To configure URL prefixes and ports, options include:
Переменная среды ASPNETCORE_URLS . ASPNETCORE_URLS environment variable
UrlPrefixes
В следующем примере кода показано, как использовать UrlPrefixes с локальным IP-адресом сервера 10.0.0.4 через порт 443. The following code example shows how to use UrlPrefixes with the server’s local IP address 10.0.0.4 on port 443:
Преимущество UrlPrefixes заключается в том, что при неправильном формате префиксов сразу же создается сообщение об ошибке. An advantage of UrlPrefixes is that an error message is generated immediately for improperly formatted prefixes.
Этот параметр в UrlPrefixes переопределяет параметры UseUrls / urls / ASPNETCORE_URLS . The settings in UrlPrefixes override UseUrls / urls / ASPNETCORE_URLS settings. Таким образом, преимущество переменных среды UseUrls , urls и ASPNETCORE_URLS заключается в возможности быстрого переключения между Kestrel и HTTP.sys. Therefore, an advantage of UseUrls , urls , and the ASPNETCORE_URLS environment variable is that it’s easier to switch between Kestrel and HTTP.sys.
Не используйте привязки с подстановочными знаками ( http://*:80/ и http://+:80 ) на верхнем уровне. Top-level wildcard bindings ( http://*:80/ and http://+:80 ) should not be used. Они создают уязвимости и ставят под угрозу безопасность приложения. Top-level wildcard bindings create app security vulnerabilities. Сюда относятся и строгие, и нестрогие подстановочные знаки. This applies to both strong and weak wildcards. Вместо подстановочных знаков используйте имена узлов или IP-адреса в явном виде. Use explicit host names or IP addresses rather than wildcards. Привязки с подстановочными знаками на уровне дочерних доменов (например, *.mysub.com ) не создают таких угроз безопасности, если вы полностью контролируете родительский домен (в отличие от варианта *.com , создающего уязвимость). Subdomain wildcard binding (for example, *.mysub.com ) isn’t a security risk if you control the entire parent domain (as opposed to *.com , which is vulnerable). Дополнительные сведения см. в стандарте RFC 7230, раздел 5.4, Host. For more information, see RFC 7230: Section 5.4: Host.
Предварительно зарегистрируйте префиксы URL-адресов на сервере. Preregister URL prefixes on the server.
Встроенным средством для настройки сервера HTTP.sys является netsh.exe. The built-in tool for configuring HTTP.sys is netsh.exe. С помощью netsh.exe можно зарезервировать префиксы URL-адресов и назначить сертификаты X.509. netsh.exe is used to reserve URL prefixes and assign X.509 certificates. Для использования этого средства требуются права администратора. The tool requires administrator privileges.
Используйте средство netsh.exe для регистрации URL-адреса приложения. Use the netsh.exe tool to register URLs for the app:
. Полное имя URL-адреса. : The fully qualified Uniform Resource Locator (URL). Не используйте привязки с подстановочными знаками. Don’t use a wildcard binding. Используйте допустимое имя узла или локальный IP-адрес. Use a valid hostname or local IP address. URL-адрес должен включать косую черту в конце.The URL must include a trailing slash.
. Определяет имя пользователя или группы пользователей. : Specifies the user or user-group name.
В следующем примере сервер имеет локальный IP-адрес 10.0.0.4 . In the following example, the local IP address of the server is 10.0.0.4 :
При регистрации URL-адреса средство возвращает ответ URL reservation successfully added . When a URL is registered, the tool responds with URL reservation successfully added .
Чтобы удалить зарегистрированный URL-адрес, используйте команду delete urlacl . To delete a registered URL, use the delete urlacl command:
Зарегистрируйте сертификаты X.509 на сервере. Register X.509 certificates on the server.
Используйте средство netsh.exe для регистрации сертификатов приложения. Use the netsh.exe tool to register certificates for the app:
. Задает локальный IP-адрес для привязки. : Specifies the local IP address for the binding. Не используйте привязки с подстановочными знаками. Don’t use a wildcard binding. Используйте допустимый IP-адрес. Use a valid IP address.
. Указывает порт для привязки.
: Specifies the port for the binding.
. Отпечаток сертификата X.509. : The X.509 certificate thumbprint.
. Глобальный уникальный идентификатор приложения, задаваемый разработчиком в информационных целях. : A developer-generated GUID to represent the app for informational purposes.
В справочных целях храните GUID в приложении в виде тега пакета. For reference purposes, store the GUID in the app as a package tag:
В Visual Studio сделайте следующее: In Visual Studio:
Откройте свойства проекта приложения, щелкнув приложение правой кнопкой мыши в обозревателе решений и выбрав Properties (Свойства). Open the app’s project properties by right-clicking on the app in Solution Explorer and selecting Properties.
Перейдите на вкладку Package (Пакет). Select the Package tab.
Введите GUID, который вы указали в поле Tags (Теги). Enter the GUID that you created in the Tags field.
Если Visual Studio не используется: When not using Visual Studio:
Откройте файл проекта приложения. Open the app’s project file.
в новую или существующую группу
с GUID, который вы создали. Add a
property to a new or existing
with the GUID that you created:
В следующем примере: In the following example:
Локальный IP-адрес сервера — 10.0.0.4 . The local IP address of the server is 10.0.0.4 .
Сетевой генератор случайных GUID задает значение appid . An online random GUID generator provides the appid value.
При регистрации сертификата средство возвращает ответ SSL Certificate successfully added . When a certificate is registered, the tool responds with SSL Certificate successfully added .
Чтобы удалить регистрацию сертификата, используйте команду delete sslcert . To delete a certificate registration, use the delete sslcert command:
Дополнительные сведения см. в справочной документации по netsh.exe: Reference documentation for netsh.exe:
Запустите приложение. Run the app.
Если выполнена привязка к localhost через HTTP (не HTTPS) с номером порта больше 1024, для запуска приложения права администратора не требуются. Administrator privileges aren’t required to run the app when binding to localhost using HTTP (not HTTPS) with a port number greater than 1024. При других конфигурациях (например, при использовании локального IP-адреса или привязки к порту 443) для запуска приложения требуются права администратора. For other configurations (for example, using a local IP address or binding to port 443), run the app with administrator privileges.
Приложение отвечает по общедоступному IP-адресу сервера. The app responds at the server’s public IP address. В этом примере подключение к серверу происходит через Интернет по общедоступному IP-адресу 104.214.79.47 сервера. In this example, the server is reached from the Internet at its public IP address of 104.214.79.47 .
В этом примере используется сертификат разработки. A development certificate is used in this example. После обхода предупреждения о ненадежном сертификате браузера происходит безопасная загрузка страницы. The page loads securely after bypassing the browser’s untrusted certificate warning.
Сценарии использования прокси-сервера и подсистемы балансировки нагрузки Proxy server and load balancer scenarios
Для приложений, размещенных с помощью файла HTTP.sys, которые взаимодействуют с запросами из Интернета или корпоративной сети, может потребоваться дополнительная настройка при размещении за прокси-серверами и подсистемами балансировки нагрузки. For apps hosted by HTTP.sys that interact with requests from the Internet or a corporate network, additional configuration might be required when hosting behind proxy servers and load balancers. Дополнительные сведения см. в разделе Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки. For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.
Дополнительные ресурсы Additional resources
HTTP.sys — это веб-сервер для ASP.NET Core, который запускается только в Windows. HTTP.sys is a web server for ASP.NET Core that only runs on Windows. HTTP.sys является альтернативой серверу Kestrel, предлагая некоторые функции, отсутствующие в Kestrel. HTTP.sys is an alternative to Kestrel server and offers some features that Kestrel doesn’t provide.
HTTP.sys не подходит для использования с IIS или IIS Express из-за несовместимости с модулем ASP.NET Core. HTTP.sys isn’t compatible with the ASP.NET Core Module and can’t be used with IIS or IIS Express.
HTTP.sys поддерживает следующие функции: HTTP.sys supports the following features:
Аутентификация Windows Windows Authentication
Совместное использование портов Port sharing
Использование HTTPS с SNI HTTPS with SNI
Использование HTTP/2 через TLS (Windows 10 и более поздние версии) HTTP/2 over TLS (Windows 10 or later)
Прямая передача файлов Direct file transmission
Кэширование откликов Response caching
Использование WebSockets (Windows 8 и более поздние версии) WebSockets (Windows 8 or later)
Поддерживаемые версии Windows: Supported Windows versions:
Windows 7 и более поздние версии Windows 7 or later
Windows Server 2008 R2 и более поздние версии Windows Server 2008 R2 or later
Условия для применения HTTP.sys When to use HTTP.sys
HTTP.sys удобно использовать с развертываниями в таких случаях: HTTP.sys is useful for deployments where:
когда нужно подключить сервер к Интернету напрямую без использования служб IIS; There’s a need to expose the server directly to the Internet without using IIS.
когда для внутренних развертываний нужна функция, отсутствующая в Kestrel, например аутентификация Windows. An internal deployment requires a feature not available in Kestrel, such as Windows Authentication.
HTTP.sys — это проверенная технология, которая защищает от многих типов атак, а также обеспечивает надежность, безопасность и масштабируемость полнофункционального веб-сервера. HTTP.sys is mature technology that protects against many types of attacks and provides the robustness, security, and scalability of a full-featured web server. Сами службы IIS выполняются в качестве HTTP-прослушивателя поверх HTTP.sys. IIS itself runs as an HTTP listener on top of HTTP.sys.
Поддержка HTTP/2 HTTP/2 support
Протокол HTTP/2 включен для приложений ASP.NET Core, если выполнены следующие базовые требования: HTTP/2 is enabled for ASP.NET Core apps if the following base requirements are met:
установлена ОС Windows Server 2016 либо Windows 10 или более поздних версий; Windows Server 2016/Windows 10 or later
установлено подключение с поддержкой согласования протокола уровня приложений (ALPN); Application-Layer Protocol Negotiation (ALPN) connection
Подключение TLS 1.2 или более поздней версии. TLS 1.2 or later connection
Если установлено подключение HTTP/2, HttpRequest.Protocol возвращает HTTP/1.1 . If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1 .
Протокол HTTP/2 включен по умолчанию. HTTP/2 is enabled by default. Если не удается установить подключение HTTP/2, применяется резервный вариант HTTP/1.1. If an HTTP/2 connection isn’t established, the connection falls back to HTTP/1.1. В будущих версиях Windows будут доступны флаги конфигурации HTTP/2, в том числе возможность отключения HTTP/2 с использованием HTTP.sys. In a future release of Windows, HTTP/2 configuration flags will be available, including the ability to disable HTTP/2 with HTTP.sys.
Проверка подлинности в режиме ядра с помощью Kerberos Kernel mode authentication with Kerberos
HTTP.sys делегирует задачи в проверку подлинности в режиме ядра с помощью протокола проверки подлинности Kerberos. HTTP.sys delegates to kernel mode authentication with the Kerberos authentication protocol. Проверка подлинности в режиме пользователя не поддерживается с Kerberos и HTTP.sys. User mode authentication isn’t supported with Kerberos and HTTP.sys. Необходимо использовать учетную запись компьютера для расшифровки маркера/билета Kerberos, полученного из Active Directory и переадресованного клиентом на сервер для проверки подлинности пользователя. The machine account must be used to decrypt the Kerberos token/ticket that’s obtained from Active Directory and forwarded by the client to the server to authenticate the user. Зарегистрируйте имя субъекта-службы (SPN) для узла, а не пользователя приложения. Register the Service Principal Name (SPN) for the host, not the user of the app.
Способы применения HTTP.sys How to use HTTP.sys
Настройка приложения ASP.NET Core для использования HTTP.sys Configure the ASP.NET Core app to use HTTP.sys
Ссылка на пакет в файле проекта не требуется при использовании метапакета Microsoft.AspNetCore.App (nuget.org). A package reference in the project file isn’t required when using the Microsoft.AspNetCore.App metapackage (nuget.org). Если метапакет Microsoft.AspNetCore.App не используется, добавьте ссылку на пакет в файл Microsoft.AspNetCore.Server.HttpSys. When not using the Microsoft.AspNetCore.App metapackage, add a package reference to Microsoft.AspNetCore.Server.HttpSys.
Вызовите метод расширения UseHttpSys при создании узла, указав все необходимые параметры HttpSysOptions. Call the UseHttpSys extension method when building the host, specifying any required HttpSysOptions. В следующем примере для параметров задаются значения по умолчанию: The following example sets options to their default values:
Дополнительная настройка HTTP.sys выполняется с помощью параметров реестра. Additional HTTP.sys configuration is handled through registry settings.
Параметры HTTP.sysHTTP.sys options
Свойство. Property
Описание Description
Значение по умолчанию Default
AllowSynchronousIO AllowSynchronousIO
Указывает, разрешен ли синхронные операции ввода-вывода для HttpContext.Request.Body и HttpContext.Response.Body . Control whether synchronous input/output is allowed for the HttpContext.Request.Body and HttpContext.Response.Body .
Указывает разрешенные схемы аутентификации. Specify the allowed authentication schemes. Может быть изменен в любое время до удаления прослушивателя. May be modified at any time prior to disposing the listener. Предоставляет значения, полученные при перечислении AuthenticationSchemes: Basic , Kerberos , Negotiate , None и NTLM . Values are provided by the AuthenticationSchemes enum: Basic , Kerberos , Negotiate , None , and NTLM .
None
EnableResponseCaching EnableResponseCaching
Выполняет попытку кэшировать режим ядра для ответов с допустимыми заголовками. Attempt kernel-mode caching for responses with eligible headers. Ответ не может включать заголовки Set-Cookie , Vary или Pragma . The response may not include Set-Cookie , Vary , or Pragma headers. Он должен включать заголовок Cache-Control со значением public , а также значение shared-max-age или max-age заголовок Expires . It must include a Cache-Control header that’s public and either a shared-max-age or max-age value, or an Expires header.
true
MaxAccepts
Максимальное число одновременных попыток. The maximum number of concurrent accepts.
Максимальное число попыток установить одновременное подключение. The maximum number of concurrent connections to accept. Использует -1 для бесконечных циклов. Use -1 for infinite. Использует null для работы с параметром реестра на уровне компьютера. Use null to use the registry’s machine-wide setting.
null (уровень компьютер (machine-wide значение) setting)
MaxRequestBodySize
См. раздел MaxRequestBodySize. See the MaxRequestBodySize section.
30 000 000 байт. 30000000 bytes (
28.6 MB)
RequestQueueLimit
Максимально допустимое число запросов в очереди. The maximum number of requests that can be queued.
1000 1000
ThrowWriteExceptions
Указывает, следует ли вызывать исключение или завершать работу нормально, когда запись текста ответа завершается ошибкой из-за отключения клиента. Indicate if response body writes that fail due to client disconnects should throw exceptions or complete normally.
false Нормальное завершение. (complete normally)
Timeouts
Предоставляет конфигурацию TimeoutManager HTTP.sys, которую также можно настроить в реестре. Expose the HTTP.sys TimeoutManager configuration, which may also be configured in the registry. Дополнительные сведения о каждом параметре, включая значения по умолчанию, см. здесь: Follow the API links to learn more about each setting, including default values:
TimeoutManager.DrainEntityBody — время, выделенное API сервера HTTP для очистки текста сущности при активном подключении. TimeoutManager.DrainEntityBody: Time allowed for the HTTP Server API to drain the entity body on a Keep-Alive connection.
TimeoutManager.EntityBody — время, выделенное на получение текста сущности запроса. TimeoutManager.EntityBody: Time allowed for the request entity body to arrive.
TimeoutManager.HeaderWait — время, выделенное для API сервера HTTP для выполнения синтаксического анализа заголовка запроса. TimeoutManager.HeaderWait: Time allowed for the HTTP Server API to parse the request header.
TimeoutManager.IdleConnection — время, допустимое для неактивного подключения. TimeoutManager.IdleConnection: Time allowed for an idle connection.
TimeoutManager.MinSendBytesPerSecond — минимальная скорость отправки ответа. TimeoutManager.MinSendBytesPerSecond: The minimum send rate for the response.
TimeoutManager.RequestQueue — время, выделенное для пребывания запроса в очереди до его получения приложением. TimeoutManager.RequestQueue: Time allowed for the request to remain in the request queue before the app picks it up.
UrlPrefixes
Указывает UrlPrefixCollection для регистрации с использованием HTTP.sys. Specify the UrlPrefixCollection to register with HTTP.sys. Удобнее всего использовать параметр UrlPrefixCollection.Add, который добавляет префикс к коллекции. The most useful is UrlPrefixCollection.Add, which is used to add a prefix to the collection. Могут быть изменены в любое время до удаления прослушивателя. These may be modified at any time prior to disposing the listener.
MaxRequestBodySizeMaxRequestBodySize
Максимально допустимый размер текста запроса в байтах. The maximum allowed size of any request body in bytes. Если задано значение null , размер максимального запроса не ограничен. When set to null , the maximum request body size is unlimited. Это ограничение не оказывает влияния на обновленные подключения, которые не имеют ограничений. This limit has no effect on upgraded connections, which are always unlimited.
Чтобы переопределить это ограничение в приложении ASP.NET Core MVC для IActionResult , рекомендуется использовать атрибут RequestSizeLimitAttribute в методе действия: The recommended method to override the limit in an ASP.NET Core MVC app for a single IActionResult is to use the RequestSizeLimitAttribute attribute on an action method:
При попытке приложения настроить ограничение для запроса после того, как приложение начало считывать запрос, возникает исключение. An exception is thrown if the app attempts to configure the limit on a request after the app has started reading the request. Свойство IsReadOnly указывает на то, что свойство MaxRequestBodySize находится в состоянии только для чтения и настраивать ограничение слишком поздно. An IsReadOnly property can be used to indicate if the MaxRequestBodySize property is in a read-only state, meaning it’s too late to configure the limit.
Если приложение должно переопределять MaxRequestBodySize по запросу, используйте IHttpMaxRequestBodySizeFeature: If the app should override MaxRequestBodySize per-request, use the IHttpMaxRequestBodySizeFeature:
При использовании Visual Studio убедитесь, что приложение не настроено для запуска IIS или IIS Express. If using Visual Studio, make sure the app isn’t configured to run IIS or IIS Express.
В Visual Studio профиль запуска по умолчанию использует IIS Express. In Visual Studio, the default launch profile is for IIS Express. Чтобы запустить проект как консольное приложение, измените выбранный профиль вручную, как показано на следующем снимке экрана. To run the project as a console app, manually change the selected profile, as shown in the following screen shot:
Настройка Windows Server Configure Windows Server
Определите, какие порты нужно открыть для приложения, и используйте брандмауэр Windows или командлет PowerShell New-NetFirewallRule, чтобы открыть порты брандмауэра для доступа трафика к HTTP.sys. Determine the ports to open for the app and use Windows Firewall or the New-NetFirewallRule PowerShell cmdlet to open firewall ports to allow traffic to reach HTTP.sys. В следующих командах и конфигурации приложения используется порт 443. In the following commands and app configuration, port 443 is used.
При развертывании на виртуальных машинах Azure откройте эти порты в группе безопасности сети. When deploying to an Azure VM, open the ports in the Network Security Group. В следующих командах и конфигурации приложения используется порт 443. In the following commands and app configuration, port 443 is used.
При необходимости получите и установите сертификаты X.509. Obtain and install X.509 certificates, if required.
В Windows создайте самозаверяющие сертификаты с помощью командлета PowerShell New-SelfSignedCertificate. On Windows, create self-signed certificates using the New-SelfSignedCertificate PowerShell cmdlet. Примеры, которые не поддерживаются, см. в разделе UpdateIISExpressSSLForChrome.ps1. For an unsupported example, see UpdateIISExpressSSLForChrome.ps1.
Установите самозаверяющие или подписанные центром сертификации сертификаты в хранилище сервера, выбрав Локальный компьютер > Личный. Install either self-signed or CA-signed certificates in the server’s Local Machine > Personal store.
Если приложение является развертыванием, не зависящим от платформы, установите NET Core или .NET Framework (или обе платформы, если это приложение .NET Core, предназначенное для .NET Framework). If the app is a framework-dependent deployment, install .NET Core, .NET Framework, or both (if the app is a .NET Core app targeting the .NET Framework).
.NET Core. Если приложению требуется .NET Core, загрузите установщик среды выполнения .NET Core на странице скачивания .NET Core и запустите его. .NET Core: If the app requires .NET Core, obtain and run the .NET Core Runtime installer from .NET Core Downloads. Не устанавливайте полный пакет SDK на сервере. Don’t install the full SDK on the server.
Платформа .NET Framework. Если приложению требуется .NET Framework, см. руководство по установке. .NET Framework: If the app requires .NET Framework, see the .NET Framework installation guide. Установите требуемую платформу .NET Framework. Install the required .NET Framework. Установщик последней версии .NET Framework доступен на странице скачивания .NET. The installer for the latest .NET Framework is available from the .NET Core Downloads page.
Если приложение развертывается автономно, в его развертывание включена среда выполнения. If the app is a self-contained deployment, the app includes the runtime in its deployment. Устанавливать .NET Framework на сервере не нужно. No framework installation is required on the server.
Настройте URL-адреса и порты в приложении. Configure URLs and ports in the app.
По умолчанию платформа ASP.NET Core привязана к http://localhost:5000 . By default, ASP.NET Core binds to http://localhost:5000 . Чтобы настроить префиксы URL-адресов и порты, используйте следующие параметры: To configure URL prefixes and ports, options include:
Переменная среды ASPNETCORE_URLS . ASPNETCORE_URLS environment variable
UrlPrefixes
В следующем примере кода показано, как использовать UrlPrefixes с локальным IP-адресом сервера 10.0.0.4 через порт 443. The following code example shows how to use UrlPrefixes with the server’s local IP address 10.0.0.4 on port 443:
Преимущество UrlPrefixes заключается в том, что при неправильном формате префиксов сразу же создается сообщение об ошибке. An advantage of UrlPrefixes is that an error message is generated immediately for improperly formatted prefixes.
Этот параметр в UrlPrefixes переопределяет параметры UseUrls / urls / ASPNETCORE_URLS . The settings in UrlPrefixes override UseUrls / urls / ASPNETCORE_URLS settings. Таким образом, преимущество переменных среды UseUrls , urls и ASPNETCORE_URLS заключается в возможности быстрого переключения между Kestrel и HTTP.sys. Therefore, an advantage of UseUrls , urls , and the ASPNETCORE_URLS environment variable is that it’s easier to switch between Kestrel and HTTP.sys.
Не используйте привязки с подстановочными знаками ( http://*:80/ и http://+:80 ) на верхнем уровне. Top-level wildcard bindings ( http://*:80/ and http://+:80 ) should not be used. Они создают уязвимости и ставят под угрозу безопасность приложения. Top-level wildcard bindings create app security vulnerabilities. Сюда относятся и строгие, и нестрогие подстановочные знаки. This applies to both strong and weak wildcards. Вместо подстановочных знаков используйте имена узлов или IP-адреса в явном виде. Use explicit host names or IP addresses rather than wildcards. Привязки с подстановочными знаками на уровне дочерних доменов (например, *.mysub.com ) не создают таких угроз безопасности, если вы полностью контролируете родительский домен (в отличие от варианта *.com , создающего уязвимость). Subdomain wildcard binding (for example, *.mysub.com ) isn’t a security risk if you control the entire parent domain (as opposed to *.com , which is vulnerable). Дополнительные сведения см. в стандарте RFC 7230, раздел 5.4, Host. For more information, see RFC 7230: Section 5.4: Host.
Предварительно зарегистрируйте префиксы URL-адресов на сервере. Preregister URL prefixes on the server.
Встроенным средством для настройки сервера HTTP.sys является netsh.exe. The built-in tool for configuring HTTP.sys is netsh.exe. С помощью netsh.exe можно зарезервировать префиксы URL-адресов и назначить сертификаты X.509. netsh.exe is used to reserve URL prefixes and assign X.509 certificates. Для использования этого средства требуются права администратора. The tool requires administrator privileges.
Используйте средство netsh.exe для регистрации URL-адреса приложения. Use the netsh.exe tool to register URLs for the app:
. Полное имя URL-адреса. : The fully qualified Uniform Resource Locator (URL). Не используйте привязки с подстановочными знаками. Don’t use a wildcard binding. Используйте допустимое имя узла или локальный IP-адрес. Use a valid hostname or local IP address. URL-адрес должен включать косую черту в конце.The URL must include a trailing slash.
. Определяет имя пользователя или группы пользователей. : Specifies the user or user-group name.
В следующем примере сервер имеет локальный IP-адрес 10.0.0.4 . In the following example, the local IP address of the server is 10.0.0.4 :
При регистрации URL-адреса средство возвращает ответ URL reservation successfully added . When a URL is registered, the tool responds with URL reservation successfully added .
Чтобы удалить зарегистрированный URL-адрес, используйте команду delete urlacl . To delete a registered URL, use the delete urlacl command:
Зарегистрируйте сертификаты X.509 на сервере. Register X.509 certificates on the server.
Используйте средство netsh.exe для регистрации сертификатов приложения. Use the netsh.exe tool to register certificates for the app:
. Задает локальный IP-адрес для привязки. : Specifies the local IP address for the binding. Не используйте привязки с подстановочными знаками. Don’t use a wildcard binding. Используйте допустимый IP-адрес. Use a valid IP address.
. Указывает порт для привязки.
: Specifies the port for the binding.
. Отпечаток сертификата X.509. : The X.509 certificate thumbprint.
. Глобальный уникальный идентификатор приложения, задаваемый разработчиком в информационных целях. : A developer-generated GUID to represent the app for informational purposes.
В справочных целях храните GUID в приложении в виде тега пакета. For reference purposes, store the GUID in the app as a package tag:
В Visual Studio сделайте следующее: In Visual Studio:
Откройте свойства проекта приложения, щелкнув приложение правой кнопкой мыши в обозревателе решений и выбрав Properties (Свойства). Open the app’s project properties by right-clicking on the app in Solution Explorer and selecting Properties.
Перейдите на вкладку Package (Пакет). Select the Package tab.
Введите GUID, который вы указали в поле Tags (Теги). Enter the GUID that you created in the Tags field.
Если Visual Studio не используется: When not using Visual Studio:
Откройте файл проекта приложения. Open the app’s project file.
в новую или существующую группу
с GUID, который вы создали. Add a
property to a new or existing
with the GUID that you created:
В следующем примере: In the following example:
Локальный IP-адрес сервера — 10.0.0.4 . The local IP address of the server is 10.0.0.4 .
Сетевой генератор случайных GUID задает значение appid . An online random GUID generator provides the appid value.
При регистрации сертификата средство возвращает ответ SSL Certificate successfully added . When a certificate is registered, the tool responds with SSL Certificate successfully added .
Чтобы удалить регистрацию сертификата, используйте команду delete sslcert . To delete a certificate registration, use the delete sslcert command:
Дополнительные сведения см. в справочной документации по netsh.exe: Reference documentation for netsh.exe:
Запустите приложение. Run the app.
Если выполнена привязка к localhost через HTTP (не HTTPS) с номером порта больше 1024, для запуска приложения права администратора не требуются. Administrator privileges aren’t required to run the app when binding to localhost using HTTP (not HTTPS) with a port number greater than 1024. При других конфигурациях (например, при использовании локального IP-адреса или привязки к порту 443) для запуска приложения требуются права администратора. For other configurations (for example, using a local IP address or binding to port 443), run the app with administrator privileges.
Приложение отвечает по общедоступному IP-адресу сервера. The app responds at the server’s public IP address. В этом примере подключение к серверу происходит через Интернет по общедоступному IP-адресу 104.214.79.47 сервера. In this example, the server is reached from the Internet at its public IP address of 104.214.79.47 .
В этом примере используется сертификат разработки. A development certificate is used in this example. После обхода предупреждения о ненадежном сертификате браузера происходит безопасная загрузка страницы. The page loads securely after bypassing the browser’s untrusted certificate warning.