{"id":490882,"date":"2026-08-13T18:02:50","date_gmt":"2026-08-13T18:02:50","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=490882"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2026-08-13T18:02:50","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=490882","title":{"rendered":"\u0423 nginx \u0441\u0436\u0430\u0442\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043e\u0434\u043d\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0435"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0421\u0442\u0435\u043d\u0434: \u043e\u0434\u0438\u043d nginx, \u043e\u0434\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0447\u0435\u0442\u044b\u0440\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u043e\u0434\u0440\u044f\u0434. \u0423 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a\u0440\u0443\u043f\u043d\u044b\u0439 <code>authorization<\/code> \u043d\u0430 244 \u0431\u0430\u0439\u0442\u0430 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0439 <code>x-request-id<\/code>. \u041c\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0436\u0430\u0442\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b:<\/p>\n<pre><code>\u043e\u0442\u0432\u0435\u0442   (nginx \u2192 \u043a\u043b\u0438\u0435\u043d\u0442):  131 131 131 131\u0437\u0430\u043f\u0440\u043e\u0441  (\u043a\u043b\u0438\u0435\u043d\u0442 \u2192 nginx):  246   8   8   8<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0435\u0440\u0445\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u2014 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438, \u043e\u0442\u0432\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 131 \u0431\u0430\u0439\u0442. \u041d\u0438\u0436\u043d\u044f\u044f \u2014 \u0442\u043e\u0442 \u0436\u0435 \u043d\u0430\u0431\u043e\u0440 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443: \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u043d \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u0440\u0430\u0437.<\/p>\n<p>\u0417\u0430\u043c\u0435\u0440\u043e\u0432 \u0443 HTTP\/3 \u0447\u0435\u0442\u044b\u0440\u0435, \u0443 HTTP\/2 \u0442\u0440\u0438 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b: <code>h3_<\/code><a href=\"http:\/\/probe.py\" rel=\"noopener noreferrer nofollow\"><code>probe.py<\/code><\/a> \u0448\u043b\u0451\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, <code>curl<\/code> \u0432 <a href=\"http:\/\/run.sh\" rel=\"noopener noreferrer nofollow\"><code>run.sh<\/code><\/a> \u0442\u0440\u0438. \u041d\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u044d\u0442\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442.<\/p>\n<p>\u042d\u0442\u043e \u043d\u0435 \u0431\u0430\u0433 \u0438 \u043d\u0435 \u043f\u0440\u043e\u0441\u0447\u0451\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u042d\u0442\u043e HTTP\/3 \u0432 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438: \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430\u0434\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u044f\u0432\u043d\u043e (<code>--with-http_v3_module<\/code>, \u0432 <code>auto\/options<\/code> \u043e\u0431\u0430 HTTP\/2 \u0438 HTTP\/3 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>NO<\/code>), \u043d\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0442\u043e\u043b\u044c\u043a\u043e <code>listen 8443 quic<\/code> \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e. \u0412 HTTP\/2 \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0440\u043e\u0432\u043d\u043e \u0442\u0430 \u0436\u0435: <code>129 129 129<\/code>, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430.<\/p>\n<p>\u041c\u0435\u0436\u0434\u0443 \u0442\u0435\u043c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0441\u043c\u044b\u0441\u043b\u0430 HPACK \u0438 QPACK \u2014 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430: \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0443\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u043e\u043c\u0435\u0440. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0434\u0430\u0451\u0442 \u0442\u0435 \u0441\u0430\u043c\u044b\u0435 \u00ab\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0441\u0436\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u044b\u00bb, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u0438 \u0437\u0430\u0442\u0435\u0432\u0430\u043b\u0438\u0441\u044c. \u041a\u043b\u0438\u0435\u043d\u0442 \u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u2014 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435. \u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432.<\/p>\n<p>\u041d\u0438 \u0432 access-\u043b\u043e\u0433\u0435, \u043d\u0438 \u0432 error-\u043b\u043e\u0433\u0435 \u043d\u0430 \u0448\u0442\u0430\u0442\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u043d\u043e. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 nginx \u043d\u0435\u0442 \u043d\u0438 \u0441\u043b\u043e\u0432\u0430. \u0410 \u0432 RFC \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u2014 \u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u044d\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u0441\u043a\u0430\u0442\u044c.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0432\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 QPACK \u0438\u0437 \u043f\u044f\u0442\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u0438\u0448\u0443\u0442. \u041d\u0435 \u0443\u0433\u0430\u0434\u0430\u0435\u0442\u0435, \u043a\u0430\u043a\u0438\u0435 \u2014 \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u0451\u043c\u043d\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430, \u0442\u0430 \u0441\u0430\u043c\u0430\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0430\u043c \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u044d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043f\u0440\u0438\u043d\u0435\u0441\u043b\u0430 nginx use-after-free \u0441 \u043e\u0446\u0435\u043d\u043a\u043e\u0439 9.2.<\/p>\n<p>\u0412\u0435\u0441\u044c \u0440\u0430\u0437\u0431\u043e\u0440 \u2014 \u043f\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u043f\u0440\u043e\u0435\u043a\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0432\u0435\u0440\u0441\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u043e\u0442\u043a\u0443\u0434\u0430<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"https:\/\/github.com\/nginx\/nginx\" rel=\"noopener noreferrer nofollow\">nginx\/nginx<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>release-1.31.3<\/code> (<code>073ab5d<\/code>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u0437 \u0442\u0435\u0433\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"https:\/\/github.com\/nginx\/nginx\" rel=\"noopener noreferrer nofollow\">nginx\/nginx<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>release-1.31.2<\/code> (<code>2fd01ed<\/code>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u043e\u043b\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0444\u0438\u043a\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"https:\/\/github.com\/quic-go\/qpack\" rel=\"noopener noreferrer nofollow\">quic-go\/qpack<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>v0.6.0<\/code> (<code>1661efa<\/code>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u0437 \u0442\u0435\u0433\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"https:\/\/github.com\/cloudflare\/quiche\" rel=\"noopener noreferrer nofollow\">cloudflare\/quiche<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.29.3<\/code> (<code>55886df<\/code>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u0437 \u0442\u0435\u0433\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"https:\/\/github.com\/litespeedtech\/ls-qpack\" rel=\"noopener noreferrer nofollow\">litespeedtech\/ls-qpack<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>v2.7.0<\/code> (<code>9156770<\/code>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u0437 \u0442\u0435\u0433\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"https:\/\/github.com\/google\/quiche\" rel=\"noopener noreferrer nofollow\">google\/quiche<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>7c6eb2cb4<\/code>, 12 \u0430\u0432\u0433 2026<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0442\u0435\u0433\u043e\u0432 \u043d\u0435\u0442<\/strong>, \u0441\u043d\u0438\u043c\u043e\u043a \u0432\u0435\u0442\u043a\u0438 <code>main<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0438: <code>google\/quiche<\/code> \u2014 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0435 \u0437\u0435\u0440\u043a\u0430\u043b\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f Google, \u0440\u0435\u043b\u0438\u0437\u043d\u044b\u0445 \u0442\u0435\u0433\u043e\u0432 \u0443 \u043d\u0435\u0433\u043e \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0415\u0441\u043b\u0438 \u0441\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0435 <code>main<\/code> \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0441\u044f\u0446, \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u0434. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b \u0442\u043e\u0447\u043d\u043e.<\/p>\n<h3>\u0427\u0442\u043e nginx \u043e\u0442\u0434\u0430\u0451\u0442<\/h3>\n<p>\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043e\u0442\u0432\u0435\u0442\u0430 \u0432 HTTP\/3 \u0436\u0438\u0432\u0451\u0442 \u0432 <code>ngx_http_v3_filter_module.c<\/code>. \u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u043b\u0435 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0442\u0440\u0451\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439: \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043b\u0438\u0442\u0435\u0440\u0430\u043b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043f\u043e\u043b\u043d\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b. \u0423 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>dynamic<\/code> \u2014 \u043e\u043d \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442, \u0438\u0437 \u043a\u0430\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441:<\/p>\n<pre><code class=\"cpp\">uintptr_tngx_http_v3_encode_field_ri(u_char *p, ngx_uint_t dynamic, ngx_uint_t index){    \/* Indexed Field Line *\/    if (p == NULL) {        return ngx_http_v3_encode_prefix_int(NULL, index, 6);    }    *p = dynamic ? 0x80 : 0xc0;    return ngx_http_v3_encode_prefix_int(p, index, 6);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>src\/http\/v3\/ngx_http_v3_encode.c:121\u2013133<\/code><\/p>\n<p>\u0411\u0438\u0442 <code>0x40<\/code> \u0437\u0434\u0435\u0441\u044c \u2014 \u044d\u0442\u043e \u0444\u043b\u0430\u0433 T \u0438\u0437 RFC 9204 (\u0443 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430 \u0441 \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0430 \u0438\u043c\u044f \u0442\u043e\u0442 \u0436\u0435 \u0444\u043b\u0430\u0433 \u0436\u0438\u0432\u0451\u0442 \u0432 <code>0x10<\/code>, <code>ngx_http_v3_encode.c:151<\/code>): \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043d\u043e\u043b\u044c \u2014 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e. <code>dynamic ? 0x80 : 0xc0<\/code> \u0440\u043e\u0432\u043d\u043e \u044d\u0442\u043e \u0438 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0441 \u043a\u0430\u043a\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <code>dynamic<\/code> \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0435\u043f\u043e\u043c \u2014 \u043f\u043e\u043a\u0430\u0436\u0443 \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u043d\u043e \u0433\u043b\u0430\u0437\u0430\u043c\u0438:<\/p>\n<pre><code class=\"bash\">git grep -n 'ngx_http_v3_encode_field_ri(\\|ngx_http_v3_encode_field_lri(' \\    release-1.31.3 -- src\/http\/v3\/ngx_http_v3_filter_module.c<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\u2026filter_module.c:153:        len += ngx_http_v3_encode_field_ri(NULL, 0,\u2026filter_module.c:157:        len += ngx_http_v3_encode_field_lri(NULL, 0,\u2026filter_module.c:175:        len += ngx_http_v3_encode_field_lri(NULL, 0,\u2026filter_module.c:181:        len += ngx_http_v3_encode_field_lri(NULL, 0, NGX_HTTP_V3_HEADER_DATE,\u2026filter_module.c:194:        len += ngx_http_v3_encode_field_lri(NULL, 0,\u2026filter_module.c:201:            len += ngx_http_v3_encode_field_lri(NULL, 0,\u2026filter_module.c:206:            len += ngx_http_v3_encode_field_ri(NULL, 0,\u2026filter_module.c:214:        len += ngx_http_v3_encode_field_lri(NULL, 0,\u2026filter_module.c:280:        len += ngx_http_v3_encode_field_lri(NULL, 0,\u2026filter_module.c:288:            len += ngx_http_v3_encode_field_ri(NULL, 0,\u2026filter_module.c:335:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_ri(b-&gt;last, 0,\u2026filter_module.c:339:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:362:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:372:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:408:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:425:            b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:433:            b-&gt;last = (u_char *) ngx_http_v3_encode_field_ri(b-&gt;last, 0,\u2026filter_module.c:453:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:463:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:474:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_ri(b-&gt;last, 0,\u2026filter_module.c:644:    len += ngx_http_v3_encode_field_ri(NULL, 0, NGX_HTTP_V3_HEADER_STATUS_103);\u2026filter_module.c:661:    b-&gt;last = (u_char *) ngx_http_v3_encode_field_ri(b-&gt;last, 0,<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>(\u043f\u0440\u0435\u0444\u0438\u043a\u0441 <code>release-1.31.3:src\/http\/v3\/<\/code> \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d, \u0447\u0442\u043e\u0431\u044b \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u043b\u0435\u0437\u043b\u0438 \u043f\u043e \u0448\u0438\u0440\u0438\u043d\u0435)<\/p>\n<p>\u0414\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0434\u0432\u0430 \u0432\u044b\u0437\u043e\u0432\u0430, \u0432\u0441\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u2014 \u043d\u043e\u043b\u044c. <strong>\u041d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443.<\/strong><\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0441\u0435\u043a\u0446\u0438\u0438 \u043f\u043e\u043b\u0435\u0439. \u041e\u043d \u0438\u0434\u0451\u0442 \u043f\u0435\u0440\u0435\u0434 \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0438 \u043d\u0435\u0441\u0451\u0442 \u0434\u0432\u0430 \u0447\u0438\u0441\u043b\u0430: <code>insert_count<\/code> (\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0435\u043a\u0446\u0438\u044e) \u0438 <code>delta_base<\/code>. \u0412\u044b\u0437\u043e\u0432\u043e\u0432 \u0448\u0435\u0441\u0442\u044c, \u0442\u0440\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u044b\u0445 \u0438 \u0442\u0440\u0438 \u043f\u0438\u0448\u0443\u0449\u0438\u0445:<\/p>\n<pre><code class=\"cpp\">    b-&gt;last = (u_char *) ngx_http_v3_encode_field_section_prefix(b-&gt;last,                                                                 0, 0, 0);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>src\/http\/v3\/ngx_http_v3_filter_module.c:327<\/code><\/p>\n<p>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u2014 <code>(u_char *p, ngx_uint_t insert_count, ngx_uint_t sign, ngx_uint_t delta_base)<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u0430 \u0447\u0438\u0441\u043b\u0430 \u0438 \u0437\u043d\u0430\u043a \u2014 \u043d\u0443\u043b\u0438. \u0418 \u0442\u0430\u043a \u0432\u043e \u0432\u0441\u0435\u0445 \u0448\u0435\u0441\u0442\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u0445, \u0430 \u0436\u0438\u0432\u0443\u0442 \u043e\u043d\u0438 \u0432 \u0442\u0440\u0451\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445: <code>ngx_http_v3_header_filter<\/code> (\u0441\u0442\u0440\u043e\u043a\u0430 85), <code>ngx_http_v3_early_hints_filter<\/code> (595) \u0438 <code>ngx_http_v3_create_trailers<\/code> (856). \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u0440\u0430\u043d\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438, \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u2014 <strong>\u043b\u044e\u0431\u0430\u044f \u0441\u0435\u043a\u0446\u0438\u044f \u043f\u043e\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e nginx \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442, \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442: \u0438\u0437 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044f \u043d\u0435 \u0432\u0437\u044f\u043b \u043d\u0438\u0447\u0435\u0433\u043e.<\/strong><\/p>\n<p>\u0415\u0441\u0442\u044c \u0438 \u0442\u0440\u0435\u0442\u044c\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e, \u0441\u0430\u043c\u043e\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435. \u0427\u0442\u043e\u0431\u044b \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430, \u043d\u0443\u0436\u0435\u043d encoder-\u043f\u043e\u0442\u043e\u043a \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0434\u043d\u043e\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 QUIC-\u043f\u043e\u0442\u043e\u043a \u0442\u0438\u043f\u0430 <code>0x02<\/code>, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0438\u0434\u0443\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0438. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u043e\u0434\u043d\u043e\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 nginx \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c:<\/p>\n<pre><code class=\"bash\">git grep -n 'get_uni_stream(' release-1.31.3 -- src\/ | grep -v '\\.h:'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>release-1.31.3:src\/http\/v3\/ngx_http_v3_request.c:142:        if (ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_DECODER) == NULL) {release-1.31.3:src\/http\/v3\/ngx_http_v3_uni.c:312:ngx_http_v3_get_uni_stream(ngx_connection_t *c, ngx_uint_t type)release-1.31.3:src\/http\/v3\/ngx_http_v3_uni.c:407:    cc = ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_CONTROL);release-1.31.3:src\/http\/v3\/ngx_http_v3_uni.c:462:    cc = ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_CONTROL);release-1.31.3:src\/http\/v3\/ngx_http_v3_uni.c:505:    dc = ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_DECODER);release-1.31.3:src\/http\/v3\/ngx_http_v3_uni.c:546:    dc = ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_DECODER);release-1.31.3:src\/http\/v3\/ngx_http_v3_uni.c:586:    dc = ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_DECODER);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0435\u043c\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439, \u0438\u0437 \u043d\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u0430 312 \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0448\u0435\u0441\u0442\u044c. \u0422\u043e\u043b\u044c\u043a\u043e <code>CONTROL<\/code> \u0438 <code>DECODER<\/code>. \u0412\u0435\u0442\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e encoder-\u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u2014 <code>index = NGX_HTTP_V3_STREAM_SERVER_ENCODER<\/code> \u0432 <code>ngx_http_v3_uni.c:323<\/code> \u2014 \u0438 \u0432 \u043d\u0435\u0451 \u043d\u0438\u043a\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0434 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c, \u0438 \u0435\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">    if (h3scf-&gt;max_table_capacity &gt; 0) {        if (ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_DECODER) == NULL) {<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>src\/http\/v3\/ngx_http_v3_request.c:141\u2013142<\/code><\/p>\n<p>\u0421\u0432\u043e\u0439 decoder-\u043f\u043e\u0442\u043e\u043a nginx \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u0430\u044f. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u00ab\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u00bb \u2014 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u0432 \u043a\u043e\u043d\u0446\u0435.<\/p>\n<p>\u042d\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u043f\u0440\u044f\u043c\u044b\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c, RFC 9204 \u00a74.2:<\/p>\n<blockquote>\n<p>An endpoint MAY avoid creating an encoder stream if it will not be used (for example, if its encoder does not wish to use the dynamic table or if the maximum size of the dynamic table permitted by the peer is zero).<\/p>\n<\/blockquote>\n<p>\u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0434\u0435\u0442\u0430\u043b\u044c, \u0441\u0430\u043c\u0430\u044f \u043a\u0440\u0430\u0441\u043d\u043e\u0440\u0435\u0447\u0438\u0432\u0430\u044f. \u0412 QPACK \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u0440\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u2014 Post-Base Index. \u041e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u0435\u043a\u0446\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0438 \u0430\u0434\u0440\u0435\u0441\u0443\u0435\u0442 <strong>\u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e<\/strong> \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443; \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0443 \u043d\u0435\u0451 \u043d\u0435\u0442 \u043f\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e. RFC 9204 \u00a74.5.3:<\/p>\n<blockquote>\n<p>An indexed field line with post-Base index representation identifies an entry in the dynamic table with an absolute index greater than or equal to the value of the Base.<\/p>\n<\/blockquote>\n<p>nginx \u0435\u0451 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b. \u041e\u0431\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, <code><em>pbi<\/em><\/code><em> \u0438 <\/em><code>lpbi<\/code>, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435:<\/p>\n<pre><code class=\"bash\">git grep -n 'encode_field_pbi\\|encode_field_lpbi' release-1.31.3<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\u2026\/ngx_http_v3_encode.c:247:ngx_http_v3_encode_field_pbi(u_char *p, ngx_uint_t index)\u2026\/ngx_http_v3_encode.c:262:ngx_http_v3_encode_field_lpbi(u_char *p, ngx_uint_t index, u_char *data,\u2026\/ngx_http_v3_encode.h:29:uintptr_t ngx_http_v3_encode_field_pbi(u_char *p, ngx_uint_t index);\u2026\/ngx_http_v3_encode.h:30:uintptr_t ngx_http_v3_encode_field_lpbi(u_char *p, ngx_uint_t index,<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>(\u043f\u0440\u0435\u0444\u0438\u043a\u0441 <code>release-1.31.3:src\/http\/v3<\/code> \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d)<\/p>\n<p>\u0427\u0435\u0442\u044b\u0440\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f: \u0434\u0432\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u0434\u0432\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f. <strong>\u0412\u044b\u0437\u043e\u0432\u043e\u0432 \u043d\u0435\u0442.<\/strong> \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u0443 \u043f\u0430\u0440\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435, \u2014 \u0442\u0435 \u0436\u0435 \u0434\u0432\u0430 \u0438 \u0434\u0432\u0430 \u043f\u043b\u044e\u0441 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0434\u0432\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0435.<\/p>\n<p>\u042d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0434\u0432\u0443\u0445 \u043d\u0443\u043b\u0435\u0439. \u041d\u043e\u043b\u044c \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u2014 \u0430 \u0442\u0443\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0435\u0433\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0438, \u0441\u0443\u0434\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443, \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f.<\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043f\u0440\u043e \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430. \u041e\u043d\u0430 \u043f\u0440\u043e \u0442\u043e, \u0447\u0442\u043e \u044d\u0442\u0438\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435.<\/p>\n<h3>\u0427\u0442\u043e nginx \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0442\u0440\u0435\u0447\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e nginx \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u2014 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0442\u043e\u0442 \u043c\u043e\u0436\u0435\u0442 \u0441\u0435\u0431\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">    p = (u_char *) ngx_http_v3_encode_varlen_int(p,                                         NGX_HTTP_V3_PARAM_MAX_TABLE_CAPACITY);    p = (u_char *) ngx_http_v3_encode_varlen_int(p, h3scf-&gt;max_table_capacity);    p = (u_char *) ngx_http_v3_encode_varlen_int(p,                                            NGX_HTTP_V3_PARAM_BLOCKED_STREAMS);    p = (u_char *) ngx_http_v3_encode_varlen_int(p, h3scf-&gt;max_blocked_streams);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>src\/http\/v3\/ngx_http_v3_uni.c:423\u2013428<\/code><\/p>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">#define NGX_HTTP_V3_MAX_TABLE_CAPACITY             4096<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>src\/http\/v3\/ngx_http_v3.h:46<\/code><\/p>\n<p>\u0427\u0435\u0442\u044b\u0440\u0435 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430. \u0421\u0435\u0440\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u043d\u0435 \u0437\u0430\u043f\u0438\u0448\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0438 \u0431\u0430\u0439\u0442\u0430, \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0435\u0451 \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430 \u2014 \u0438 \u043e\u0431\u044f\u0437\u0430\u043d \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0438 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0442\u044c.<\/p>\n<p>\u041e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u043d \u0432\u0441\u0435\u0440\u044c\u0451\u0437. \u0412 <code>ngx_http_v3_table.c<\/code> \u043b\u0435\u0436\u0438\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u0451\u043c\u043a\u043e\u0441\u0442\u0438, \u0443\u0447\u0451\u0442 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043b\u0438\u043c\u0438\u0442\u043e\u0432 \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u043d\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0435. \u0412\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">    while (dt-&gt;size &gt; target) {        field = dt-&gt;elts[n++];        size = ngx_http_v3_table_entry_size(&amp;field-&gt;name, &amp;field-&gt;value);        ngx_log_debug4(NGX_LOG_DEBUG_HTTP, c-&gt;log, 0,                       \"http3 evict [%ui] \\\"%V\\\":\\\"%V\\\" size:%uz\",                       dt-&gt;base, &amp;field-&gt;name, &amp;field-&gt;value, size);        ngx_free(field);        dt-&gt;size -= size;    }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>src\/http\/v3\/ngx_http_v3_table.c:389\u2013399<\/code><\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430 \u0436\u0435 \u0430\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u044f \u043e\u0434\u043d\u0438\u043c \u0432\u0437\u0433\u043b\u044f\u0434\u043e\u043c:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8f1\/668\/0d1\/8f16680d1daecc7175f68d8fbb78e450.png\" alt=\"\u0417\u0430\u043c\u0435\u0440 \u0441\u0442\u0435\u043d\u0434\u0430: \u043e\u0442\u0432\u0435\u0442 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f 131 \u0431\u0430\u0439\u0442 \u0432\u0441\u0435\u0433\u0434\u0430, \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 246 \u0434\u043e 8\" width=\"1560\" height=\"980\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/8f1\/668\/0d1\/8f16680d1daecc7175f68d8fbb78e450.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8f1\/668\/0d1\/8f16680d1daecc7175f68d8fbb78e450.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0417\u0430\u043c\u0435\u0440 \u0441\u0442\u0435\u043d\u0434\u0430: \u043e\u0442\u0432\u0435\u0442 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f 131 \u0431\u0430\u0439\u0442 \u0432\u0441\u0435\u0433\u0434\u0430, \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 246 \u0434\u043e 8<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043d\u0430 \u0436\u0438\u0432\u043e\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438, \u0447\u0442\u043e \u043f\u0440\u0438\u0451\u043c\u043d\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u043b\u043e\u0433 nginx \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u0435, \u0447\u0442\u043e \u0434\u0430\u043b \u0446\u0438\u0444\u0440\u044b \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<pre><code>http3 set capacity 4096http3 insert [0] \":authority\":\"localhost:8443\", size:56http3 insert [1] \":path\":\"\/probe.txt\", size:47http3 insert [2] \"authorization\":\"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.AAAA\u2026\", size:289http3 insert [3] \"x-request-id\":\"fixed-value-for-repeat-test\", size:71<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0435\u0442\u044b\u0440\u0435 \u0432\u0441\u0442\u0430\u0432\u043a\u0438, \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0432\u0438\u0434\u0430 <code>http3 dynamic[N] lookup<\/code> \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0441\u0451, \u0447\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f, \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u043b\u0430\u043b \u043d\u043e\u043c\u0435\u0440\u0430. \u041e\u0442\u0441\u044e\u0434\u0430 \u0438 \u0432\u043e\u0441\u0435\u043c\u044c \u0431\u0430\u0439\u0442.<\/p>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <code>aioquic<\/code>, \u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0443 \u043d\u0435\u0433\u043e \u2014 <code>pylsqpack<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u043a <code>ls-qpack<\/code>. \u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u044d\u0442\u043e, \u043a \u043d\u0435\u043c\u0443 \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f.<\/p>\n<h3>\u0412 HTTP\/2 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0434\u0440\u0443\u0433\u0438\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c<\/h3>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c HTTP\/2 \u044f \u043f\u043e\u0448\u0451\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u0430\u0437\u0443 \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f: \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0436\u0435, \u0447\u0442\u043e HPACK \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u043e\u0442\u0432\u0435\u0442\u044b \u0436\u043c\u0451\u0442, \u0430 QPACK \u0440\u0430\u0437\u0443\u0447\u0438\u043b\u0441\u044f. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.<\/p>\n<p>\u041e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441. \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043e \u0441\u043b\u043e\u0432\u043e\u043c <code>hpack<\/code> \u0432 \u0434\u0432\u0443\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u2014 \u0432 \u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0432\u0435\u0442, \u0438 \u0432 \u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"bash\">git show release-1.31.3:src\/http\/v2\/ngx_http_v2_filter_module.c | grep -c hpack  # \u043e\u0442\u0434\u0430\u0447\u0430git show release-1.31.3:src\/http\/v2\/ngx_http_v2_table.c | grep -c hpack          # \u043f\u0440\u0438\u0451\u043c<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>062<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u043e\u043b\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u0448\u0435\u0441\u0442\u0438\u0434\u0435\u0441\u044f\u0442\u0438 \u0434\u0432\u0443\u0445. \u041d\u0438 <code>ngx_http_v2_hpack_t<\/code>, \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043d\u0435\u0439 \u0432 \u043c\u043e\u0434\u0443\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442, \u043d\u0435\u0442: \u0441\u0432\u043e\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0443 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0412\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0430\u0434\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<p>\u042d\u0442\u043e, \u043f\u0440\u0430\u0432\u0434\u0430, \u043f\u0440\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0430 \u043d\u0435 \u043f\u0440\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u2014 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u043e\u0442\u0434\u0430\u0447\u0438 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u0438\u0448\u0435\u0442 \u0432 HPACK, \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0430\u0431\u0437\u0430\u0446.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043e\u0442\u0432\u0435\u0442\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u0432\u0435 \u0432\u0435\u0449\u0438. \u041f\u0435\u0440\u0432\u0430\u044f \u2014 \u044f\u0432\u043d\u043e \u0435\u0451 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442. \u041a\u043e\u0433\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442 <code>SETTINGS_HEADER_TABLE_SIZE<\/code>, \u0432\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0444\u043b\u0430\u0433:<\/p>\n<pre><code class=\"cpp\">        case NGX_HTTP_V2_HEADER_TABLE_SIZE_SETTING:            h2c-&gt;table_update = 1;            break;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>src\/http\/v2\/ngx_http_v2.c:2261\u20132264<\/code><\/p>\n<p>\u0410 \u043d\u0430 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u043c HEADERS-\u0444\u0440\u0435\u0439\u043c\u0435 \u0444\u043b\u0430\u0433 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442:<\/p>\n<pre><code class=\"cpp\">    if (h2c-&gt;table_update) {        ngx_log_debug0(NGX_LOG_DEBUG_HTTP, fc-&gt;log, 0,                       \"http2 table size update: 0\");        *pos++ = (1 &lt;&lt; 5) | 0;        h2c-&gt;table_update = 0;    }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>src\/http\/v2\/ngx_http_v2_filter_module.c:425\u2013430<\/code><\/p>\n<p><code>(1 &lt;&lt; 5) | 0<\/code> \u2014 \u044d\u0442\u043e Dynamic Table Size Update \u0438\u0437 RFC 7541 \u0441 \u043d\u043e\u0432\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c <strong>\u043d\u043e\u043b\u044c<\/strong>. \u041a\u043b\u0438\u0435\u043d\u0442 \u0441\u043a\u0430\u0437\u0430\u043b \u00ab\u044f \u0433\u043e\u0442\u043e\u0432 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u0432\u043e\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443\u00bb, nginx \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u00ab\u043c\u043e\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043d\u0443\u043b\u0435\u0432\u0430\u044f\u00bb. \u0422\u043e\u0442 \u0436\u0435 \u0431\u043b\u043e\u043a \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0435 \u0440\u0430\u043d\u043d\u0438\u0445 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a (<code>:740\u2013745<\/code>, \u0432\u043d\u0443\u0442\u0440\u0438 <code>ngx_http_v2_early_hints_filter<\/code>), \u0442\u0430\u043a \u0447\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0443\u0439\u0434\u0451\u0442 \u0438 \u0441 <code>103 Early Hints<\/code>. \u0412 \u043a\u0430\u0434\u0440\u0435 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043e\u0432 \u0435\u0451 \u043d\u0435\u0442 \u2014 \u043d\u043e \u0442\u0443\u0434\u0430 \u043e\u043d\u0430 \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430: \u0444\u043b\u0430\u0433 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u0436\u0435 \u0431\u043b\u043e\u043a\u043e\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432, \u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043d\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u0440\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0434\u0443\u043b\u044c \u043e\u0442\u0434\u0430\u0447\u0438 \u0432\u044b\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442. \u0415\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f, \u0441 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u043c \u0437\u043d\u0430\u043a\u043e\u043c:<\/p>\n<pre><code class=\"bash\">git grep -n 'ngx_http_v2_inc_indexed(' release-1.31.3 \\    -- src\/http\/v2\/ngx_http_v2_filter_module.c<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\u2026filter_module.c:440:        *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_STATUS_INDEX);\u2026filter_module.c:462:        *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_SERVER_INDEX);\u2026filter_module.c:493:        *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_DATE_INDEX);\u2026filter_module.c:499:        *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_CONTENT_TYPE_INDEX);\u2026filter_module.c:541:        *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_CONTENT_LENGTH_INDEX);\u2026filter_module.c:551:        *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_LAST_MODIFIED_INDEX);\u2026filter_module.c:572:        *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_LOCATION_INDEX);\u2026filter_module.c:582:        *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_VARY_INDEX);\u2026filter_module.c:751:    *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_STATUS_INDEX);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0435\u0432\u044f\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0438 \u044d\u0442\u043e <code>:status<\/code>, <code>server<\/code>, <code>date<\/code>, <code>content-type<\/code>, <code>content-length<\/code>, <code>last-modified<\/code>, <code>location<\/code>, <code>vary<\/code> \u2014 \u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0441\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442. \u0410 \u043c\u0430\u043a\u0440\u043e\u0441 \u2014 \u0432\u043e\u0442:<\/p>\n<pre><code class=\"cpp\">#define ngx_http_v2_inc_indexed(i)  (64 + (i))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>src\/http\/v2\/ngx_http_v2.h:372<\/code><\/p>\n<p><code>64 + i<\/code> \u2014 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 <code>01<\/code>, Literal Header Field <strong>with Incremental Indexing<\/strong>. RFC 7541 \u00a76.2.1 \u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u043d\u043e\u0447\u0442\u0435\u043d\u0438\u0439:<\/p>\n<blockquote>\n<p>A literal header field with incremental indexing representation results in appending a header field to the decoded header list and inserting it as a new entry into the dynamic table.<\/p>\n<\/blockquote>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c nginx \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439. \u041e\u043d <strong>\u0432\u0435\u043b\u0438\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0435\u0451<\/strong> \u2014 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0430\u043c \u043d\u0435 \u0441\u043e\u0448\u043b\u0451\u0442\u0441\u044f \u043d\u0438 \u0440\u0430\u0437\u0443. \u0414\u0435\u0432\u044f\u0442\u044c \u2014 \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u0430 \u0432 \u043a\u043e\u0434\u0435, \u0430 \u043d\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0435: \u0432\u043e\u0441\u0435\u043c\u044c \u0432\u0435\u0442\u0432\u0435\u0439 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043d\u0435 \u0432\u0441\u0435 \u0441\u0440\u0430\u0437\u0443 (<code>location<\/code> \u0438 <code>vary<\/code> \u2014 \u043f\u043e \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u043c, <code>content-length<\/code> \u0438 <code>last-modified<\/code> \u0442\u043e\u0436\u0435), \u0434\u0435\u0432\u044f\u0442\u0430\u044f \u0436\u0438\u0432\u0451\u0442 \u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0435 \u0440\u0430\u043d\u043d\u0438\u0445 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a. \u0412 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0435 \u0442\u0430\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u044f\u0442\u044c-\u0448\u0435\u0441\u0442\u044c.<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0437\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u0442 \u043e\u0434\u043d\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0439 Size Update = 0. \u041e\u043d \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u044c, \u043e\u043d \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u044f\u0434\u0438\u0435:<\/p>\n<ul>\n<li>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438\u0441\u043b\u0430\u043b <code>SETTINGS_HEADER_TABLE_SIZE<\/code> \u2014 \u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0435\u0433\u043e \u0448\u043b\u044e\u0442. nginx \u043f\u0435\u0440\u0432\u044b\u043c \u0431\u0430\u0439\u0442\u043e\u043c \u0431\u043b\u043e\u043a\u0430 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u043d\u043e\u043b\u044c, \u0438 \u0432\u0441\u0435 \u0434\u0435\u0432\u044f\u0442\u044c \u043c\u0435\u0441\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f no-op: \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435\u043a\u0443\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u043f\u0440\u0438\u0441\u043b\u0430\u043b \u2014 \u043a\u0430\u043a curl \u0441 nghttp2, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434. \u0422\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u043c, \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043b\u043e\u0436\u0430\u0442\u0441\u044f \u0432 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041b\u0435\u0436\u0430\u0442 \u0434\u043e \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f. \u0421\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u043d\u0438\u0445 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0432\u0435\u0449\u044c \u2014 \u0432\u0441\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u0438\u0434\u0443\u0442 \u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u043a\u0443. \u0421\u0435\u043c\u044c \u0432\u044b\u0437\u043e\u0432\u043e\u0432 <code>ngx_http_v2_indexed()<\/code>, \u0438 \u0432\u0441\u0435 \u0441\u0435\u043c\u044c \u2014 \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u044b 8\u201314:<\/p>\n<pre><code class=\"cpp\">#define NGX_HTTP_V2_STATUS_INDEX          8#define NGX_HTTP_V2_STATUS_200_INDEX      8#define NGX_HTTP_V2_STATUS_204_INDEX      9#define NGX_HTTP_V2_STATUS_206_INDEX      10#define NGX_HTTP_V2_STATUS_304_INDEX      11#define NGX_HTTP_V2_STATUS_400_INDEX      12#define NGX_HTTP_V2_STATUS_404_INDEX      13#define NGX_HTTP_V2_STATUS_500_INDEX      14<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>src\/http\/v2\/ngx_http_v2.h:394\u2013401<\/code><\/p>\n<p>\u042d\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b HPACK \u043f\u043e\u0434 <code>:status<\/code>. \u041d\u0438 \u043e\u0434\u043d\u043e\u0439 <strong>\u0441\u0441\u044b\u043b\u043a\u0438<\/strong> \u043d\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u043e \u0432\u0441\u0451\u043c \u043c\u043e\u0434\u0443\u043b\u0435 \u043d\u0435\u0442 \u2014 \u0447\u0442\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u0448\u0430\u0435\u0442 \u0435\u043c\u0443 \u0434\u0435\u0432\u044f\u0442\u044c \u0440\u0430\u0437 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435.<\/p>\n<p>\u0418\u0442\u043e\u0433\u043e: \u0434\u0432\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b, \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\n<\/th>\n<th>\n<p align=\"left\">HTTP\/2<\/p>\n<\/th>\n<th>\n<p align=\"left\">HTTP\/3<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u043f\u0440\u0438\u0451\u043c \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u043e\u043b\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 HPACK<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u043e\u043b\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 QPACK: \u0432\u0441\u0442\u0430\u0432\u043a\u0430, \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435, \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u043e\u0442\u0434\u0430\u0447\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043d\u043e\u043b\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, encoder-\u043f\u043e\u0442\u043e\u043a \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u043e\u0442\u0432\u0435\u0442\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">size update = 0 (\u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438\u0441\u043b\u0430\u043b SETTINGS), \u043f\u043b\u044e\u0441 \u0432\u0441\u0442\u0430\u0432\u043a\u0438; \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041e\u0434\u043d\u0430 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430 \u043f\u043e \u0437\u0430\u043c\u0435\u0440\u0430\u043c. \u0412 \u043c\u043e\u0451\u043c \u043f\u0440\u043e\u0433\u043e\u043d\u0435 \u0441\u0442\u0440\u043e\u043a\u0430 <code>http2 table size update: 0<\/code> <strong>\u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0438 \u0440\u0430\u0437\u0443<\/strong>: \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438\u0441\u043b\u0430\u043b <code>SETTINGS_HEADER_TABLE_SIZE<\/code>, \u0430 curl \u0441 nghttp2 \u0435\u0433\u043e \u043d\u0435 \u0448\u043b\u0451\u0442. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432 \u043a\u043e\u0434\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0439, \u043d\u043e \u043d\u0430 \u0441\u0442\u0435\u043d\u0434\u0435 \u043e\u043d \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u2014 \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u043e \u043a\u043e\u0434\u043e\u043c, \u0430 \u043d\u0435 \u0437\u0430\u043c\u0435\u0440\u043e\u043c. \u0411\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u044d\u0442\u043e\u0442 SETTINGS \u0448\u043b\u044e\u0442, \u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u044f \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b.<\/p>\n<p>\u0418 \u0435\u0449\u0451 \u0446\u0438\u0444\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e: \u043e\u0442\u0432\u0435\u0442 \u043f\u043e HTTP\/3 \u0437\u0430\u043d\u044f\u043b 131 \u0431\u0430\u0439\u0442 \u043f\u0440\u043e\u0442\u0438\u0432 129 \u043f\u043e HTTP\/2. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u2014 \u0440\u043e\u0432\u043d\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0441\u0435\u043a\u0446\u0438\u0438 \u043f\u043e\u043b\u0435\u0439 QPACK, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 HPACK \u043d\u0435\u0442. \u0421\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043d\u043e\u0435, \u0438 \u0432\u0441\u0451 \u0436\u0435 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0437\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0447\u0438\u0441\u043b\u0430 \u0441\u043d\u044f\u0442\u044b \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u043e\u0447\u043a\u0430\u0445: HTTP\/2 \u2014 \u0438\u0437 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u043b\u043e\u0433\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, HTTP\/3 \u2014 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435, \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u0434\u043b\u0438\u043d\u044b HEADERS-\u0444\u0440\u0435\u0439\u043c\u0430. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0443 HPACK \u0438 QPACK \u0440\u0430\u0437\u043d\u044b\u0435 (61 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u043e\u0442\u0438\u0432 99), \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0440\u0430\u0437\u043d\u044b\u0435, \u0438 \u043f\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u043e \u044f \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u0432\u0437\u0430\u0438\u043c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c. \u0421\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435\u043c.<\/p>\n<h3>\u041a\u0442\u043e \u0435\u0449\u0451 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0435\u0442<\/h3>\n<p>\u041f\u044f\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 QPACK, \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0434\u0438\u043d: \u043f\u0438\u0448\u0435\u0442 \u043b\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443.<\/p>\n<p><strong>quic-go<\/strong> \u2014 \u043d\u0435\u0442, \u0438 \u044d\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 README \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0440\u044f\u043c\u044b\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c:<\/p>\n<blockquote>\n<p>However, it does not support the dynamic table and relies solely on the static table and string literals (including Huffman encoding), which limits compression efficiency.<\/p>\n<\/blockquote>\n<p>\u0412 \u043f\u0430\u043a\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0442 \u0444\u0430\u0439\u043b\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b: \u0435\u0441\u0442\u044c <code>static_table.go<\/code>, \u043f\u0430\u0440\u043d\u043e\u0433\u043e \u043d\u0435\u0442. \u0412\u0435\u0441\u044c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u2014 95 \u0441\u0442\u0440\u043e\u043a, \u0438 \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 <code>WriteField()<\/code>, \u2014 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u043d\u0443\u043b\u044f:<\/p>\n<pre><code class=\"go\">func (e *Encoder) WriteField(f HeaderField) error {\/\/ write the Header Block Prefixif !e.wrotePrefix {e.buf = appendVarInt(e.buf, 8, 0)e.buf = appendVarInt(e.buf, 7, 0)e.wrotePrefix = true}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>encoder.go:26\u201332<\/code>, \u0442\u0435\u0433 <code>v0.6.0<\/code><\/p>\n<p>\u0417\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043e: \u0442\u043e\u0442 \u0436\u0435 README \u043f\u0435\u0440\u0432\u043e\u0439 \u0444\u0440\u0430\u0437\u043e\u0439 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0425\u0430\u0444\u0444\u043c\u0430\u043d\u0430 \u0432\u0437\u044f\u0442\u044b \u0438\u0437 HPACK-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Go, \u0438 \u0432 \u0448\u0430\u043f\u043a\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0441\u0442\u043e\u0438\u0442 <code>\"golang.org\/x\/net\/http2\/hpack\"<\/code>. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u0430\u0437\u0430\u0432\u0448\u0430\u044f\u0441\u044f \u043e\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b QPACK, \u043a\u043e\u0434\u043e\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0443 HPACK \u0432\u0441\u0451 \u0436\u0435 \u0431\u0435\u0440\u0451\u0442.<\/p>\n<p><strong>Cloudflare quiche<\/strong> \u2014 \u043d\u0435\u0442. \u041a\u0430\u0442\u0430\u043b\u043e\u0433 <code>h3\/qpack\/<\/code> \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0444\u0430\u0439\u043b\u043e\u0432: <a href=\"http:\/\/decoder.rs\" rel=\"noopener noreferrer nofollow\"><code>decoder.rs<\/code><\/a>, <a href=\"http:\/\/encoder.rs\" rel=\"noopener noreferrer nofollow\"><code>encoder.rs<\/code><\/a>, <a href=\"http:\/\/mod.rs\" rel=\"noopener noreferrer nofollow\"><code>mod.rs<\/code><\/a>, <code>static_<\/code><a href=\"http:\/\/table.rs\" rel=\"noopener noreferrer nofollow\"><code>table.rs<\/code><\/a>. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u043d\u0435\u0442, \u0430 <a href=\"http:\/\/encoder.rs\" rel=\"noopener noreferrer nofollow\"><code>encoder.rs<\/code><\/a> \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 235 \u0441\u0442\u0440\u043e\u043a, \u0438 \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 <code>encode()<\/code>, \u2014 \u0432\u043e\u0442 \u044d\u0442\u043e:<\/p>\n<pre><code class=\"rust\">        \/\/ Required Insert Count.        encode_int(0, 0, 8, &amp;mut b)?;        \/\/ Base.        encode_int(0, 0, 7, &amp;mut b)?;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>quiche\/src\/h3\/qpack\/encoder.rs:51\u201355<\/code>, \u0442\u0435\u0433 <code>0.29.3<\/code><\/p>\n<p>\u0422\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430, \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u0451\u043c: \u0434\u0432\u0430 \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043d\u0443\u043b\u044f \u0432 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435 \u0441\u0435\u043a\u0446\u0438\u0438. \u0423 nginx \u044d\u0442\u043e <code>ngx_http_v3_encode_field_section_prefix(b-&gt;last, 0, 0, 0)<\/code>, \u0443 quiche \u2014 <code>encode_int(0, 0, ...)<\/code>, \u0443 quic-go \u2014 <code>appendVarInt(e.buf, 8, 0)<\/code>.<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u0435, \u043a\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0432\u0435\u0434\u0451\u0442.<\/p>\n<p><strong>ls-qpack<\/strong> \u043e\u0442 LiteSpeed \u2014 \u0434\u0430. \u0412 \u043d\u0451\u043c \u0435\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0438, <code>lsqpack_enc_push_entry<\/code> (<code>lsqpack.c:1040<\/code>), \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u0430 \u0438\u0437 \u043f\u0443\u0442\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u0441\u0442\u0440\u043e\u043a\u0438 1604 \u0438 2127. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0448\u0442\u0430\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c, \u0432\u0438\u0434\u043d\u043e \u043f\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. <code>lsqpack_enc_preinit<\/code> \u2014 \u043d\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u043c\u0443 \u043f\u0443\u0442\u0438, \u0430 \u0435\u0433\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0430\u0434\u0438\u044f: \u043e\u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043b\u044f \u043e\u043a\u043d\u0430, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u0438 SETTINGS \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u043d\u0435\u043b\u044c\u0437\u044f. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0442\u0443\u0442 \u0436\u0435 \u0432\u0435\u043b\u0438\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c <code>lsqpack_enc_init<\/code>, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0438 \u043f\u0440\u0438\u0434\u0443\u0442, \u0430 \u0444\u043b\u0430\u0433 <code>LSQPACK_ENC_OPT_STAGE_2<\/code> (<code>:76<\/code>) \u043f\u0440\u044f\u043c\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u00ab\u044d\u043d\u043a\u043e\u0434\u0435\u0440 \u0431\u044b\u043b \u043f\u0440\u0435-\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d, \u0447\u0430\u0441\u0442\u044c \u0448\u0430\u0433\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u00bb. \u0420\u0430\u0431\u043e\u0442\u0430 \u0431\u0435\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0437\u0434\u0435\u0441\u044c \u2014 \u043d\u0435 \u0440\u0435\u0436\u0438\u043c, \u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430.<\/p>\n<pre><code class=\"cpp\">\/** * Initialize the encoder so that it can be used without using the * dynamic table.  Once peer's settings are known, call * @ref lsqpack_enc_init(). * * `logger_ctx' can be set to NULL if no special logging is set up. *\/voidlsqpack_enc_preinit (struct lsqpack_enc *, void *logger_ctx);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>lsqpack.h:108\u2013116<\/code>, \u0442\u0435\u0433 <code>v2.7.0<\/code><\/p>\n<p>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0442\u043e, \u043a\u0430\u043a\u0438\u0435 \u0440\u044f\u0434\u043e\u043c \u043b\u0435\u0436\u0430\u0442 \u0444\u043b\u0430\u0433\u0438. <code>LSQPACK_ENC_OPT_NO_DUP<\/code> \u0438 <code>LSQPACK_ENC_OPT_IX_AGGR<\/code> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043d\u0435 \u0447\u0442\u043e\u0431\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c, \u0430 \u0447\u0442\u043e\u0431\u044b \u0435\u0451 <strong>\u043f\u043e\u0440\u0442\u0438\u0442\u044c<\/strong> \u2014 \u0438 \u043e\u0431\u0430 \u0441\u0442\u043e\u044f\u0442 \u043f\u043e\u0434 \u043e\u0434\u043d\u0438\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0438\u0445 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u043c\u0438:<\/p>\n<pre><code class=\"cpp\">    \/* The options below are advanced.  The author only uses them for debugging     * or testing.     *\/<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>lsqpack.h:78\u201380<\/code><\/p>\n<p>\u0423 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043f\u0438\u0441\u043a\u0430 \u00ab\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 dup-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442 \u0441\u0436\u0430\u0442\u0438\u0435\u00bb, \u0443 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u2014 \u00ab\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442 \u0441\u0436\u0430\u0442\u0438\u0435\u00bb. \u0422\u043e \u0435\u0441\u0442\u044c \u0432 ls-qpack \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043d\u0435 \u043e\u043f\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442, \u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u043e\u043c\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0442\u043b\u0430\u0434\u043a\u0443.<\/p>\n<p><strong>Google QUICHE<\/strong> \u2014 \u0434\u0430, \u0438 \u0441 \u0440\u0430\u0437\u043c\u0430\u0445\u043e\u043c. \u0412 <code>qpack_<\/code><a href=\"http:\/\/encoder.cc\" rel=\"noopener noreferrer nofollow\"><code>encoder.cc<\/code><\/a> \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u043f\u043b\u044e\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0432\u0438\u0434\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439:<\/p>\n<pre><code class=\"cpp\">              uint64_t new_index = header_table_.InsertEntry(name, value);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>quiche\/quic\/core\/qpack\/qpack_encoder.cc:168<\/code> (\u0430 \u0442\u0430\u043a\u0436\u0435 <code>:211<\/code>, <code>:244<\/code>, <code>:284<\/code>)<\/p>\n<p>\u0420\u044f\u0434\u043e\u043c \u2014 <code>SendInsertWithNameReference<\/code>, <code>SendInsertWithoutNameReference<\/code>, <code>SendDuplicate<\/code> \u0438 <code>SendSetDynamicTableCapacity<\/code>. \u042d\u0442\u043e \u043a\u043e\u0434 Chromium, \u043e\u043d \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 Envoy.<\/p>\n<p>\u0420\u0430\u0441\u043a\u043b\u0430\u0434:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u044f\u0437\u044b\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u043f\u0438\u0448\u0435\u0442 \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">nginx<\/p>\n<\/td>\n<td>\n<p align=\"left\">C<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u043d\u0435\u0442<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">quic-go<\/p>\n<\/td>\n<td>\n<p align=\"left\">Go<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u043d\u0435\u0442<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Cloudflare quiche<\/p>\n<\/td>\n<td>\n<p align=\"left\">Rust<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u043d\u0435\u0442<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ls-qpack (LiteSpeed)<\/p>\n<\/td>\n<td>\n<p align=\"left\">C<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0434\u0430<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Google QUICHE (Chromium, Envoy)<\/p>\n<\/td>\n<td>\n<p align=\"left\">C++<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0434\u0430<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/25a\/db4\/2ff\/25adb42ff05ed82f98ec8df2bfd24dfb.png\" alt=\"\u0420\u0430\u0441\u043a\u043b\u0430\u0434 \u043f\u043e \u043f\u044f\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c: \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043d\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438 \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u043c\u0438\" width=\"1560\" height=\"1040\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/25a\/db4\/2ff\/25adb42ff05ed82f98ec8df2bfd24dfb.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/25a\/db4\/2ff\/25adb42ff05ed82f98ec8df2bfd24dfb.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0430\u0441\u043a\u043b\u0430\u0434 \u043f\u043e \u043f\u044f\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c: \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043d\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438 \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u043c\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0432\u043e\u0434 \u00ab\u0441\u0435\u0440\u0432\u0435\u0440\u044b \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c, \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438\u00bb \u2014 \u0438 \u043e\u043d \u043d\u0435 \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. Google QUICHE \u0441\u0442\u043e\u0438\u0442 \u0438 \u0432 Envoy, \u0430 \u044d\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e \u0432\u0435\u0431\u0430 \u0440\u043e\u0432\u043d\u043e \u0432 \u0442\u043e\u043c \u0436\u0435 \u0441\u043c\u044b\u0441\u043b\u0435, \u0447\u0442\u043e nginx \u0438\u043b\u0438 Cloudflare.<\/p>\n<p>\u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043d\u0435 \u0442\u0430\u043c. \u041f\u043e\u0445\u043e\u0436\u0435, \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0434\u043b\u044f \u043a\u043e\u0433\u043e \u043f\u0438\u0441\u0430\u043b\u0441\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a: Google QUICHE \u0441\u0442\u043e\u0438\u0442 \u0432 Chromium \u0438 Envoy, ls-qpack \u2014 \u0432 LiteSpeed \u0438 \u0432 <code>aioquic<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u0435 \u043f\u043e\u043b\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0442 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 <strong>\u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0443\u044e<\/strong> \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u0410 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043e\u043a\u0443\u043f\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u2014 \u0443 \u043d\u0435\u0433\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u0447\u0442\u043e \u0438 \u0432\u0438\u0434\u043d\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0437\u0430\u043c\u0435\u0440\u0430.<\/p>\n<p>\u041d\u043e \u0438 \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u043a\u043e\u043d, \u0438 \u043a\u043e\u043d\u0442\u0440\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0442\u043e\u0438\u0442 \u0432 \u043c\u043e\u0435\u0439 \u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u0435\u0440\u0441\u0438\u0439: <code>quic-go\/qpack<\/code> \u2014 \u0442\u043e\u0436\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0435\u0451 \u0442\u044f\u043d\u0435\u0442 \u0432\u0441\u0451, \u0447\u0442\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043d\u0430 quic-go, \u0432\u043a\u043b\u044e\u0447\u0430\u044f Caddy, \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0442\u0430\u043c \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435. \u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u043d\u0435\u0439 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435\u0442. \u0422\u0430\u043a \u0447\u0442\u043e \u0447\u0435\u0441\u0442\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0430 \u0442\u0430\u043a\u0430\u044f: \u043f\u043e\u043b\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u0438\u0441\u0430\u043b\u0438 \u043f\u043e\u0434 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u2014 \u043d\u043e \u0442\u0440\u0438 \u0438\u0437 \u043f\u044f\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u0438\u043c \u0445\u0432\u0430\u0442\u0438\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439, \u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0442\u0440\u0451\u0445 \u0442\u043e\u0436\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.<\/p>\n<p>\u042d\u0442\u043e, \u043a\u0441\u0442\u0430\u0442\u0438, \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0446\u0438\u0444\u0440\u044b \u0441\u043e \u0441\u0442\u0435\u043d\u0434\u0430. \u041a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0442\u0430\u043c \u0431\u044b\u043b <code>aioquic<\/code> \u043f\u043e\u0432\u0435\u0440\u0445 <code>ls-qpack<\/code> \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0432 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0443\u043c\u0435\u0435\u0442 \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u041e\u0442\u0441\u044e\u0434\u0430 \u0438 246 \u2192 8. \u041f\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430 quic-go \u2014 \u0438 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0432\u0441\u0435, \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0430\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b.<\/p>\n<h3>\u0426\u0435\u043d\u0430 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b<\/h3>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043f\u0438\u0448\u0435\u0442 \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u041d\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0435\u0451 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043e\u0431\u044f\u0437\u0430\u043d, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0430\u043c \u0436\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u043b \u0451\u043c\u043a\u043e\u0441\u0442\u044c 4096. \u0417\u043d\u0430\u0447\u0438\u0442, \u0432 \u043d\u0451\u043c \u0436\u0438\u0432\u0451\u0442 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0430\u0440\u0441\u0438\u0442 insert-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0434 \u043d\u0438\u0445 \u0431\u0443\u0444\u0435\u0440, \u0432\u0435\u0434\u0451\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0435\u0442 \u0438\u0437 \u043d\u0435\u0451 \u0437\u0430\u043f\u0438\u0441\u0438. \u041a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u044b \u2014 \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430\u0440\u0443\u0436\u0443.<\/p>\n<p>17 \u0438\u044e\u043d\u044f 2026 \u0433\u043e\u0434\u0430 F5 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0430 <a href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2026-42530\" rel=\"noopener noreferrer nofollow\">CVE-2026-42530<\/a>: use-after-free \u0432 <code>ngx_http_v3_module<\/code>, CVSS 4.0 <strong>9.2 CRITICAL<\/strong>, CWE-416. \u0422\u0430 \u0436\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0434\u0430\u0451\u0442 8.1 HIGH \u043f\u043e CVSS 3.1 \u2014 \u043e\u0431\u0435 \u043e\u0446\u0435\u043d\u043a\u0438 \u043e\u0442 F5 \u043a\u0430\u043a CNA, Red Hat \u0432 \u0440\u043e\u043b\u0438 ADP \u0441\u0432\u043e\u0438 8.1 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0438 NIST \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u0435 \u0446\u0438\u0444\u0440\u044b.<\/p>\n<p>\u0427\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0437\u0430 \u0434\u0435\u0432\u044f\u0442\u043a\u043e\u0439, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 NVD \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043f\u0440\u044f\u043c\u043e: \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0430 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c ASLR \u2014 \u0438\u043b\u0438 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0439 \u0443\u043c\u0435\u0435\u0442 \u0435\u0433\u043e \u043e\u0431\u043e\u0439\u0442\u0438, \u2014 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430. \u041f\u043e \u0434\u0430\u043d\u043d\u044b\u043c NVD \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b \u0432\u0435\u0440\u0441\u0438\u0438 1.31.0 \u2264 v &lt; 1.31.2. \u0424\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430:<\/p>\n<blockquote>\n<p>a remote unauthenticated attacker along with conditions beyond their control can use a specially crafted HTTP\/3 session to reopen a QPACK encoder stream<\/p>\n<\/blockquote>\n<p>\u041f\u0435\u0440\u0435\u043e\u0442\u043a\u0440\u044b\u0442\u044c encoder-\u043f\u043e\u0442\u043e\u043a. \u0422\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0442\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u0440\u0430\u0434\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c nginx \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p>\u041a\u0440\u0443\u0433 \u0437\u0430\u043c\u044b\u043a\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u00a74.2 RFC 9204, \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 encoder-\u043f\u043e\u0442\u043e\u043a. \u0414\u0432\u0443\u043c\u044f \u0430\u0431\u0437\u0430\u0446\u0430\u043c\u0438 \u0432\u044b\u0448\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043e\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b:<\/p>\n<blockquote>\n<p>Each endpoint MUST initiate, at most, one encoder stream and, at most, one decoder stream. Receipt of a second instance of either stream type MUST be treated as a connection error of type H3_STREAM_CREATION_ERROR.<\/p>\n<\/blockquote>\n<p>\u041e\u0434\u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043d\u0435 \u0438\u043c\u0435\u0442\u044c \u0441\u0432\u043e\u0435\u0433\u043e encoder-\u043f\u043e\u0442\u043e\u043a\u0430 \u0438 \u043e\u0431\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u043e\u0442\u0432\u0435\u0440\u0433\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439. CVE \u2014 \u0440\u043e\u0432\u043d\u043e \u043f\u0440\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e\u0447\u0438\u043d\u0438\u043b\u0438 \u044d\u0442\u043e \u0442\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043d\u044f, 19 \u043c\u0430\u044f 2026, \u0430\u0432\u0442\u043e\u0440 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u2014 Roman Arutyunyan.<\/p>\n<p>\u0422\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0438\u043d\u0430\u0447\u0435 \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430: 1.31.1 \u0432\u044b\u0448\u043b\u0430 22 \u043c\u0430\u044f, \u0447\u0435\u0440\u0435\u0437 \u0442\u0440\u0438 \u0434\u043d\u044f \u043f\u043e\u0441\u043b\u0435 \u00ab\u043f\u043e\u0447\u0438\u043d\u0438\u043b\u0438\u00bb, \u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0447\u0438\u0441\u043b\u0438\u0442\u0441\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0439. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e 19 \u043c\u0430\u044f \u2014 <strong>\u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0430\u044f<\/strong> \u0434\u0430\u0442\u0430. \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u043e \u0432\u0441\u0435 \u0442\u0440\u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c 17 \u0438\u044e\u043d\u044f, \u0432 \u043e\u0434\u0438\u043d \u0431\u0430\u0442\u0447 \u0441 \u0440\u0435\u043b\u0438\u0437\u043e\u043c 1.31.2 \u0438 \u0440\u043e\u0432\u043d\u043e \u0432 \u0434\u0435\u043d\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 CVE:<\/p>\n<pre><code class=\"bash\"># \u043d\u0443\u0436\u0435\u043d \u043a\u043b\u043e\u043d \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439git show -s --format='%h \u0430\u0432\u0442\u043e\u0440 %ad \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e %cd' \\    --date=format:'%Y-%m-%d %H:%M' 875750a4f ceccdbd2e 9e293766e<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>875750a4f \u0430\u0432\u0442\u043e\u0440 2026-05-19 15:43 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e 2026-06-17 07:40ceccdbd2e \u0430\u0432\u0442\u043e\u0440 2026-05-19 15:46 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e 2026-06-17 07:409e293766e \u0430\u0432\u0442\u043e\u0440 2026-05-19 16:09 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e 2026-06-17 07:40<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e\u0435 \u044d\u043c\u0431\u0430\u0440\u0433\u043e: \u043f\u0430\u0442\u0447 \u043d\u0430\u043f\u0438\u0441\u0430\u043d, \u043b\u0435\u0436\u0438\u0442 \u043c\u0435\u0441\u044f\u0446, \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0430\u043d\u043e\u043d\u0441\u043e\u043c. \u0410\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044e \u043e\u043d \u0442\u0440\u043e\u0433\u0430\u043b \u0434\u0432\u0430\u0436\u0434\u044b \u0441 \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439 \u0432 \u0442\u0440\u0438 \u043c\u0438\u043d\u0443\u0442\u044b.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430, \u0432 15:43, \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 (<code>875750a4f<\/code>): \u0431\u0440\u0430\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0442\u0430\u043c, \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f, \u0438 \u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u043b \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u043d\u0430 \u043b\u0435\u0442\u0443, \u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e.<\/p>\n<p>\u0427\u0435\u0440\u0435\u0437 \u0442\u0440\u0438 \u043c\u0438\u043d\u0443\u0442\u044b, \u0432 15:46, \u2014 \u0441\u0430\u043c UAF:<\/p>\n<pre><code class=\"diff\">-        dt-&gt;insert_buffer = ngx_create_temp_buf(c-&gt;pool,+        dt-&gt;insert_buffer = ngx_create_temp_buf(c-&gt;quic-&gt;parent-&gt;pool,                                                 h3scf-&gt;max_table_capacity);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>ceccdbd2e<\/code>, <code>src\/http\/v3\/ngx_http_v3_table.c<\/code><\/p>\n<p>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0432\u0441\u0451 \u043b\u0443\u0447\u0448\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u0430:<\/p>\n<blockquote>\n<p>Previously, it was allocated from the encoder stream pool. This could lead to use-after-free if the stream was closed and another encoder stream was opened.<\/p>\n<p>Reported by Trung Nguyen (@everping) of CyStack.<\/p>\n<\/blockquote>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043f\u043e \u0448\u0430\u0433\u0430\u043c. <code>insert_buffer<\/code> \u2014 \u0431\u0443\u0444\u0435\u0440 \u043f\u043e\u0434 insert-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041b\u0435\u0436\u0438\u0442 \u043e\u043d \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0430 \u043e\u043d\u0430 \u2014 \u043f\u043e\u043b\u0435 <strong>\u0441\u0435\u0441\u0441\u0438\u0438<\/strong>: <code>h3c-&gt;table<\/code>. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a. \u041f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u043d\u0435\u0433\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0440\u0430\u043b\u0430\u0441\u044c \u0438\u0437 <code>c-&gt;pool<\/code>, \u0433\u0434\u0435 <code>c<\/code> \u2014 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 <strong>encoder-\u043f\u043e\u0442\u043e\u043a\u0430<\/strong>.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u0432\u0440\u0435\u043c\u0451\u043d \u0436\u0438\u0437\u043d\u0438:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f9f\/693\/e86\/f9f693e86d32eb013c9196bc405a0f65.png\" alt=\"\u0426\u0435\u043f\u043e\u0447\u043a\u0430 UAF: \u0431\u0443\u0444\u0435\u0440 \u043b\u0435\u0436\u0438\u0442 \u0432 \u0441\u0435\u0441\u0441\u0438\u0438, \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 \u043f\u0443\u043b\u0430 \u043f\u043e\u0442\u043e\u043a\u0430\" width=\"1560\" height=\"940\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f9f\/693\/e86\/f9f693e86d32eb013c9196bc405a0f65.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f9f\/693\/e86\/f9f693e86d32eb013c9196bc405a0f65.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0426\u0435\u043f\u043e\u0447\u043a\u0430 UAF: \u0431\u0443\u0444\u0435\u0440 \u043b\u0435\u0436\u0438\u0442 \u0432 \u0441\u0435\u0441\u0441\u0438\u0438, \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 \u043f\u0443\u043b\u0430 \u043f\u043e\u0442\u043e\u043a\u0430<\/figcaption><\/div>\n<\/figure>\n<ol>\n<li>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 encoder-\u043f\u043e\u0442\u043e\u043a, \u0448\u043b\u0451\u0442 \u043f\u0435\u0440\u0432\u0443\u044e insert-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e. \u0410\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0431\u0443\u0444\u0435\u0440 \u2014 \u0438\u0437 \u043f\u0443\u043b\u0430 \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0442\u043e\u043a \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0435\u0433\u043e \u043f\u0443\u043b \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u0442\u0441\u044f. \u0411\u0443\u0444\u0435\u0440 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0451\u043d, \u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0441\u0435\u0441\u0441\u0438\u0438, \u0430 \u0441\u0435\u0441\u0441\u0438\u044f \u0436\u0438\u0432\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 <strong>\u0432\u0442\u043e\u0440\u043e\u0439<\/strong> encoder-\u043f\u043e\u0442\u043e\u043a. \u042d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u2014 \u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442, \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 insert-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f. <code>ngx_http_v3_get_insert_buffer<\/code> \u0432\u0438\u0434\u0438\u0442 <code>dt-&gt;insert_buffer != NULL<\/code>, \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0433\u043e. \u0417\u0430\u043f\u0438\u0441\u044c \u0438\u0434\u0451\u0442 \u0432 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0451\u043d\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0440\u0435\u0442\u0438\u0439 \u0448\u0430\u0433 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u0438 \u0435\u0451 \u043b\u0435\u0447\u0438\u0442 \u0442\u0440\u0435\u0442\u0438\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u0441\u0435\u0440\u0438\u0438, \u0435\u0449\u0451 \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043c\u0438\u043d\u0443\u0442, \u0432 16:09. \u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0430 \u2014 \u043f\u0440\u043e \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044e, \u044d\u0442\u043e\u0442 \u2014 \u043f\u0440\u043e \u043e\u0445\u0440\u0430\u043d\u0443: \u0434\u0432\u0435 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0434\u044b\u0440\u044b, \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0435 \u0432 \u043e\u0434\u0438\u043d \u0434\u0435\u043d\u044c. \u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u043e\u0445\u0440\u0430\u043d\u0430 \u043e\u0442 \u043f\u0435\u0440\u0435\u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0432 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0439 1.31.1:<\/p>\n<pre><code class=\"cpp\">    if (index &gt;= 0) {        if (h3c-&gt;known_streams[index]) {            ngx_log_error(NGX_LOG_INFO, c-&gt;log, 0, \"stream exists\");            return NGX_HTTP_V3_ERR_STREAM_CREATION_ERROR;        }        h3c-&gt;known_streams[index] = c;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>src\/http\/v3\/ngx_http_v3_uni.c:153\u2013159<\/code> \u043d\u0430 \u0442\u0435\u0433\u0435 <code>release-1.31.1<\/code><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 <code>known_streams[index]<\/code> \u2014 \u0436\u0438\u0432\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u043e\u0442\u043e\u043a. \u0410 \u043e\u043d \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u0430:<\/p>\n<pre><code class=\"cpp\">    if (us &amp;&amp; us-&gt;index &gt;= 0) {        h3c = ngx_http_v3_get_session(c);        h3c-&gt;known_streams[us-&gt;index] = NULL;    }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>src\/http\/v3\/ngx_http_v3_uni.c:89\u201392<\/code> \u2014 \u044d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432 \u0432 \u043e\u0431\u043e\u0438\u0445 \u0442\u0435\u0433\u0430\u0445<\/p>\n<p>\u0417\u0430\u043a\u0440\u044b\u043b\u0438 \u043f\u043e\u0442\u043e\u043a \u2014 \u0441\u043b\u043e\u0442 \u0441\u043d\u043e\u0432\u0430 <code>NULL<\/code> \u2014 \u043e\u0445\u0440\u0430\u043d\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 encoder-\u043f\u043e\u0442\u043e\u043a. \u0424\u0438\u043a\u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435:<\/p>\n<pre><code class=\"diff\">-        if (h3c-&gt;known_streams[index]) {-            ngx_log_error(NGX_LOG_INFO, c-&gt;log, 0, \"stream exists\");+        if (h3c-&gt;created_streams &amp; (1 &lt;&lt; index)) {+            ngx_log_error(NGX_LOG_INFO, c-&gt;log, 0, \"stream already created\");             return NGX_HTTP_V3_ERR_STREAM_CREATION_ERROR;         }          h3c-&gt;known_streams[index] = c;+        h3c-&gt;created_streams |= 1 &lt;&lt; index;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>9e293766e<\/code>, <code>src\/http\/v3\/ngx_http_v3_uni.c<\/code><\/p>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0434\u0432\u0443\u0445 \u043f\u043e\u043b\u0435\u0439 \u2014 \u0432\u0441\u044f \u0441\u0443\u0442\u044c:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a18\/acf\/147\/a18acf14709249dc4be5c8b19c46f8cb.png\" alt=\"known_streams \u043f\u0440\u043e\u0442\u0438\u0432 created_streams: \u0436\u0438\u0432\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u0437\u0430\u043b\u0438\u043f\u0430\u044e\u0449\u0435\u0439 \u043c\u0430\u0441\u043a\u0438\" width=\"1560\" height=\"860\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a18\/acf\/147\/a18acf14709249dc4be5c8b19c46f8cb.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a18\/acf\/147\/a18acf14709249dc4be5c8b19c46f8cb.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>known_streams \u043f\u0440\u043e\u0442\u0438\u0432 created_streams: \u0436\u0438\u0432\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u0437\u0430\u043b\u0438\u043f\u0430\u044e\u0449\u0435\u0439 \u043c\u0430\u0441\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<p><code>known_streams[i]<\/code> \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u043f\u043e\u0442\u043e\u043a \u043e\u0442\u043a\u0440\u044b\u0442 <strong>\u0441\u0435\u0439\u0447\u0430\u0441<\/strong>\u00bb \u0438 \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438. <code>created_streams<\/code> \u2014 \u0437\u0430\u043b\u0438\u043f\u0430\u044e\u0449\u0430\u044f \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430, \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u043d\u0435 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430; \u043e\u043d\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u043f\u043e\u0442\u043e\u043a \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0438 <strong>\u043a\u043e\u0433\u0434\u0430-\u043b\u0438\u0431\u043e<\/strong>\u00bb.<\/p>\n<p>\u0423\u044f\u0437\u0432\u0438\u043c\u044b\u0439 \u043a\u043e\u0434 \u0437\u0430\u0434\u0430\u0432\u0430\u043b \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0442\u0430\u043c, \u0433\u0434\u0435 \u043d\u0443\u0436\u0435\u043d \u0432\u0442\u043e\u0440\u043e\u0439.<\/p>\n<p>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442, \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0432\u044f\u0437\u043a\u0438 \u043f\u0443\u043b\u0430 \u0431\u044b\u043b\u043e \u043c\u0430\u043b\u043e:<\/p>\n<blockquote>\n<p>since stream creation and connection closure are asynchronous, there could be a window where two control\/encoder\/decoder streams could coexist within a single cycle iteration. This could result in reusing parsing context, such as encoder insert buffer.<\/p>\n<\/blockquote>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u0438\u0444\u0444\u0430 \u0432\u044b\u0448\u0435 \u2014 <code>h3scf-&gt;max_table_capacity);<\/code>. \u042d\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u0430 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435: \u043e\u043d \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0442\u0440\u0435\u043c\u044f \u043c\u0438\u043d\u0443\u0442\u0430\u043c\u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0432 <code>875750a4f<\/code>. \u041a CVE F5 \u0442\u043e\u0442 \u043a\u043e\u043c\u043c\u0438\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u043e \u0432 \u0434\u0435\u0440\u0435\u0432\u0435 \u043e\u043d \u043f\u0440\u0435\u0434\u043e\u043a \u0444\u0438\u043a\u0441\u0430, \u0438 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0434\u0438\u0444\u0444 \u0447\u0438\u0442\u0430\u043b\u0441\u044f \u0431\u044b \u0438\u043d\u0430\u0447\u0435.<\/p>\n<p>\u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0442\u0440\u0438\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0437\u0430\u043c\u044b\u043a\u0430\u0435\u0442. \u041e\u0442\u043a\u0443\u0434\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0437\u044f\u043b\u0441\u044f <code>insert_buffer<\/code>:<\/p>\n<pre><code class=\"bash\"># \u043d\u0443\u0436\u0435\u043d \u043a\u043b\u043e\u043d \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439: git clone --branch release-1.31.2 &lt;repo&gt;git log --format='%h %ad %s' --date=short \\    -S 'ngx_http_v3_get_insert_buffer' -- src\/http\/v3\/ngx_http_v3_table.c | tail -1<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>d7dd7e9ae 2026-04-10 HTTP\/3: optimize encoder stream memory usage<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<blockquote>\n<p>Previously, the encoder stream allocated each new inserted field in the connection pool. This memory was not freed until the end of the connection. Now a special insert buffer is used for all inserts.<\/p>\n<\/blockquote>\n<p>\u041a\u043e\u043c\u043c\u0438\u0442 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 <code>release-1.31.0<\/code> \u2014 \u043f\u0435\u0440\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e NVD \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0439, \u0438 \u043d\u0438 \u0432 \u043e\u0434\u043d\u0443 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u044e\u044e. \u0422\u043e \u0435\u0441\u0442\u044c \u0431\u0443\u0444\u0435\u0440, \u0441\u0442\u0430\u0432\u0448\u0438\u0439 use-after-free, \u0437\u0430\u0432\u0435\u043b\u0438 <strong>\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0441\u0445\u043e\u0434\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u043f\u0440\u0438\u0451\u043c\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/strong> \u2014 \u0442\u043e\u0439 \u0441\u0430\u043c\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u041e\u0442 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0434\u043e \u0440\u0435\u043b\u0438\u0437\u0430 1.31.0, \u0433\u0434\u0435 \u043e\u043d \u0441\u0442\u0430\u043b \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0441\u043d\u0430\u0440\u0443\u0436\u0438, \u2014 \u043f\u044f\u0442\u044c \u043d\u0435\u0434\u0435\u043b\u044c; \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0444\u0438\u043a\u0441 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d, \u2014 \u0448\u0435\u0441\u0442\u044c (\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e \u043e\u043d \u0432\u044b\u0448\u0435\u043b \u0435\u0449\u0451 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0441\u044f\u0446, \u0441\u043c. \u0432\u044b\u0448\u0435).<\/p>\n<p>\u0421\u043b\u043e\u0436\u0438\u0442\u0435: \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432, \u0438 \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0440\u0430\u0434\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435. \u0410\u0442\u0430\u043a\u0443\u044e\u0449\u0430\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u0435\u0441\u0442\u044c, \u043f\u043e\u043b\u044c\u0437\u044b \u043d\u0435\u0442, \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u2014 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<h3>\u0427\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442<\/h3>\n<p><strong>\u0412\u0430\u0448\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0435 \u0441\u0436\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438, \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u0442.<\/strong> \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0439\u0441\u044f <code>set-cookie<\/code>, <code>content-security-policy<\/code> \u0438\u043b\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0443\u0435\u0434\u0435\u0442 \u043e\u0434\u043d\u0438\u043c \u0431\u0430\u0439\u0442\u043e\u043c \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u2014 \u043d\u0435 \u0443\u0435\u0434\u0435\u0442. \u041e\u043d \u0443\u0435\u0434\u0435\u0442 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u043c, \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043f\u043e \u043e\u0431\u043e\u0438\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430\u043c. \u0425\u0430\u0444\u0444\u043c\u0430\u043d \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u2014 \u043d\u0435\u0442. \u0414\u0438\u0440\u0435\u043a\u0442\u0438\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0445 \u0435\u0451 \u043d\u0430 \u043e\u0442\u0434\u0430\u0447\u0435, \u0432 nginx \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442: \u044d\u0442\u043e \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430, \u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430.<\/p>\n<p>\u0421\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u043d\u0430 \u043f\u0440\u0438\u0451\u043c \u0442\u043e\u0436\u0435 \u043d\u0435\u0442, \u0438 \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435. <code>http3_max_table_capacity<\/code> \u0438 <code>http3_max_blocked_streams<\/code> \u0432 nginx \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0431\u044b\u043b\u0438 \u2014 \u0438\u0445 \u0432\u044b\u043d\u0435\u0441\u043b\u0438 \u0432 \u0434\u0435\u043a\u0430\u0431\u0440\u0435 2021-\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u043c <code>0791b5088<\/code> \u00abQUIC: simplified configuration\u00bb. \u041e\u0442 \u043f\u0435\u0440\u0432\u043e\u0439 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">                      \"client exceeded http3_max_table_capacity limit\");<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>src\/http\/v3\/ngx_http_v3_table.c:324<\/code> \u2014 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u043e \u0432\u0441\u0451\u043c \u0434\u0435\u0440\u0435\u0432\u0435. \u0421 \u0435\u0451 \u043d\u0430\u043f\u0430\u0440\u043d\u0438\u0446\u0435\u0439 <code>http3_max_blocked_streams<\/code> \u0440\u043e\u0432\u043d\u043e \u0442\u0430 \u0436\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044f, <code>:638<\/code>.<\/p>\n<p>\u0401\u043c\u043a\u043e\u0441\u0442\u044c 4096 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u2014 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438: <code>h3scf-&gt;max_table_capacity<\/code> \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438\u0437 <code>NGX_HTTP_V3_MAX_TABLE_CAPACITY<\/code> (<code>ngx_http_v3_module.c:201<\/code>) \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u0414\u0438\u0440\u0435\u043a\u0442\u0438\u0432 \u0432 <code>ngx_http_v3_module.c<\/code> \u0432\u043e\u0441\u0435\u043c\u044c, \u0438 \u043d\u0438 \u043e\u0434\u043d\u0430 \u043d\u0435 \u043f\u0440\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 (\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0435\u0432\u044f\u0442\u0443\u044e, <code>quic_bpf<\/code>, \u2014 \u043d\u043e \u0436\u0438\u0432\u0451\u0442 \u043e\u043d\u0430 \u0432 <code>ngx_event_quic_bpf.c<\/code> \u0438 \u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442). \u041f\u0440\u0438\u0451\u043c\u043d\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c, \u043d\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0432 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0435\u0439 HTTP\/3 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u2014 \u0440\u043e\u0432\u043d\u043e \u044d\u0442\u043e \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 Red Hat \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043a CVE.<\/p>\n<h4>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0441\u0442\u043e\u0438\u0442<\/h4>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c, \u0430 \u043f\u043e\u043c\u0435\u0440\u0438\u0442\u044c \u2014 \u0441\u0442\u0435\u043d\u0434 \u0442\u043e\u0442 \u0436\u0435, \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0444\u0438\u0433.<\/p>\n<p>\u0412 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0433\u043e\u043d\u0435 131 \u0431\u0430\u0439\u0442: \u0432\u043e\u0441\u0435\u043c\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043f\u043b\u044e\u0441 <code>Alt-Svc<\/code>, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e HTTP\/3 \u043d\u0435 \u0430\u043d\u043e\u043d\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u043e, \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u043f\u0440\u043e\u0434\u0435: <code>Content-Security-Policy<\/code> (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 268 \u0431\u0430\u0439\u0442), <code>Set-Cookie<\/code> \u0441 \u0441\u0435\u0441\u0441\u0438\u043e\u043d\u043d\u044b\u043c JWT (125) \u0438 <code>Strict-Transport-Security<\/code> (44). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0437\u044f\u0442\u044b \u0442\u0438\u043f\u043e\u0432\u044b\u0435, \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0440\u043e\u043b\u0438 \u043d\u0435 \u0438\u0433\u0440\u0430\u044e\u0442 \u2014 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0438 \u043e\u0442 \u043e\u0442\u0432\u0435\u0442\u0430 \u043a \u043e\u0442\u0432\u0435\u0442\u0443 \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f.<\/p>\n<pre><code>\u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440:                        131 \u0411+ CSP, Set-Cookie, HSTS:              516 \u0411<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>385 \u0431\u0430\u0439\u0442 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u043c \u2014 \u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 501 \u0431\u0430\u0439\u0442 \u0441\u044b\u0440\u044b\u043c\u0438, \u0425\u0430\u0444\u0444\u043c\u0430\u043d \u0443\u0436\u0438\u043c\u0430\u0435\u0442 \u0438\u0445 \u0434\u043e 385. <strong>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0435<\/strong>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u044d\u0442\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u2014 \u0425\u0430\u0444\u0444\u043c\u0430\u043d \u0438\u0445 \u0436\u043c\u0451\u0442, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043a \u043d\u0438\u043c \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0421 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0432\u0442\u043e\u0440\u043e\u0439 \u0438 \u0432\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0441\u0441\u044b\u043b\u0430\u043b\u0438\u0441\u044c \u0431\u044b \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u044b: \u0442\u0440\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u2014 \u044d\u0442\u043e 3\u20136 \u0431\u0430\u0439\u0442 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0440\u0451\u0445\u0441\u043e\u0442 \u0432\u043e\u0441\u044c\u043c\u0438\u0434\u0435\u0441\u044f\u0442\u0438 \u043f\u044f\u0442\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 \u0432\u0435\u0441\u0438\u043b \u0431\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 131 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u043b\u044e\u0441 \u044d\u0442\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u2014 \u043e\u043a\u0440\u0443\u0433\u043b\u0438\u043c \u0434\u043e 137. \u041d\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u043e\u0448\u043b\u043e \u0441\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (\u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0434\u0435\u043b\u043e \u0434\u043b\u044f SPA \u0438\u043b\u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0441 keep-alive):<\/p>\n<pre><code>\u0431\u0435\u0437 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b:  100 \u00d7 516 \u0411      = 51 600 \u0411 \u2248 52 \u041a\u0411\u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439:   516 + 99 \u00d7 137 \u0411 = 14 079 \u0411 \u2248 14 \u041a\u0411<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0440\u044f\u0434\u043a\u0430 38 \u041a\u0411 \u043d\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 \u043e\u0442\u0432\u0435\u0442\u043e\u0432. \u0423\u043c\u043d\u043e\u0436\u0430\u0439\u0442\u0435 \u043d\u0430 \u0441\u0432\u043e\u0451 \u0447\u0438\u0441\u043b\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0414\u0432\u0435 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0438. \u041f\u0435\u0440\u0432\u0430\u044f: \u043f\u0440\u0430\u0432\u0430\u044f \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u2014 \u0440\u0430\u0441\u0447\u0451\u0442, \u0430 \u043d\u0435 \u0437\u0430\u043c\u0435\u0440. \u0421\u0430\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0432 \u043d\u0435\u0439 \u0441\u0442\u043e\u0438\u043b \u0431\u044b \u0434\u043e\u0440\u043e\u0436\u0435 516, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u0442\u0430\u0432\u043a\u0443 \u0442\u0440\u0451\u0445 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u043e encoder-\u043f\u043e\u0442\u043e\u043a\u0443, \u0430 \u044d\u0442\u043e \u0442\u0435 \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 385 \u0431\u0430\u0439\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435; \u043d\u0430 \u0441\u043e\u0442\u043d\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u044d\u0442\u043e \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442 14 \u041a\u0411 \u0434\u043e 14,5 \u041a\u0411. \u0412\u0442\u043e\u0440\u0430\u044f: \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b. \u041d\u043e \u043b\u0435\u0432\u0430\u044f \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0430, \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0432\u0438\u0434\u0435\u043d.<\/p>\n<p><strong>\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u043d\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u043a\u0442\u043e \u0435\u0451 \u0432\u044b\u0431\u0440\u0430\u043b.<\/strong> \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043d\u0430 \u043e\u0442\u0434\u0430\u0447\u0435 \u2014 \u044d\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u043e\u043c, \u0440\u0438\u0441\u043a \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0438 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043a\u043e\u0434. \u0422\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0437 \u043f\u044f\u0442\u0438 \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u044d\u0442\u043e \u043d\u0435 \u043e\u043a\u0443\u043f\u0430\u0435\u0442\u0441\u044f. Google QUICHE \u0438 ls-qpack \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u0438 \u0443 \u043d\u0438\u0445 \u043d\u0430 \u044d\u0442\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0435\u0441\u0442\u044c.<\/p>\n<p><strong>\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u0438\u0451\u043c\u043d\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/strong> \u041e\u0442\u043a\u0430\u0437 \u043e\u0442 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0435 \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430, \u0438 \u044d\u0442\u043e \u043d\u0435 \u0432\u0430\u0448 \u0432\u044b\u0431\u043e\u0440: \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u0437\u0430\u0448\u0438\u0442\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439, \u0430 RFC 9204 \u00a74.2 \u0434\u043e\u0431\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u2014 \u00abAn endpoint MUST allow its peer to create an encoder stream and a decoder stream even if the connection&#8217;s settings prevent their use\u00bb. \u0414\u0430\u0436\u0435 \u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u043e\u043b\u044c \u043d\u0435 \u0443\u0431\u0440\u0430\u043b \u0431\u044b encoder-\u043f\u043e\u0442\u043e\u043a, \u0430 CVE \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435\u043c. CVE-2026-42530 \u2014 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435, \u0432\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<p>\u0418 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u0430\u0441 \u044d\u0442\u043e \u043d\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f, \u0448\u0438\u0440\u0435, \u0447\u0435\u043c \u00ab\u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0442\u043e\u0442 nginx\u00bb. NIST \u043f\u0440\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0435 2 \u0438\u044e\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 CPE-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u0438 \u0432 \u043d\u0435\u0439 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c \u0441\u0435\u0440\u0432\u0435\u0440:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u043f\u0440\u043e\u0434\u0443\u043a\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">NGINX Open Source<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.31.0 \u2264 v &lt; 1.31.2<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">NGINX Ingress Controller<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.5.0\u20133.7.2, 4.0.0, 4.0.1, 5.0.0 \u2264 v &lt; 5.5.1<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">NGINX Gateway Fabric<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.3.0\u20131.6.2, 2.0.0 \u2264 v &lt; 2.6.4<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">NGINX Instance Manager<\/p>\n<\/td>\n<td>\n<p align=\"left\">2.17.0\u20132.22.0<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 Ingress Controller \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0432\u044b \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 nginx \u0432 \u0433\u043b\u0430\u0437\u0430 \u043d\u0435 \u0432\u0438\u0434\u0435\u043b\u0438, \u0430 \u043f\u043e\u0434 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442\u0435.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u043f\u0430\u043a\u0435\u0442 \u0438\u0437 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u2014 \u043f\u043e\u0447\u0442\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043d\u0435\u0442: Red Hat \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0435 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 nginx \u0432 RHEL 8, 9 \u0438 10 \u043a\u0430\u043a unaffected, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043d\u044b\u0435 \u0432\u0435\u0442\u043a\u0438 \u0434\u043e 1.31.0 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0434\u043e\u0435\u0445\u0430\u043b\u0438. \u041e\u0434\u0438\u043d \u043f\u0440\u043e\u0434\u0443\u043a\u0442 Red Hat \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442 \u2014 Hardened Images (<code>nginx-main<\/code>), \u043d\u0430 \u043d\u0435\u0433\u043e \u0432\u044b\u043f\u0443\u0449\u0435\u043d erratum RHSA-2026:20351.<\/p>\n<p>\u0422\u0430\u043c \u0436\u0435 \u043b\u0435\u0436\u0438\u0442 \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0443\u0442\u044c, \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e: \u0443\u0431\u0440\u0430\u0442\u044c <code>quic<\/code> \u0438\u0437 \u0432\u0441\u0435\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432 <code>listen<\/code>. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c HTTP\/3 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u2014 \u043f\u0440\u0438\u0451\u043c\u043d\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0438\u043d\u0430\u0447\u0435 \u043d\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c.<\/p>\n<p>\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0436\u0438\u0432\u0430\u044f: NIST \u0434\u043e\u0431\u0430\u0432\u0438\u043b CPE-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e 2 \u0438\u044e\u043b\u044f, Red Hat \u043f\u0440\u0430\u0432\u0438\u043b \u0435\u0451 29 \u0438\u044e\u043d\u044f, 14 \u0438 16 \u0438\u044e\u043b\u044f, \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u043d\u0430 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u00abModified After Enrichment\u00bb. \u0414\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u2014 \u043f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u043d\u0430 16 \u0438\u044e\u043b\u044f.<\/p>\n<h3>\u0427\u0435\u0433\u043e \u044f \u043d\u0435 \u0437\u043d\u0430\u044e<\/h3>\n<p>\u0422\u0440\u0438 \u0432\u0435\u0449\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0438 \u0432\u0440\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u0438\u0445 \u043d\u0435 \u0431\u0443\u0434\u0443.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435: <strong>\u0447\u0442\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u0432 \u0441\u0432\u043e\u0438\u0445 SETTINGS Cloudflare quiche<\/strong>. \u042f \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0435 \u2014 \u044d\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435, \u0438 \u043f\u0443\u0442\u0430\u0442\u044c \u0438\u0445 \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435: <strong>\u043a\u0430\u043a \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b<\/strong>. \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u00ab\u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b = 0\u00bb \u0432 HTTP\/2 \u0443 \u043c\u0435\u043d\u044f \u043d\u0430 \u0441\u0442\u0435\u043d\u0434\u0435 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e curl \u043d\u0435 \u0448\u043b\u0451\u0442 <code>SETTINGS_HEADER_TABLE_SIZE<\/code>. Chromium \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Google QUICHE, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439, \u2014 \u043d\u043e \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435, \u044f \u043d\u0435 \u043c\u0435\u0440\u0438\u043b.<\/p>\n<p>\u0422\u0440\u0435\u0442\u044c\u0435: <strong>\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0432 \u0432\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0434\u0435<\/strong>. \u0421\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u0441\u0442\u0435\u043d\u0434\u0443 \u043d\u0435\u043b\u044c\u0437\u044f: \u043e\u043d \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u044b\u0439, \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439, \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u044c \u0438 \u0431\u0435\u0437 RTT.<\/p>\n<p>\u041e\u0442\u0441\u044e\u0434\u0430 \u0434\u0432\u0435 \u043f\u0440\u043e\u0441\u044c\u0431\u044b.<\/p>\n<p><strong>\u0414\u0435\u0448\u0451\u0432\u0430\u044f, \u043d\u0430 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443.<\/strong> \u0417\u0430\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u0432 \u0441\u0432\u043e\u0438 \u043e\u0442\u0432\u0435\u0442\u044b: \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0434\u043b\u0438\u043d\u043d\u0435\u0435 \u0441\u043e\u0442\u043d\u0438 \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c? <code>content-security-policy<\/code>, <code>set-cookie<\/code>, <code>server-timing<\/code>, \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043a\u0430\u043a\u043e\u0439 \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442. \u041c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0443 \u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043b\u044e\u0434\u0435\u0439 \u044d\u0442\u0430 \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0441\u0442\u043e\u0438\u0442.<\/p>\n<p><strong>\u0414\u043e\u0440\u043e\u0433\u0430\u044f, \u0435\u0441\u043b\u0438 \u0440\u0443\u043a\u0438 \u0434\u043e\u0439\u0434\u0443\u0442.<\/strong> \u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0435\u043d\u0434\u0430 \u2014 \u043d\u0438\u0436\u0435 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, 64 \u0441\u0442\u0440\u043e\u043a\u0438. \u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u2014 \u044d\u0442\u043e nginx, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0438\u0437 \u0442\u0435\u0433\u0430 <code>release-1.31.3<\/code> \u0441 <code>--with-debug --with-http_v2_module --with-http_v3_module<\/code>, \u043e\u0434\u0438\u043d \u0432\u043e\u0440\u043a\u0435\u0440, \u0441\u0430\u043c\u043e\u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442, <code>listen 8443 quic<\/code>.<\/p>\n<p> probe.py \u2014 \u043a\u043b\u0438\u0435\u043d\u0442 \u0441\u0442\u0435\u043d\u0434\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c; \u0432\u0435\u0441\u044c <a href=\"https:\/\/github.com\/kotru21\/nginx-headers\/tree\/main\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0435\u043d\u0434<\/a> \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432 1 \u043a\u043b\u0438\u043a \u0447\u0435\u0440\u0435\u0437 run.sh<\/p>\n<pre><code class=\"python\">import asyncio, sslfrom aioquic.asyncio.client import connectfrom aioquic.asyncio.protocol import QuicConnectionProtocolfrom aioquic.quic.configuration import QuicConfigurationfrom aioquic.quic.events import StreamDataReceivedfrom aioquic.h3.connection import H3ConnectionBIG = b\"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.\" + b\"A\" * 200RESP, REQ = [], []def varint(buf, off):    b0 = buf[off]; n = 1 &lt;&lt; (b0 &gt;&gt; 6); v = b0 &amp; 0x3F    for i in range(1, n):        v = (v &lt;&lt; 8) | buf[off + i]    return v, off + nclass Probe(QuicConnectionProtocol):    h3 = None    def quic_event_received(self, event):        if isinstance(event, StreamDataReceived) and event.stream_id % 4 == 0 and event.data:            try:                t, o = varint(event.data, 0); l, o = varint(event.data, o)                if t == 0x01:                    RESP.append(l)            except Exception:                pass        if self.h3 is not None:            self.h3.handle_event(event)        super().quic_event_received(event)async def main():    cfg = QuicConfiguration(is_client=True, alpn_protocols=[\"h3\"], verify_mode=ssl.CERT_NONE)    async with connect(\"127.0.0.1\", 8443, configuration=cfg, create_protocol=Probe) as client:        h3 = H3Connection(client._quic)        client.h3 = h3        orig = client._quic.send_stream_data        def spy(stream_id, data, end_stream=False):            if stream_id % 4 == 0 and data:                try:                    t, o = varint(data, 0); l, o = varint(data, o)                    if t == 0x01:                        REQ.append(l)                except Exception:                    pass            return orig(stream_id, data, end_stream)        client._quic.send_stream_data = spy        client.transmit()        await asyncio.sleep(0.8)          # \u0434\u0430\u0442\u044c SETTINGS \u0434\u043e\u0439\u0442\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f        for i in range(4):            sid = client._quic.get_next_available_stream_id()            h3.send_headers(sid, [                (b\":method\", b\"GET\"), (b\":scheme\", b\"https\"),                (b\":authority\", b\"localhost:8443\"), (b\":path\", b\"\/probe.txt\"),                (b\"authorization\", BIG),                (b\"x-request-id\", b\"fixed-value-for-repeat-test\"),            ], end_stream=True)            client.transmit()            await asyncio.sleep(0.6)        await asyncio.sleep(0.6)asyncio.run(main())print(f\"\u0437\u0430\u043f\u0440\u043e\u0441  (\u043a\u043b\u0438\u0435\u043d\u0442 \u2192 nginx, \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 ls-qpack): {REQ}\")print(f\"\u043e\u0442\u0432\u0435\u0442   (nginx \u2192 \u043a\u043b\u0438\u0435\u043d\u0442, \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 nginx):    {RESP}\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430: \u0432\u043e\u0437\u044c\u043c\u0438\u0442\u0435 \u0432\u043c\u0435\u0441\u0442\u043e <code>aioquic<\/code> \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430 quic-go \u0438\u043b\u0438 \u0441\u043d\u0438\u043c\u0438\u0442\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 <code>SSLKEYLOGFILE<\/code> \u0438 Wireshark. \u041c\u043d\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u2014 \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0443\u043c\u0435\u0435\u0442 \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u043e\u0431\u0435\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d, \u0438 \u0443\u043c\u0435\u0435\u0442 \u043b\u0438 Chromium \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435.<\/p>\n<p>\u0418 \u043a\u043e\u043d\u0442\u0440\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u0441\u043b\u0435\u0436\u0443 \u0441\u0430\u043c. \u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u00ab\u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043f\u0438\u0448\u0435\u0442 \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443\u00bb \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u043d\u0430 \u0442\u0440\u0451\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u0438\u0437 \u043f\u044f\u0442\u0438. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0432 \u0440\u0443\u043a\u0430\u0445 \u0441\u0435\u0440\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442, \u2014 Apache Traffic Server, H2O, \u0447\u0442\u043e-\u0442\u043e \u043d\u0430 Envoy, \u2014 \u043f\u043e\u043a\u0430\u0436\u0438\u0442\u0435 \u0432\u044b\u0432\u043e\u0434. \u042d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0440\u043e\u0432\u0435\u0440\u0433\u043d\u0435\u0442 \u0440\u0430\u0441\u043a\u043b\u0430\u0434 \u0442\u0440\u0438 \u043a \u0434\u0432\u0443\u043c.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1070310\/\">https:\/\/habr.com\/ru\/articles\/1070310\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0421\u0442\u0435\u043d\u0434: \u043e\u0434\u0438\u043d nginx, \u043e\u0434\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0447\u0435\u0442\u044b\u0440\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u043e\u0434\u0440\u044f\u0434. \u0423 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a\u0440\u0443\u043f\u043d\u044b\u0439 authorization \u043d\u0430 244 \u0431\u0430\u0439\u0442\u0430 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0439 x-request-id. \u041c\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0436\u0430\u0442\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b:\u043e\u0442\u0432\u0435\u0442   (nginx \u2192 \u043a\u043b\u0438\u0435\u043d\u0442):  131 131 131 131\u0437\u0430\u043f\u0440\u043e\u0441  (\u043a\u043b\u0438\u0435\u043d\u0442 \u2192 nginx):  246   8   8   8\u0412\u0435\u0440\u0445\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u2014 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438, \u043e\u0442\u0432\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 131 \u0431\u0430\u0439\u0442. \u041d\u0438\u0436\u043d\u044f\u044f \u2014 \u0442\u043e\u0442 \u0436\u0435 \u043d\u0430\u0431\u043e\u0440 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443: \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u043d \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u0440\u0430\u0437.\u0417\u0430\u043c\u0435\u0440\u043e\u0432 \u0443 HTTP\/3 \u0447\u0435\u0442\u044b\u0440\u0435, \u0443 HTTP\/2 \u0442\u0440\u0438 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b: h3_probe.py \u0448\u043b\u0451\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, curl \u0432 run.sh \u0442\u0440\u0438. \u041d\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u044d\u0442\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442.\u042d\u0442\u043e \u043d\u0435 \u0431\u0430\u0433 \u0438 \u043d\u0435 \u043f\u0440\u043e\u0441\u0447\u0451\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u042d\u0442\u043e HTTP\/3 \u0432 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438: \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430\u0434\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u044f\u0432\u043d\u043e (&#8212;with-http_v3_module, \u0432 auto\/options \u043e\u0431\u0430 HTTP\/2 \u0438 HTTP\/3 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e NO), \u043d\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0442\u043e\u043b\u044c\u043a\u043e listen 8443 quic \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e. \u0412 HTTP\/2 \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0440\u043e\u0432\u043d\u043e \u0442\u0430 \u0436\u0435: 129 129 129, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430.\u041c\u0435\u0436\u0434\u0443 \u0442\u0435\u043c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0441\u043c\u044b\u0441\u043b\u0430 HPACK \u0438 QPACK \u2014 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430: \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0443\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u043e\u043c\u0435\u0440. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0434\u0430\u0451\u0442 \u0442\u0435 \u0441\u0430\u043c\u044b\u0435 \u00ab\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0441\u0436\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u044b\u00bb, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u0438 \u0437\u0430\u0442\u0435\u0432\u0430\u043b\u0438\u0441\u044c. \u041a\u043b\u0438\u0435\u043d\u0442 \u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u2014 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435. \u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432.\u041d\u0438 \u0432 access-\u043b\u043e\u0433\u0435, \u043d\u0438 \u0432 error-\u043b\u043e\u0433\u0435 \u043d\u0430 \u0448\u0442\u0430\u0442\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u043d\u043e. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 nginx \u043d\u0435\u0442 \u043d\u0438 \u0441\u043b\u043e\u0432\u0430. \u0410 \u0432 RFC \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u2014 \u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u044d\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u0441\u043a\u0430\u0442\u044c.\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0432\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 QPACK \u0438\u0437 \u043f\u044f\u0442\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u0438\u0448\u0443\u0442. \u041d\u0435 \u0443\u0433\u0430\u0434\u0430\u0435\u0442\u0435, \u043a\u0430\u043a\u0438\u0435 \u2014 \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u0451\u043c\u043d\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430, \u0442\u0430 \u0441\u0430\u043c\u0430\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0430\u043c \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u044d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043f\u0440\u0438\u043d\u0435\u0441\u043b\u0430 nginx use-after-free \u0441 \u043e\u0446\u0435\u043d\u043a\u043e\u0439 9.2.\u0412\u0435\u0441\u044c \u0440\u0430\u0437\u0431\u043e\u0440 \u2014 \u043f\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c:\u043f\u0440\u043e\u0435\u043a\u0442\u0432\u0435\u0440\u0441\u0438\u044f\u043e\u0442\u043a\u0443\u0434\u0430nginx\/nginxrelease-1.31.3 (073ab5d)\u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u0437 \u0442\u0435\u0433\u0430nginx\/nginxrelease-1.31.2 (2fd01ed)\u043f\u043e\u043b\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0444\u0438\u043a\u0441\u0430quic-go\/qpackv0.6.0 (1661efa)\u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u0437 \u0442\u0435\u0433\u0430cloudflare\/quiche0.29.3 (55886df)\u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u0437 \u0442\u0435\u0433\u0430litespeedtech\/ls-qpackv2.7.0 (9156770)\u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u0437 \u0442\u0435\u0433\u0430google\/quiche7c6eb2cb4, 12 \u0430\u0432\u0433 2026\u0442\u0435\u0433\u043e\u0432 \u043d\u0435\u0442, \u0441\u043d\u0438\u043c\u043e\u043a \u0432\u0435\u0442\u043a\u0438 main\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0438: google\/quiche \u2014 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0435 \u0437\u0435\u0440\u043a\u0430\u043b\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f Google, \u0440\u0435\u043b\u0438\u0437\u043d\u044b\u0445 \u0442\u0435\u0433\u043e\u0432 \u0443 \u043d\u0435\u0433\u043e \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0415\u0441\u043b\u0438 \u0441\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0435 main \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0441\u044f\u0446, \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u0434. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b \u0442\u043e\u0447\u043d\u043e.\u0427\u0442\u043e nginx \u043e\u0442\u0434\u0430\u0451\u0442\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043e\u0442\u0432\u0435\u0442\u0430 \u0432 HTTP\/3 \u0436\u0438\u0432\u0451\u0442 \u0432 ngx_http_v3_filter_module.c. \u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u043b\u0435 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0442\u0440\u0451\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439: \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043b\u0438\u0442\u0435\u0440\u0430\u043b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043f\u043e\u043b\u043d\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b. \u0423 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 dynamic \u2014 \u043e\u043d \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442, \u0438\u0437 \u043a\u0430\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441:uintptr_tngx_http_v3_encode_field_ri(u_char *p, ngx_uint_t dynamic, ngx_uint_t index){    \/* Indexed Field Line *\/    if (p == NULL) {        return ngx_http_v3_encode_prefix_int(NULL, index, 6);    }    *p = dynamic ? 0x80 : 0xc0;    return ngx_http_v3_encode_prefix_int(p, index, 6);}src\/http\/v3\/ngx_http_v3_encode.c:121\u2013133\u0411\u0438\u0442 0x40 \u0437\u0434\u0435\u0441\u044c \u2014 \u044d\u0442\u043e \u0444\u043b\u0430\u0433 T \u0438\u0437 RFC 9204 (\u0443 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430 \u0441 \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0430 \u0438\u043c\u044f \u0442\u043e\u0442 \u0436\u0435 \u0444\u043b\u0430\u0433 \u0436\u0438\u0432\u0451\u0442 \u0432 0x10, ngx_http_v3_encode.c:151): \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043d\u043e\u043b\u044c \u2014 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e. dynamic ? 0x80 : 0xc0 \u0440\u043e\u0432\u043d\u043e \u044d\u0442\u043e \u0438 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442.\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0441 \u043a\u0430\u043a\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c dynamic \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0435\u043f\u043e\u043c \u2014 \u043f\u043e\u043a\u0430\u0436\u0443 \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u043d\u043e \u0433\u043b\u0430\u0437\u0430\u043c\u0438:git grep -n &#8216;ngx_http_v3_encode_field_ri(\\|ngx_http_v3_encode_field_lri(&#8216; \\    release-1.31.3 &#8212; src\/http\/v3\/ngx_http_v3_filter_module.c\u2026filter_module.c:153:        len += ngx_http_v3_encode_field_ri(NULL, 0,\u2026filter_module.c:157:        len += ngx_http_v3_encode_field_lri(NULL, 0,\u2026filter_module.c:175:        len += ngx_http_v3_encode_field_lri(NULL, 0,\u2026filter_module.c:181:        len += ngx_http_v3_encode_field_lri(NULL, 0, NGX_HTTP_V3_HEADER_DATE,\u2026filter_module.c:194:        len += ngx_http_v3_encode_field_lri(NULL, 0,\u2026filter_module.c:201:            len += ngx_http_v3_encode_field_lri(NULL, 0,\u2026filter_module.c:206:            len += ngx_http_v3_encode_field_ri(NULL, 0,\u2026filter_module.c:214:        len += ngx_http_v3_encode_field_lri(NULL, 0,\u2026filter_module.c:280:        len += ngx_http_v3_encode_field_lri(NULL, 0,\u2026filter_module.c:288:            len += ngx_http_v3_encode_field_ri(NULL, 0,\u2026filter_module.c:335:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_ri(b-&gt;last, 0,\u2026filter_module.c:339:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:362:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:372:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:408:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:425:            b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:433:            b-&gt;last = (u_char *) ngx_http_v3_encode_field_ri(b-&gt;last, 0,\u2026filter_module.c:453:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:463:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_lri(b-&gt;last, 0,\u2026filter_module.c:474:        b-&gt;last = (u_char *) ngx_http_v3_encode_field_ri(b-&gt;last, 0,\u2026filter_module.c:644:    len += ngx_http_v3_encode_field_ri(NULL, 0, NGX_HTTP_V3_HEADER_STATUS_103);\u2026filter_module.c:661:    b-&gt;last = (u_char *) ngx_http_v3_encode_field_ri(b-&gt;last, 0,(\u043f\u0440\u0435\u0444\u0438\u043a\u0441 release-1.31.3:src\/http\/v3\/ \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d, \u0447\u0442\u043e\u0431\u044b \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u043b\u0435\u0437\u043b\u0438 \u043f\u043e \u0448\u0438\u0440\u0438\u043d\u0435)\u0414\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0434\u0432\u0430 \u0432\u044b\u0437\u043e\u0432\u0430, \u0432\u0441\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u2014 \u043d\u043e\u043b\u044c. \u041d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443.\u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0441\u0435\u043a\u0446\u0438\u0438 \u043f\u043e\u043b\u0435\u0439. \u041e\u043d \u0438\u0434\u0451\u0442 \u043f\u0435\u0440\u0435\u0434 \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0438 \u043d\u0435\u0441\u0451\u0442 \u0434\u0432\u0430 \u0447\u0438\u0441\u043b\u0430: insert_count (\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0435\u043a\u0446\u0438\u044e) \u0438 delta_base. \u0412\u044b\u0437\u043e\u0432\u043e\u0432 \u0448\u0435\u0441\u0442\u044c, \u0442\u0440\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u044b\u0445 \u0438 \u0442\u0440\u0438 \u043f\u0438\u0448\u0443\u0449\u0438\u0445:    b-&gt;last = (u_char *) ngx_http_v3_encode_field_section_prefix(b-&gt;last,                                                                 0, 0, 0);src\/http\/v3\/ngx_http_v3_filter_module.c:327\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u2014 (u_char *p, ngx_uint_t insert_count, ngx_uint_t sign, ngx_uint_t delta_base), \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u0430 \u0447\u0438\u0441\u043b\u0430 \u0438 \u0437\u043d\u0430\u043a \u2014 \u043d\u0443\u043b\u0438. \u0418 \u0442\u0430\u043a \u0432\u043e \u0432\u0441\u0435\u0445 \u0448\u0435\u0441\u0442\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u0445, \u0430 \u0436\u0438\u0432\u0443\u0442 \u043e\u043d\u0438 \u0432 \u0442\u0440\u0451\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445: ngx_http_v3_header_filter (\u0441\u0442\u0440\u043e\u043a\u0430 85), ngx_http_v3_early_hints_filter (595) \u0438 ngx_http_v3_create_trailers (856). \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u0440\u0430\u043d\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438, \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u2014 \u043b\u044e\u0431\u0430\u044f \u0441\u0435\u043a\u0446\u0438\u044f \u043f\u043e\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e nginx \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442, \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442: \u0438\u0437 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044f \u043d\u0435 \u0432\u0437\u044f\u043b \u043d\u0438\u0447\u0435\u0433\u043e.\u0415\u0441\u0442\u044c \u0438 \u0442\u0440\u0435\u0442\u044c\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e, \u0441\u0430\u043c\u043e\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435. \u0427\u0442\u043e\u0431\u044b \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430, \u043d\u0443\u0436\u0435\u043d encoder-\u043f\u043e\u0442\u043e\u043a \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0434\u043d\u043e\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 QUIC-\u043f\u043e\u0442\u043e\u043a \u0442\u0438\u043f\u0430 0x02, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0438\u0434\u0443\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0438. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u043e\u0434\u043d\u043e\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 nginx \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c:git grep -n &#8216;get_uni_stream(&#8216; release-1.31.3 &#8212; src\/ | grep -v &#8216;\\.h:&#8217;release-1.31.3:src\/http\/v3\/ngx_http_v3_request.c:142:        if (ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_DECODER) == NULL) {release-1.31.3:src\/http\/v3\/ngx_http_v3_uni.c:312:ngx_http_v3_get_uni_stream(ngx_connection_t *c, ngx_uint_t type)release-1.31.3:src\/http\/v3\/ngx_http_v3_uni.c:407:    cc = ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_CONTROL);release-1.31.3:src\/http\/v3\/ngx_http_v3_uni.c:462:    cc = ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_CONTROL);release-1.31.3:src\/http\/v3\/ngx_http_v3_uni.c:505:    dc = ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_DECODER);release-1.31.3:src\/http\/v3\/ngx_http_v3_uni.c:546:    dc = ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_DECODER);release-1.31.3:src\/http\/v3\/ngx_http_v3_uni.c:586:    dc = ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_DECODER);\u0421\u0435\u043c\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439, \u0438\u0437 \u043d\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u0430 312 \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0448\u0435\u0441\u0442\u044c. \u0422\u043e\u043b\u044c\u043a\u043e CONTROL \u0438 DECODER. \u0412\u0435\u0442\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e encoder-\u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u2014 index = NGX_HTTP_V3_STREAM_SERVER_ENCODER \u0432 ngx_http_v3_uni.c:323 \u2014 \u0438 \u0432 \u043d\u0435\u0451 \u043d\u0438\u043a\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u0442.\u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0434 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c, \u0438 \u0435\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c:    if (h3scf-&gt;max_table_capacity &gt; 0) {        if (ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_DECODER) == NULL) {src\/http\/v3\/ngx_http_v3_request.c:141\u2013142\u0421\u0432\u043e\u0439 decoder-\u043f\u043e\u0442\u043e\u043a nginx \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u0430\u044f. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u00ab\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u00bb \u2014 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u0432 \u043a\u043e\u043d\u0446\u0435.\u042d\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u043f\u0440\u044f\u043c\u044b\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c, RFC 9204 \u00a74.2:An endpoint MAY avoid creating an encoder stream if it will not be used (for example, if its encoder does not wish to use the dynamic table or if the maximum size of the dynamic table permitted by the peer is zero).\u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0434\u0435\u0442\u0430\u043b\u044c, \u0441\u0430\u043c\u0430\u044f \u043a\u0440\u0430\u0441\u043d\u043e\u0440\u0435\u0447\u0438\u0432\u0430\u044f. \u0412 QPACK \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u0440\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u2014 Post-Base Index. \u041e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u0435\u043a\u0446\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0438 \u0430\u0434\u0440\u0435\u0441\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443; \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0443 \u043d\u0435\u0451 \u043d\u0435\u0442 \u043f\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e. RFC 9204 \u00a74.5.3:An indexed field line with post-Base index representation identifies an entry in the dynamic table with an absolute index greater than or equal to the value of the Base.nginx \u0435\u0451 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b. \u041e\u0431\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, pbi \u0438 lpbi, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435:git grep -n &#8216;encode_field_pbi\\|encode_field_lpbi&#8217; release-1.31.3\u2026\/ngx_http_v3_encode.c:247:ngx_http_v3_encode_field_pbi(u_char *p, ngx_uint_t index)\u2026\/ngx_http_v3_encode.c:262:ngx_http_v3_encode_field_lpbi(u_char *p, ngx_uint_t index, u_char *data,\u2026\/ngx_http_v3_encode.h:29:uintptr_t ngx_http_v3_encode_field_pbi(u_char *p, ngx_uint_t index);\u2026\/ngx_http_v3_encode.h:30:uintptr_t ngx_http_v3_encode_field_lpbi(u_char *p, ngx_uint_t index,(\u043f\u0440\u0435\u0444\u0438\u043a\u0441 release-1.31.3:src\/http\/v3 \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d)\u0427\u0435\u0442\u044b\u0440\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f: \u0434\u0432\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u0434\u0432\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f. \u0412\u044b\u0437\u043e\u0432\u043e\u0432 \u043d\u0435\u0442. \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u0443 \u043f\u0430\u0440\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435, \u2014 \u0442\u0435 \u0436\u0435 \u0434\u0432\u0430 \u0438 \u0434\u0432\u0430 \u043f\u043b\u044e\u0441 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0434\u0432\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0435.\u042d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0434\u0432\u0443\u0445 \u043d\u0443\u043b\u0435\u0439. \u041d\u043e\u043b\u044c \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u2014 \u0430 \u0442\u0443\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0435\u0433\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0438, \u0441\u0443\u0434\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443, \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f.\u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043f\u0440\u043e \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430. \u041e\u043d\u0430 \u043f\u0440\u043e \u0442\u043e, \u0447\u0442\u043e \u044d\u0442\u0438\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-490882","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/490882","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=490882"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/490882\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=490882"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=490882"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=490882"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}