Элементы Features

Steve Smith

Некоторые характеристики веб серверов, которые касаются HTTP запросов и ответов, касаются отдельных интерфейсов. Эти абстракции используются отдельными серверными реализациями и связующим ПО для создания и изменения хостингового потока.

Интерфейсы Feature

ASP.NET Core определяет некоторые интерфейсы Http Feature <https://docs.asp.net/projects/api/en/latest/autoapi/Microsoft/AspNet/Http/Features/index.html>`_, которые используются серверами для определения того, какие элементы Feature они используют. Базовые элементы Feature веб сервера обрабатывают запросы и возвращают ответы, что определено следующими интерфейсами:

IHttpRequestFeature
Определяет структуру HTTP запроса, включая протокол, путь, строку запроса, заголовки и тело запроса.
IHttpResponseFeature
Определяет структуру HTTP ответа, включая код статуса, заголовки и тело ответа.
IHttpAuthenticationFeature
Поддерживает идентификацию пользователей, основываясь на ClaimsPrincipal и определяя обработчик аутентификации.
IHttpUpgradeFeature
Поддерживает обновления HTTP, которые позволяют клиенту указать, какие дополнительные протоколы он желает использовать, если сервер меняет протоколы.
IHttpBufferingFeature
Определяет методы для отключения буферизации запросов и ответов.
IHttpConnectionFeature
Определяет свойства для локальных и удаленных адресов и портов.
IHttpRequestLifetimeFeature
Обрывает соединение или определяет, был ли запрос завершен преждевременно, например, из-за разрыва связи со стороны клиента.
IHttpSendFileFeature
Определяет метод для асинхронной отправки файлов.
IHttpWebSocketFeature
Определяет API для поддержки веб сокетов.
IHttpRequestIdentifierFeature
Добавляет свойство, которое может быть реализовано для уникального определения запросов.
ISessionFeature
Определяет абстракции ISessionFactory и ISession для поддержки пользовательских сессий.
ITlsConnectionFeature
Определяет API для получения пользовательских сертификатов.
ITlsTokenBindingFeature
Определяет методы для работы со связующими параметрами TLS.

Примечание

ISessionFeature не является серверным элементом feature, но реализуется SessionMiddleware, см. Управление состоянием приложения.

Коллекции Feature

Свойство HttpContext.Features предлагает интерфейс для получения и установки элементов HTTP feature для текущего запроса. Поскольку коллекция feature изменчива даже внутри контекста запроса, мы можем использовать связующее ПО, чтобы менять коллекцию и поддерживать дополнительные элементы feature.

Связующее ПО для работы с элементами Feature для запросов

Поскольку серверы отвечают за создание коллекции feature, связующее ПО может добавлять и извлекать элементы из коллекции. Например, StaticFileMiddleware получает доступ к IHttpSendFileFeature. Если элемент feature существует, он используется для отправки запрошенного статического файла с его физического пути, иначе используется более медленный метод.

Кроме того, связующее ПО может добавлять элементы в коллекцию feature. Можно даже изменить существующие элементы, позволяя связующему ПО расширить функционал сервера. Элементы, добавленные в коллекцию, становятся сразу же доступными для другого связующего ПО, а позже и для самого приложения.

Примечание

Используйте FeatureCollectionExtensions, чтобы получать и устанавливать элементы feature для HttpContext.

Комбинируя пользовательскую серверную реализацию с конкретным связующим ПО, нужно настроить определенный набор элементов Feature. Это позволяет добавить элементы Feature, не требуя изменений на сервере, и тогда вам не нужно использовать чрезмерное число Feature, что сильно улучшает производительность и снижает угрозу атак.

Резюме

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

Поделись хорошей новостью с друзьями!
Следи за новостями!