# Журналы изменений

Source: https://docs.sisk-framework.org/ru/docs/changelogs.html

Каждое изменение, внесённое в Sisk, фиксируется в журнале изменений. Вы можете просмотреть журналы изменений для всех версий Sisk [здесь](https://github.com/sisk-http/archive/tree/master/changelogs).

## Переход с 1.6 на 1.7

Sisk 1.7.0 поставляется с `Sisk.HttpServer`, `Sisk.Cadente`, `Sisk.Cadente.CoreEngine` и `Sisk.IniConfiguration` версии 1.7.0. `Sisk.Documenting`, `Sisk.Documenting.Html` и `Sisk.Monitoring` поставляются как 1.7.0-rc3, а `Sisk.ModelContextProtocol` — как 1.7.0-rc1. Прочитайте [полный журнал изменений 1.7.0](https://github.com/sisk-http/archive/blob/master/changelogs/core/v1.7/v1.7.0.md) для всех изменений.

### Несовместимые изменения

- **`Route.UseRegex` больше нельзя задавать.** Свойство устарело и только сообщает, является ли маршрут `RegexRoute`. Создайте [RegexRoute](https://docs.sisk-framework.org/api/Sisk.Core.Routing.RegexRoute.md) вместо него. Атрибуты маршрутов с `UseRegex = true` и атрибут `[RegexRoute]` продолжают работать. См. [regex routes](https://docs.sisk-framework.org/ru/docs/fundamentals/routing.md#regex-routes).

    ```cs
    // до
    router.Map(new Route(RouteMethod.Get, @"^/items/(?<id>\d+)$", action) { UseRegex = true });

    // после
    router.Map(new RegexRoute(RouteMethod.Get, @"^/items/(?<id>\d+)$", action));
    ```

- **Тела запросов по умолчанию ограничены 100 МБ.** Значение по умолчанию [HttpServerConfiguration.MaximumContentLength](https://docs.sisk-framework.org/api/Sisk.Core.Http.HttpServerConfiguration.MaximumContentLength.md) изменилось с `0` (неограниченно) на 100 МБ. Ограничение также применяется к потокам запросов и сообщениям WebSocket. Установите `0`, чтобы восстановить прежнее поведение. См. [getting the request body](https://docs.sisk-framework.org/ru/docs/fundamentals/requests.md#getting-the-request-body).

    ```cs
    using var app = HttpServer.CreateBuilder()
        .UseConfiguration(config => config.MaximumContentLength = 0)
        .Build();
    ```

- **Статические маршруты проверяются до динамических маршрутов.** Маршруты с регулярными выражениями, префиксные маршруты (включая файловые серверы) и пользовательские маршруты проверяются после каждого статического маршрута, независимо от порядка их регистрации. См. [matching precedence](https://docs.sisk-framework.org/ru/docs/fundamentals/routing.md#matching-precedence).

- **Повторяющиеся имена маршрутов вызывают исключение при запуске.** Два или более маршрутов с одинаковым `Name` вызывают `ArgumentException` при старте сервера, если включена [Router.CheckForRouteCollisions](https://docs.sisk-framework.org/api/Sisk.Core.Routing.Router.CheckForRouteCollisions.md) (по умолчанию).

- **Маршруты файлового сервера являются префиксными маршрутами.** `Router.MapFileSystem` и `HttpFileServer.CreateServingRoute` создают [PrefixRoute](https://docs.sisk-framework.org/api/Sisk.Core.Routing.PrefixRoute.md) вместо маршрута с регулярным выражением и больше не зависят от `ForceTrailingSlash`.

- **`RouteMethod.Any` включает `QUERY`.** Маршруты, сопоставленные с `MapAny`, также отвечают на запросы `QUERY`. Числовое значение `RouteMethod.Any` изменилось, поэтому пересоберите код, который сохраняет или сравнивает его.

- **Предварительные CORS‑запросы учитывают `UseCors`.** Автоматический ответ `OPTIONS` больше не отправляет заголовки CORS для маршрутов с `UseCors = false`, а маршруты, явно сопоставленные для `OPTIONS`, обрабатывают запрос сами. См. [preflight requests](https://docs.sisk-framework.org/ru/docs/features/cors.md#preflight-requests).

- **Cadente отклоняет некорректные запросы.** Неправильные методы запросов и цели, неподдерживаемые значения `Transfer-Encoding` и конфликтующие заголовки `Content-Length` отклоняются, а блоки заголовков более 8 KB получают `431 Request Header Fields Too Large`. См. [Cadente request validation](https://docs.sisk-framework.org/ru/docs/cadente.md#request-validation).

### Прекращённые пакеты

`Sisk.BasicAuth`, `Sisk.SslProxy` и `Sisk.ServiceProvider` больше не поддерживаются и помечены как устаревшие в NuGet, без заменяющего пакета. Удалите их из ваших проектов:

- Замените `Sisk.BasicAuth` собственным [обработчиком запросов](https://docs.sisk-framework.org/ru/docs/fundamentals/request-handlers.md), который проверяет заголовок `Authorization`.
- Замените `Sisk.SslProxy` нативной поддержкой SSL движка [Cadente](https://docs.sisk-framework.org/ru/docs/cadente.md).
- Замените `Sisk.ServiceProvider` [портируемой конфигурацией](https://docs.sisk-framework.org/ru/docs/extensions/service-providers.md), встроенной в `Sisk.HttpServer` через `UsePortableConfiguration`.

### Новые возможности

- [Пользовательское сопоставление маршрутов](https://docs.sisk-framework.org/ru/docs/fundamentals/routing.md#custom-route-matching) через `Route.Match`, `RouteMatch`, `Route.IsStatic` и `Route.AllowRewrites`, а также новые [префиксные маршруты](https://docs.sisk-framework.org/ru/docs/fundamentals/routing.md#prefix-routes).
- Поддержка HTTP‑метода [QUERY](https://docs.sisk-framework.org/ru/docs/fundamentals/routing.md#query-method-routes) с `MapQuery`, `Route.Query`, `[RouteQuery]` и заголовком `Accept-Query`.
- [Атомарные значения контекста](https://docs.sisk-framework.org/ru/docs/fundamentals/requests.md#atomic-context-values) через `HttpContext.Interlocked`.
- Термин доступа `%{$key}` [access log term](https://docs.sisk-framework.org/ru/docs/features/logging.md#access-log-formatting), который выводит значения из request bag, и [безопасные помощники записи файлов](https://docs.sisk-framework.org/ru/docs/features/logging.md#writing-files-safely) `LogStream.SafeWriteToFile` и `LogStream.SafeAppendToFile`.
- В Cadente: конвейерные keep-alive запросы, `WriteInlineContent` и `WriteInlineContentAsync`, а также перенаправление на HTTPS для обычных HTTP‑запросов, полученных на SSL‑порт.
- В расширениях: примеры параметров и `LlmsApiExporter.FooterText` в [Sisk.Documenting](https://docs.sisk-framework.org/ru/docs/extensions/api-documentation.md), навыки и ревизия протокола `2026-07-28` в [Sisk.ModelContextProtocol](https://docs.sisk-framework.org/ru/docs/extensions/mcp.md), а также телеметрия HTTP‑трафика, задержек, маршрутов и исключений в панели Sisk.Monitoring.

### Другие изменения поведения

- Движок `HttpListener` распределяет каждый запрос в пул потоков, поэтому медленный запрос больше не задерживает следующую принятые соединение. Его `ContextAbortedToken` возвращает `CancellationToken.None` вместо выброса исключения.
- Исключения, выброшенные обработчиками сервера в конце запроса и при записи логов, записываются в журнал ошибок вместо того, чтобы «выскочить» в HTTP‑движок. См. [exceptions thrown by handlers](https://docs.sisk-framework.org/ru/docs/advanced/http-server-handlers.md#exceptions-thrown-by-handlers).
- Ответы CORS отправляют `Vary: Origin`, когда разрешённый источник зависит от запроса.
- Термин доступа `%ri` использует клиентский адрес, определённый в начале запроса.
- `Sisk.HttpServer` нацелен на .NET 8, .NET 9 и .NET 10. `Sisk.Cadente` и `Sisk.Cadente.CoreEngine` нацелены на .NET 9 и .NET 10 и публикуют свои отладочные символы как пакеты `.snupkg`.
