What’s New in ATS v10.2
This version of Apache Traffic Server™ includes 1039 commits from 655 pull requests, with 44 contributors participating in this development cycle.
Security Fixes
This release also contains all of the security fixes described in the
July 2026 security advisory.
Those fixes were committed directly to the release branch rather than through
public pull requests, so they do not carry PR numbers; they are listed by commit
subject at the end of CHANGELOG-10.2.0. Refer to the advisory for the CVE
identifiers, severities, and affected version ranges.
Configuration Reload
Configuration reload has been rebuilt around a token model that makes a reload an observable, trackable operation rather than a fire-and-forget signal. Each reload gets a token; handlers report progress and terminal state against that token, so a reload can be monitored to completion and its per-handler logs inspected. See Configuration Reload Framework.
traffic_ctl config reloadgained--monitor/-mto follow a reload to completion,--show-details/-sand--include-logs/-lfor per-handler detail,--token/-tto target a specific token,--refresh-int/-rand--timeout/-Tto control polling, and--force/-F.traffic_ctl config statusreports reload records for a token, with--count/-c(numeric orall) and--min-levelto filter log severity.Reload behavior is tunable with
proxy.config.admin.reload.timeoutandproxy.config.admin.reload.check_interval.Replaced configurations are now destroyed on an
ET_TASKthread rather than on a network thread, so a large config teardown no longer blocks an event loop.
Features
traffic_ctl cache clearperforms a logical cache purge by advancing the global HTTP cache generation, so a cache reset no longer requires restarting Traffic Server or hand-editing the cache generation. It is backed by a restricted JSONRPC method. See traffic_ctl cache and admin_cache_clear.Implement RFC 9213 Targeted HTTP Cache Control. Cache directives can be targeted at specific caches via headers such as
CDN-Cache-Control, configured throughproxy.config.http.cache.targeted_cache_control_headers, which is overridable per remap rule. When a targeted header is present it takes precedence over the standardCache-Controlheader, and the targeted header is passed downstream so cache hierarchies behave correctly.Connect retries to the origin can now back off exponentially, controlled by
proxy.config.http.connect_attempts_retry_backoff_base, instead of retrying immediately and piling connections onto a struggling origin.Origin connect retry limits are now selected by HostDB state:
proxy.config.http.connect_attempts_max_retriesforUPservers, the newproxy.config.http.connect_attempts_max_retries_suspect_serverforSUSPECT, and no retries forDOWN. The retry limits were not previously applied according to origin state, so this is a necessary incompatible change. See Upgrading to ATS v10.2 before deploying.proxy.config.http.connect.down.policygained option3, which counts inactive connections as failures.Snowflake IDs, 64-bit organizationally unique identifiers, are now used for connection IDs so they are unique across restarts and typically across instances in a CDN.
TLS certificate compression is supported in both directions, configured with
proxy.config.ssl.server.cert_compression.algorithmsandproxy.config.ssl.client.cert_compression.algorithms.Certificate loading can now be parallelized with
proxy.config.ssl.server.multicert.concurrency.sni.yamlsupports session ticket overrides.QUIC token secrets are configurable via
proxy.config.quic.server.token_key.filename.The PROXY protocol header size limit is configurable with
proxy.config.proxy_protocol.max_header_size.A per-client connection limit exempt list is available through
proxy.config.http.per_client.connection.exempt_list, the newconnection_exempt_listplugin, and the TS API (see below).Parsed values for expensive STRING configurations (for example
negative_caching_list,insert_forwarded,server_session_sharing.match) are now cached automatically, so repeatedTSHttpTxnConfigStringSet()calls with the same value parse only once.The migration from PCRE to PCRE2 is complete; all remaining PCRE references have been removed from the core and plugins.
Configuration
New records.yaml settings in this release:
Other configuration changes:
proxy.config.ssl.max_record_sizenow accepts the documented-1value, making dynamic TLS record sizing reachable fromrecords.yaml.proxy.config.ssl.client.CA.cert.filenameis now overridable.negative_caching_listandnegative_revalidating_listare overridable.traffic_ctl config resetresets configuration values matching a path pattern back to their defaults.traffic_ctl hostdb statusis a new command for inspecting HostDB state.traffic_ctlgained a global--watch/-woption to re-run a command periodically.JSONRPC now refuses writes to records marked
RECA_READ_ONLYorRECA_NO_ACCESS.
Metrics
Added
proxy.process.http.000_responsesAdded
proxy.process.http.429_responsesAdded
proxy.process.log.marshalled_bytesAdded
proxy.process.net.per_client.connections_exempt_inAdded
proxy.process.ssl.connections_closedAdded
proxy.process.ssl.total_handshake_bytes_read_inAdded
proxy.process.ssl.total_handshake_bytes_write_outAdded
proxy.process.ssl.ssl_session_cache_timeoutAdded
proxy.process.ssl.ssl_origin_session_cache_timeoutAdded
proxy.process.ssl.handshake_sign_rsa,proxy.process.ssl.handshake_sign_ecdsaandproxy.process.ssl.handshake_sign_otherto count handshake signatures by key typeAdded TLS certificate compression counters
proxy.process.ssl.cert_compress.{zlib,brotli,zstd}andproxy.process.ssl.cert_decompress.{zlib,brotli,zstd}, each with a matching_failurecounterAdded
proxy.process.plugin.header_rewrite.conditionsandproxy.process.plugin.header_rewrite.operatorsAdded
proxy.process.plugin.compress.bytes_inAdded per-plugin workload counters under the
proxy.process.plugin.prefixAdded per-curve TLS handshake time metrics and a cache stripe lock contention metric
proxy.process.http.incoming_requestsis now counted at transaction start
Logging
New log fields in this release:
chiv- verified client host IPckh- cache key hashcqqtl- client request squid length including TLS overheadcqssrt- TLS session resumption typecthb,cthbr,cthbt- client TLS handshake bytes (total, received, transmitted)mstsms- server-side TLS handshake milestonepptc,pptg,pptv- PROXY protocol TLS cipher, group and versionprscs- the component that set the proxy response status codepsfid- process Snowflake IDpsqtl- proxy response squid length including TLS overhead
Other logging changes:
Plugins can register custom log fields at runtime with
TSLogFieldRegisterand theTSLog*Marshalfunctions.Added the
ERR_TUN_ACTIVE_TIMEOUTsquid code for tunnel timeouts.
Plugins
New plugins:
connection_exempt_list- manage the per-client connection limit exempt listfilter_body- filter request and response body contentjax_fingerprint- consolidated JA3/JA4 fingerprintingrealip- set the verified client address from a trusted source
redo_cache_lookup has been moved out of the experimental plugins and into
the examples.
header_rewrite and hrw4u:
hrw4u is a new DSL and compiler for
header_rewriteconfigurations, with a companionu4wrhtool that converts existingheader_rewriteconfiguration back into the DSL. See HRW4U DSL.header_rewritecan invoke the hrw4u compiler directly at config load.Added
elifsupport inif/elif/elsechains, nestedif,SETSwith partial string matching, session-scope state variables,SERVER-HEADERandSERVER-URL, indexed query parameters,set-effective-address,set-cc-alg, andPOST_REMAP_HOOKsupport.Per-remap MaxMind geo database handles are supported.
Bad
run-plugindirectives are now rejected at config load rather than at runtime.
Other plugin changes:
compress: Zstandard support, content-type parameter handling, and an option to skip compressing partial objects.
stats_over_http: a Prometheus v2 output format that groups samples by metric family and derives labels for methods, directions, status codes, cache results, time buckets and cache volumes; plus
HINTandTYPEannotations.xdebug: a
probe-full-jsonfeature that emits the full probe output as JSON, including the encoded origin body.escalate: added the
x-escalate-redirectheader and--escalate-non-get-methods.esi: added
--allowed-response-codes.maxmind_acl: added a bypass header configuration option.
slice: prefetch deduplication and a freelist, and purge now covers every block of an object rather than stopping at the first gap.
lua: support for Unix domain socket inbound connections, the verified address API, PROXY protocol info, certificate introspection, the connection exempt list, and a shutdown hook.
Cripts: cache group concepts, geo APIs on
cripts::IP, a refactored cache key / URL API, and a substantially smaller per-transactionContext.
TS API
TSVConnClientHelloGetandTSClientHelloExtensionGetprovide access to the TLS ClientHello and its extensions.TSHttpTxnVerifiedAddrSet/TSHttpTxnVerifiedAddrGetset and read a verified client address.TSHttpTxnCacheKeyDigestGetreturns the cache key hash.TSLogFieldRegister,TSLogIntMarshal,TSLogStringMarshalandTSLogAddrMarshalallow plugins to define custom log fields.TSConnectionLimitExemptListAdd,TSConnectionLimitExemptListRemoveandTSConnectionLimitExemptListClearmanage the per-client connection limit exempt list.TSHttpTxnNextHopStrategySet,TSHttpTxnNextHopStrategyGetandTSHttpTxnParentStrategyGetexpose next hop strategy selection.TSMutexLockGuardis an RAII guard forTSMutex.
What’s New in ATS v10.1
Metrics
Added
proxy.process.http.total_parent_marked_down_timeoutAdded
proxy.process.http.total_client_connections_udsAdded
proxy.process.ssl.group.user_agent.P-256Added
proxy.process.ssl.group.user_agent.P-384Added
proxy.process.ssl.group.user_agent.P-521Added
proxy.process.ssl.group.user_agent.X25519Added
proxy.process.ssl.group.user_agent.P-224Added
proxy.process.ssl.group.user_agent.X448Added
proxy.process.ssl.group.user_agent.X25519MLKEM768
Plugins
stats_over_http: Add prometheus metrics format option
header_rewrite: Add
set-plugin-cntloperatorheader_rewrite: Add
LAST-CAPTUREcondition to access the last capture group of a regexheader_rewrite: Add support for state variables that can be used in conditions and operators.
header_rewrite: Add support for an else clause in conditions
header_rewrite: Add a
GROUPconditionheader_rewrite: Add a
HTTP-CNTLcondition to control if expensive rules are run.header_rewrite: Add the
set-body-fromoperator to set the response body from a URLheader_rewrite: The
set-body-fromoperator now defers renabling the transaction until after the fetch of the URL providing the response bodyslice: Support unix domain socket paths
slice: Add configuration to limit slicing of some objects.
access_control: Generate a session cookie when
exp=0appears in aTokenRespHdrorigin response header.compress: Add range request control options to adjust behavior based on the
Accept-EncodingorRangeheaderslua: Add support for millisecond sleep
escalate: Now handles dispatching to the failover server if the original server is down
ja3_fingerprint: Add the
--preserveoption to avoid modifing some existing ja* fields.ja4_fingerprint: Added this new plugin
rate_limit: Add a
--rateoption to limit by RPS
TS API
Add
TSVConnPPInfoGetto get Proxy Protocol information.Add
TSContScheduleOnEntirePoolandTSContScheduleEveryOnEntirePoolto schedule continuations on every thread in a pool.
Features
Add the
cqssglog field for TLS group name loggingtraffic_ctl: Add a new server command to show some basic internal information
traffic_ctl: Now displays YAML format output when the
--recordsoption is set.traffic_ctl: Added the
server debugcommand to enable/disable diagnostics and debug tags at runtime with a single command.cripts: Add some new high level convenience APIs
cripts: Add optional reason parameter to
Error::Statussni.yaml: Add
server_cipher_suiteandserver_TLSv1_3_cipher_suitesto allow overriding the setting fromrecords.yamlAdd support for getting authority information from Proxy Protocol V2. with new
ppalog formatter.Add support for getting UDP address info from Proxy Protocol.
Added support for listening on a Unix Domain Socket. See
proxy.config.http.server_portsAdded option for
proxy.config.http.auth_server_session_privateto only mark the connection private ifProxy-AuthorizationorWww-Authenticateheaders are presentIt is now an
ERRORif a remap ACL has more than one@actionparameter. This was an error in ATS 10.0.xAdd a
fragment-sizeoption in volume.config to control the fragment size of the volume.Add an optional
avg_obj_sizetovolume.configto control the directory entry sizing.The
proxy.config.http.cache.post_methodis now an overridable config.Defer deleting the copied plugin shared object file to startup to make it easier to debug crashes in plugins.
Configuration
Added
proxy.config.http.negative_revalidating_listto configure the list of status codes that apply to the negative revalidating featureAdded
proxy.config.ssl.session_cache.modeto control TLS session caching. This is intended to replace the legacyproxy.config.ssl.session_cache.enabledandproxy.config.ssl.session_cache.valueconfigurations. Theproxy.config.ssl.session_cache.enabledsetting was documented but never implemented, whileproxy.config.ssl.session_cache.valuewas implemented but not documented. The newproxy.config.ssl.session_cache.modefunctions just like the legacyproxy.config.ssl.session_cache.valuedid in the ealier 10.0 release. Theproxy.config.ssl.session_cache.modesetting provides a clear and consistent interface going forward. For backward compatibility,.enabledis now implemented, but both.enabledand.valuewill be removed in ATS 11.x.
What’s New in ATS v10.0
This version of Apache Traffic Server™ includes over <x> commits, from <y> pull requests. A total of <z> contributors have participated in this development cycle.
New Features
JSON-RPC based interface for administrative API
Traffic Server now exposes a JSON-RPC node to interact with external tools. Check JSONRPC for more details.
traffic_ctl has a new command
monitorto show a continuously updating list of metricsip_allow.yamlandremap.confignow support named IP ranges via IP Categories. See theip_categorieskey definition inip_allow.yamlfor information about their use and definitions.sni.yamlfqdn:tunnel_route, beside the already supported match group number, configuration now also supports the destination port using a variable specification either for the incoming connection port or the port that was specified by the incoming Proxy Protocol payload. Checksni.yamlfor more information.The records.yaml entry
proxy.config.system_clockwas added to control the underlying system clock that ATS uses for internal timingOCSP requests is now be able to use GET method. See
proxy.config.ssl.ocsp.request_modefor more information.TSHttpSsnInfoIntGet has been added.
New or modified Configurations
ip_allow.yaml and remap.config ACL actions
There are two new sets of actions for HTTP request method filtering introduced in Traffic Server 10.x:
Both
ip_allow.yamlandremap.confignow support theset_allowandset_denyactions. These actions both behave likeallowanddenydid forip_allow.yamlpre Traffic Server 10.x.In addition,
remap.confignow supportsadd_allowandadd_denyactions. These behave likeallowanddenyactions did forremap.configACLs pre Traffic Server 10.x.
The details about the motivation and behavior of these actions are documented in ACL Filters.
Logging and Metrics
The numbers of HTTP/2 frames received have been added as metrics.
Plugins
authproxy -
--forward-header-prefixparameter has been addedprefetch - Cmcd-Request header support has been added
xdebug -
--enableoption to selectively enable features has been addedsystem_stats - Stats about memory have been added
slice plugin - This plugin was promoted to stable.
compress plugin - Added support for Zstandard (zstd) compression algorithm.
JSON-RPC
Remote clients, like traffic_ctl have now bi-directional access to the plugin space. For more details check Handler implementation.
Replaced autotools build system with cmake
See Installing Traffic Server for more information
Switch to C++20
Plugins are now required to be compiled as C++ code, rather than straight C.
The API is tested with C++20, so code compatible with this version is preferred.
TSDebug and related functions are removed. Debug tracing should now be done
using cpp:func:Dbg and related functions, as in Traffic Server core code.
C++ Plugin API Deprecated
It is deprecated in this release. It will be deleted in ATS 11.
Symbols With INKUDP Prefix
In the plugin API, all types and functions starting with the prefix INKUDP are removed.
New plugin hook for request sink transformation
A new hook, TS_HTTP_REQUEST_CLIENT_HOOK, has been added. This provides the analoguas functionality of
TS_HTTP_RESPONSE_CLIENT_HOOK, for request bodies.
HTTP/2
Support for HTTP/2 on origin server connections has been added. This is disabled by default. For more details check
proxy.config.ssl.client.alpn_protocolsSupport for CONNECT method has been added.
Window size control has been improved. For more details check
proxy.config.http2.flow_control.policy_in
HTTP UI Removed
The stats and cache inspector pages were unmaintained and removed in this release.