Требует действийможет затронуть работающую системуПроверены все 22 non-merge commits от 2.4.17140 до 2.4.17161: 462 additions и 202 deletions без version bookkeeping. superseded_by отсутствует; avoid windows основаны на проверенных fixes тех же routines. Heartbeat regression подтверждён финальным кодом и default LastOperationReleaseMemorySeconds = 60.
SChannel и HTTP caches стабилизированы, но heartbeat регрессировал
Windows SChannel получает исправления concurrency, handshake, renegotiation и памяти; HTTP clients — опциональные ограничения redirect, а оба proxy caches — корректную обработку статусов. Async WebSocket heartbeat переведён на HeartbeatDelay, но две последующие правки оставили сравнение, отключающее callbacks после стандартного порога освобождения памяти. Внешние реализации INetTls и код с удалённым LastOperationIdleSeconds требуют миграции.
Коротко
- Переходите на head c94dba6c18f6a0c5b225734af210da678cc59167, build 2.4.17161, для завершённых исправлений SChannel, redirect и cache.
- Async WebSocket heartbeat callbacks отключаются после стандартного idle-memory threshold; временно задайте LastOperationReleaseMemorySeconds = 0.
- Внешние реализации INetTls должны добавить ReleaseBuffers, а LastOperationIdleSeconds нужно заменить на GetLastOperationIdleSeconds.
- THttpRequestExtendedOptions.RedirectOptions добавляет опциональную очистку cross-origin credentials и запрет redirects при прежнем default.
- Proxy cache теперь отвергает неверные GET statuses, прерывает progressive readers при ошибке и проверяет размер файла.
- Избегайте build 2.4.17143 и незавершённых redirect builds 2.4.17159–2.4.17160.
Рекомендации по обновлению
Переходите на build 2.4.17161 в head c94dba6c18f6a0c5b225734af210da678cc59167 для исправлений SChannel, redirect и proxy cache. Добавьте INetTls.ReleaseBuffers во внешние TLS backends и замените LastOperationIdleSeconds. Async WebSocket servers должны задать LastOperationReleaseMemorySeconds = 0 и проверить heartbeat до следующего исправления cutoff.
22 из 22 записей · 22 коммитов в апстриме
1
Высокий
WebSocket heartbeat timing переведён на HeartbeatDelay
TAsyncConnections удаляет LastOperationIdleSeconds и добавляет virtual GetLastOperationIdleSeconds. TWebSocketAsyncConnections возвращает Settings.HeartbeatDelay; 0 отключает ping/pong.
Несовместимые изменения
mormot.net.async+1
efb27161+37-23
net: fixed WebSockets HeartbeatDelay async server support
Влияние
Код с LastOperationIdleSeconds больше не компилируется. WebSocket берёт interval из settings, но final head требует workaround из-за regression cutoff.
Требуется миграция
Найдите LastOperationIdleSeconds. Используйте TWebSocketProtocol.Settings.HeartbeatDelay или override GetLastOperationIdleSeconds.
Публичный API
TAsyncConnections.LastOperationIdleSecondsremoved — Writable property заменено virtual getter.TAsyncConnections.GetLastOperationIdleSecondsadded — По умолчанию возвращает 0; descendants могут override.
2
Высокий
INetTls получил контракт освобождения idle buffers
Публичный INetTls добавляет ReleaseBuffers: PtrInt. SChannel освобождает пустые buffers; OpenSSL возвращает 0, поскольку SSL_MODE_RELEASE_BUFFERS уже включён.
Несовместимые изменения
mormot.lib.openssl11+2
ef8aa8a5+31-2
net: introducing INetTls.ReleaseBuffers method
Влияние
Любой внешний implementor INetTls перестаёт компилироваться до добавления метода; built-in backends готовы.
Требуется миграция
Найдите classes, реализующие INetTls, и добавьте function ReleaseBuffers: PtrInt; возвращайте 0 без safe release.
Публичный API
INetTls.ReleaseBuffersadded — Обязательный метод, возвращающий число released bytes.
3
Высокий
Concurrent SChannel Send и renegotiation сериализованы
TSChannelNetTls добавляет fSspiSafe вокруг SEC_I_RENEGOTIATE и Send encryption; Send возвращает nrRetry, если lock у Receive.
Исправления
mormot.net.sock.windows
3e2819e1+95-63
net: hardened TSChannelNetTls thread safety
Влияние
Windows WebSocket connections больше не гоняют SSPI при TLS 1.3 post-handshake во время Send; callers nrRetry не меняются.
Рекомендуется обновиться
Обновите Windows WebSocket TLS и нагрузочно проверьте concurrent Send с TLS 1.3 post-handshake messages.
Модули
4
Высокий
Ошибочные proxy downloads прерывают readers и удаляют partial files
Proxy cache принимает только 200/204/206, хранит expected size, прерывает все THttpPartial readers при ошибке и удаляет incomplete files.
Исправления
mormot.net.async
e3a44702+51-11
net: fixed Proxy Cache process
Влияние
Progressive clients больше не ждут failed transfer и не принимают truncated cache object за полный; redirect/error bodies не сохраняются как success.
Рекомендуется обновиться
Обновите proxy-cache deployments и проверьте origin disconnect, неверный Content-Length и GET 3xx/4xx.
Модули
5
Высокий
Fragmented ClientHello больше не перезапускает SChannel accept
TSChannelNetTls отслеживает fAcceptFirst и повторно использует SSPI context после SEC_I_CONTINUE_NEEDED вместо нового negotiation.
Исправления
mormot.net.sock.windows
7f17ffe4+12-4
net: fixed SChannel partial initial negotiation
Влияние
SChannel servers завершают handshake при ClientHello в нескольких TCP reads вместо failure/context corruption.
Рекомендуется обновиться
Обновите Windows SChannel servers и проверьте ClientHello в нескольких TCP reads.
Модули
6
Высокий
HEAD redirects исправлены, но heartbeat cutoff остаётся неверным
THttpClientSocket сохраняет HEAD/OPTIONS для 301/303 и переводит методы с body в GET. Этот же commit ставит guard allowed < gc; после превращения gc в абсолютный 60-second cutoff allowed обнуляется и heartbeat callbacks пропускаются.
Исправления
mormot.net.async+1
edf01585+5-4
net: THttpClientSocket should keep HEAD for HTTP_MOVEDPERMANENTLY
Влияние
HEAD сохраняет метод. При default LastOperationReleaseMemorySeconds=60 async WebSocket servers перестают планировать OnLastOperationIdle; значение 0 обходит ветвь.
Стоит взглянуть
Проверьте HEAD redirects. Для async WebSocket задайте LastOperationReleaseMemorySeconds = 0 и проверьте ping/pong до upstream fix.
Публичный API
THttpClientSocket.Request redirect handlingbehaviour-changed — 301/303 сохраняют методы без body, включая HEAD и OPTIONS.
7
Высокий
Same-origin redirects теперь отправляют новый path
THttpClientSocket.Request обновляет ctxt.Url вне reconnect-only блока, поэтому redirect на том же соединении использует новый URL.
Исправления
mormot.net.client
30f397da+3-3
net: fixed THttpClientSocket redirections on the same server
Влияние
Same-server redirects больше не повторяют исходный path и не возвращают неверный resource.
Рекомендуется обновиться
Обновите clients с same-origin redirects и проверьте relative/absolute Location на reused connections.
Модули
8
Высокий
SChannel renegotiation снова сохраняет decrypted buffers
Ветка SEC_I_RENEGOTIATE в Receive вызывает ProcessBuffers до проверки output и продолжения TLS 1.3 post-handshake.
Исправления
mormot.net.sock.windows
c6dc158f+3-2
net: fixed previous commit
Влияние
Build 2.4.17143 мог потерять decrypted data при renegotiation; 2.4.17144 восстанавливает processing.
Рекомендуется обновиться
Пропустите 2.4.17143, берите 2.4.17144 или новее и проверьте TLS 1.3 post-handshake traffic.
Модули
9
Высокий
Idle-loop cleanup вводит heartbeat regression
IdleEverySecond добавляет underflow/shutdown checks, но сравнивает sec с уже преобразованным gc вместо heartbeat delay. Следующий commit меняет operands, не восстанавливая cutoff.
Внутреннее устройство
mormot.net.async
fab1dd9a+18-15
net: minor TAsyncConnections.IdleEverySecond cleanup
Влияние
Cleanup начинает условие, подавляющее async WebSocket callbacks после memory window; прочие termination checks стали безопаснее.
Стоит взглянуть
Не полагайтесь на эту heartbeat logic; примените workaround LastOperationReleaseMemorySeconds для final head.
Модули
10
Средний
Proxy HEAD probing сохраняет 204 и redirects
RemoteClientHead применяет Range GET только для 200 без length, напрямую возвращает 204/3xx и добавляет RequestContext в diagnostics.
Исправления
mormot.net.async+1
48940904+15-12
net: enhanced THttpProxyUrl.RemoteClientHead
Влияние
Origin 204 или redirect больше не заменяются Range probe, а logs содержат нужный redirect/socket context.
Рекомендуется обновиться
Берите всю proxy-cache серию и проверьте origin 204, 3xx и Range fallback с diagnostic logs.
11
Средний
Очистка redirect теперь охватывает созданный Referer
THttpClientSocket использует fAuthPurge, подавляет созданные Referer и Authorization после cross-origin purge и сравнивает origin через TUri.Same.
Исправления
mormot.net.client
c94dba6c+11-11
net: some THttpRedirectOptions fixes
Влияние
При hroPurgeReferer или hroPurgeAuthorization значения больше не восстанавливаются socket fields; default не изменён.
Рекомендуется обновиться
Берите commit вместе с RedirectOptions и проверьте explicit/generated headers при cross-origin redirect.
Модули
12
Средний
Proxy HEAD/GET сохраняют non-file status codes
THttpProxyServer использует local/progressive files только для HTTP_GET_OK, отдельно выдаёт Content-Length и раньше копирует options.
Исправления
mormot.net.async
597eea16+9-5
net: fixed THttpProxyServer HEAD/GET response codes
Влияние
HEAD/GET callers получают origin status без file-serving logic для redirects и других responses.
Рекомендуется обновиться
Обновите THttpProxyServer и проверьте HEAD/GET с origin 2xx, 3xx и 4xx.
Модули
13
Средний
Ответы 204 proxy cache больше не идут в file delivery
THttpProxyServer ограничивает size/progressive-file статусами 200 и 206, исключает 204 и сохраняет redirects с headers.
Исправления
mormot.net.async
882e3435+7-5
net: fixed 204 responses for the Proxy Cache
Влияние
Origin response без content остаётся 204 вместо обработки как файла с неверной длиной.
Рекомендуется обновиться
Обновите proxy-cache с HTTP 204 и проверьте HEAD/GET responses без body.
Модули
14
Средний
Range probing нормализует 206, не отвергая redirects
RemoteClientHead преобразует 206 от Range GET в 200; MakeHeadAndComputeFilename требует size только для 200/206 и пропускает 3xx.
Исправления
mormot.net.async
b98df07d+8-3
net: fixed some other Proxy Cache status issues
Влияние
Dynamic resources больше не отдают искусственный 206, а redirects без Content-Length не превращаются в ошибку.
Рекомендуется обновиться
Берите с остальными proxy-cache fixes и проверьте Range probing и redirects без Content-Length.
Модули
15
Средний
Peer-cache redirects сохраняют Location header
DirectFileNameHead назначает headers в Ctxt.OutCustomHeaders до проверки HTTP_GET_OK, сохраняя Location для 3xx.
Исправления
mormot.net.server
9b96345d+3-3
net: fixed THttpPeerCache to include Location: for 3xx redirections
Влияние
Clients могут следовать redirects через THttpPeerCache вместо 3xx без target URL.
Рекомендуется обновиться
Обновите peer-cache с redirects и проверьте получение Location header клиентом.
Модули
16
Средний
HTTP clients получили опциональную redirect security policy
mormot.net.client добавляет THttpRedirectOption, THttpRedirectOptions и RedirectOptions для очистки Authorization/Cookie/Referer и запрета downgrade, cross-origin или userinfo redirects.
Новые возможности
mormot.net.client
492aeccf+95-18
net: new THttpRedirectOptions set of options for THttpClientSocket
Влияние
Пустой default сохраняет прежние redirects. Security-sensitive callers могут запретить перенос credentials и опасную смену destination.
Стоит взглянуть
Проверьте clients с untrusted redirects, выберите hroPurge*/hroReject* flags и включите fixes 2.4.17161.
Публичный API
THttpRedirectOptionadded — Добавляет шесть вариантов purge/reject.THttpRedirectOptionsadded — Set значений THttpRedirectOption.THttpRequestExtendedOptions.RedirectOptionsadded — По умолчанию пусто; реализовано в THttpClientSocket.
Модули
17
Средний
SChannel buffers используют лимиты SSPI
TSChannelNetTls хранит max TLS record size, начинает output с 2 KB и растит input по SECBUFFER_MISSING до лимита SSPI.
Производительность
mormot.lib.sspi+1
8bcdf6c9+39-13
net: refined SChannel TLS buffer size
Влияние
Обычные Windows TLS connections используют меньше памяти, а большие records растут до нужного SChannel размера.
18
Средний
SChannel Receive централизован вокруг SSPI results
Receive выносит extraction в ProcessBuffers и обрабатывает SEC_E_OK, SEC_I_RENEGOTIATE, expiry и errors одним switch; SQLite/changelog меняют только текст.
Внутреннее устройство
mormot.net.sock.windows+1
1ebf95e7+53-46
net: rewritten TSChannelNetTls.Receive core process
Влияние
Receive path упрощён и координирует renegotiation lock, но этот build требует следующего ProcessBuffers fix. Database behavior не меняется.
Стоит взглянуть
Не останавливайтесь на 2.4.17143; включите c6dc158f3a9e1be0dd9a06e063800365f9d4bf45 или новее.
19
Низкий
SChannel connections начинают с меньших dynamic buffers
Fixed TLSRECMAXSIZE 19 KB удалён; input/data/output начинаются с 4 KB и растут через EnsureLength.
Производительность
mormot.net.sock.windows
f1785ad1+40-42
net: reduce TSChannelNetTls memory consumption per connection
Влияние
Windows services с множеством idle TLS connections снижают baseline memory; большие transfers растут по требованию.
Модули
20
Низкий
Idle async connections освобождают память только один раз
ReleaseMemoryOnIdle объединяет read/write/TLS cleanup под нужными locks и ставит fMemClean до следующей активности.
Производительность
mormot.net.async
85f08e29+32-39
net: rewritten TPollAsyncConnection.ReleaseMemoryOnIdle
Влияние
Long-idle servers выполняют меньше lock/cleanup работы, сохраняя освобождение buffers; application code не меняется.
Модули
21
Низкий
Idle async sockets освобождают SChannel buffers
ReleaseMemoryOnIdle берёт read/write locks и вызывает INetTls.ReleaseBuffers при отсутствии pending plain data.
Производительность
mormot.net.async
a03577b9+23-4
net: idle TPollAsyncConnection release its INetTls buffers
Влияние
Windows SChannel servers возвращают TLS memory idle connections; OpenSSL остаётся no-op благодаря release mode.
Модули
22
Низкий
SChannel renegotiation использует Windows OS lock
TSChannelNetTls заменяет TLightLock на TOSLightLock вокруг Receive/Send renegotiation и удаляет redundant assignment.
Производительность
mormot.core.os+1
ef2fdc14+5-7
net: some TSChannelNetTls cleanup/optimization
Влияние
Blocked Windows receiver быстрее возобновляется после release lock; API и non-Windows backends не меняются.