ExpressЩо нового в Express 5.3
Реліз приніс умовну ревалідацію для методу QUERY, оновлення парсингу заголовків і виправлення вразливостей у залежностях.
Реліз від 9 жовтня 2026 · оновлено 9 листопада 2026
Головне
- Підтримка перевірки свіжості req.fresh та відповідей 304 для методу QUERY
- res.send тепер запобігає конфлікту між Content-Length та Transfer-Encoding
- Оновлення content-type до ^2.0.0 з прискореним парсингом у res.send()
- Виправлено вразливості безпеки через оновлення qs, proxy-addr та body-parser
- Логування повного об'єкта помилки за замовчуванням замість лише stack trace
Коротко
У релізі Express 5.3 додано підтримку умовної ревалідації кешу для HTTP-методу QUERY та розширено логування вбудованого обробника помилок. Також оновлено низку ключових залежностей для усунення вразливостей і оптимізовано роботу із заголовками Content-Type, Content-Length та Content-Disposition.
Нові можливості
Підтримка методу QUERY в req.fresh
Раніше перевірка свіжості req.fresh виконувалася лише для запитів GET та HEAD, через що відповіді на метод QUERY ніколи не повертали статус 304 Not Modified, навіть за наявності відповідного валідатора. Оскільки QUERY є безпечним, ідемпотентним і кешованим методом із підтримкою умовних запитів, його додано до перевірки свіжості:
// QUERY /reports with If-None-Match: "12345"
app.query('/reports', (req, res) => {
res.set('ETag', '"12345"');
res.send(results); // тепер відповідає 304 Not Modified
});
Покращене логування в стандартному error handler
Стандартний обробник помилок тепер логує повний об'єкт помилки, а не лише її stack trace. Завдяки цьому в логах зберігаються вкладені деталі (наприклад, Error.cause) та специфічні властивості сторонніх бібліотек на кшталт parent або original у Sequelize.
Зміни в обробці Content-Type
Пакет content-type оновлено до версії ^2.0.0 (разом з type-is до ^2.1.0), що забезпечує приблизно в 1.5 раза швидший парсинг і форматування Content-Type у res.send(). Метод res.send() тепер зберігає наявні параметри під час додавання charset і більше не викидає помилку, якщо Content-Type не вдається розпарсити:
res.set('Content-Type', 'text/plain; foo=bar').send('hey');
// -> Content-Type: text/plain; foo=bar; charset=utf-8
Також реалізовано оптимізацію: усунуто подвійну обробку заголовка Content-Type у res.send() під час надсилання рядкових відповідей без явно заданого заголовка.
Оновлення Content-Disposition
Залежність content-disposition оновлено до версії ^2.0.1. У методах res.download(), res.attachment() та res.sendFile() назви файлів, які є валідними HTTP-токенами, більше не огортаються в лапки:
res.attachment('user.html');
// раніше -> Content-Disposition: attachment; filename="user.html"
// тепер -> Content-Disposition: attachment; filename=user.html
Обробка null в app.render
Під час виклику app.render зі значенням опцій null об'єкт locals тепер обробляється коректно без неочікуваних помилок. Поведінка методу стала такою ж, як і при опущенні аргументу опцій або передачі порожнього об'єкта:
app.render('index', null, callback);
Структура HTML у res.redirect()
Для відповідей res.redirect(), коли клієнт приймає HTML-формат, додано теги <!DOCTYPE html>, <title> та <body> для кращої сумісності з браузерами.
Виправлення та покращення
- Усунення конфлікту заголовків у
res.send(): виправлено поведінку для запобігання конфліктам між заголовкамиContent-LengthтаTransfer-Encoding. ЗаголовокContent-Lengthдодається лише тоді, колиTransfer-Encodingвідсутній. ГенераціяETagза наявностіTransfer-Encodingзберігається. - Оновлення
body-parserдо^2.3.0: виправлено CVE-2026-12590 (GHSA-v422-hmwv-36x6). Раніше некоректне значення опціїlimitпризводило до тихого вимкнення контролю розміру тіла запиту; тепер некоректні значенняlimitвикидають помилку під час ініціалізації парсера. - Оновлення
qsдо^6.16.0: виправлено CVE-2026-2391 (GHSA-w7fw-mjwx-w883), CVE-2026-82417 (GHSA-4mjr-xmp4-gh2g) та CVE-2026-82562 (GHSA-x5fp-wj9c-mxmx), пов'язані з обходомarrayLimitпри парсингу ком та відмовою в обслуговуванні через контрольований зловмисникомisBuffer. - Оновлення
proxy-addrдо^2.0.8: закрито вразливість CVE-2026-90711. - Покращення методу
req.acceptsCharsets: оптимізовано роботу методу обробки кодувань. - Заміна застарілого методу: застарілий
trimRight()у кодовій базі замінено наtrimEnd().
Огляд підготовлено автоматично за офіційними release notes за допомогою ШІ та перевірено на відповідність джерелу. Точні формулювання дивіться в оригіналі. Як ми працюємо