Після трьох з половиною років розробки представлено перший стабільний реліз проекту GNU Wget2, який розвиває повністю перероблений варіант програми для автоматизації рекурсивного завантаження контенту GNU Wget. GNU Wget2 спроектований і переписаний з нуля і примітний винесення базової функціональності web-клієнта в бібліотеку libwget, яка може окремо застосовуватися в додатках. Утиліта постачається під ліцензією GPLv3+, а бібліотека під LGPLv3+.
Замість поступової переробки існуючої кодової бази було вирішено переробити все з нуля та заснувати окрему гілку Wget2 для втілень ідей щодо реструктуризації, нарощування функціональності та внесення змін, що порушують сумісність. За винятком припинення підтримки протоколу FTP і формату WARC, wget2 у більшості ситуацій може бути прозорою заміною класичної утиліти wget.
При цьому wget2 має деякі документовані відмінності у поведінці, надає близько 30 додаткових опцій та припиняє підтримку кількох десятків опцій. У тому числі припинено обробку таких опцій, як «ask-password», «header», «exclude-directories», «ftp*», «warc*», «limit-rate», «relative » та «-unlink».
З ключових новацій можна відзначити:
- Винесення функціональності до бібліотеки libwget.
- Перехід на багатопотокову архітектуру.
- Можливість паралельної установки кількох з'єднань та завантаження у кілька потоків. У тому числі можливе розпаралелювання завантаження одного файлу з розбивкою на блоки за допомогою опції «-chunk-size».
- Підтримка протоколу HTTP/2.
- Використання заголовка HTTP If-Modified-Since для завантаження лише змінених даних.
- Перехід застосування зовнішніх обмежувачів пропускної спроможності, таких як trickle.
- Підтримка заголовка Accept-Encoding, передачі даних у стислому вигляді та алгоритмів стиснення brotli, zstd, lzip, gzip, deflate, lzma та bzip2.
- Підтримка TLS 1.3, протоколу OCSP (Online Certificate Status Protocol) для перевірки відкликаних сертифікатів, механізму HSTS (HTTP Strict Transport Security) примусового перенаправлення на HTTPS і HPKP (HTTP Public Key Pinning) для прив'язки сертифікатів.
- Можливість використання GnuTLS, WolfSSL та OpenSSL як бекенд для TLS.
- Підтримка швидкого відкриття TCP-з'єднань (TCP FastOpen).
- Вбудована підтримка формату Metalink.
- Підтримка інтернаціональних доменних назв (IDNA2008).
- Можливість одночасно роботи через кілька проксі-серверів (один потік завантажуватиметься через один проксі, в другий через інший).
- Вбудована підтримка стрічок новин у форматах Atom та RSS (наприклад, для сканування та завантаження посилань). Дані RSS/Atom можуть бути завантажені з локального файлу або мережі.
- Підтримка вилучення URL із файлів Sitemap. Наявність парсерів для отримання посилань з файлів CSS і XML.
- Підтримка директиви 'include' у конфігураційних файлах та розподіл налаштувань за кількома файлами (/etc/wget/conf.d/*.conf).
- Вбудований механізм кешування запитів DNS.
- Можливість перекодування вмісту зі зміною кодування документа.
- Облік файлу robots.txt при рекурсивних завантаженнях.
- Після збереження даних режим надійного запису з викликом fsync().
- Можливість відновлення перерваних TLS-сеансів, а також кешування та збереження файлів параметрів TLS-сеансу.
- Режим "-input-file -" для завантаження URL, що надходять через стандартний вхідний потік.
- Перевірка області дії Cookie за каталогом публічних суфіксів доменів (Public Suffix List) для ізоляції один від одного різних сайтів, розміщених в одному домені другого рівня (наприклад, a.github.io і b.github.io).
- Підтримка завантаження потокового мовлення у форматі ICEcast/SHOUTcast.
Джерело: opennet.ru