หลังจากสามปีครึ่งของการพัฒนา ได้มีการนำเสนอโครงการ GNU Wget2 รุ่นเสถียรรุ่นแรก ซึ่งพัฒนาโปรแกรมเวอร์ชันที่ออกแบบใหม่ทั้งหมดสำหรับการดาวน์โหลดเนื้อหา GNU Wget แบบเรียกซ้ำโดยอัตโนมัติ GNU Wget2 ได้รับการออกแบบและเขียนใหม่ตั้งแต่ต้น และมีความโดดเด่นในการย้ายฟังก์ชันพื้นฐานของเว็บไคลเอ็นต์ไปยังไลบรารี libwget ซึ่งสามารถใช้แยกกันในแอปพลิเคชันได้ ยูทิลิตี้นี้ได้รับอนุญาตภายใต้ GPLv3+ และไลบรารีได้รับอนุญาตภายใต้ LGPLv3+
แทนที่จะค่อยๆ ปรับปรุงฐานโค้ดที่มีอยู่ มีการตัดสินใจที่จะทำซ้ำทุกอย่างตั้งแต่เริ่มต้น และสร้างสาขา Wget2 แยกต่างหากเพื่อใช้แนวคิดในการปรับโครงสร้างใหม่ เพิ่มฟังก์ชันการทำงาน และทำการเปลี่ยนแปลงที่ทำลายความเข้ากันได้ ยกเว้นการเลิกใช้โปรโตคอล FTP และรูปแบบ WARC แล้ว wget2 สามารถทำหน้าที่เป็นการทดแทนที่โปร่งใสสำหรับยูทิลิตี้ wget แบบคลาสสิกในสถานการณ์ส่วนใหญ่
ดังที่กล่าวไปแล้ว wget2 มีการบันทึกความแตกต่างในด้านพฤติกรรม มีตัวเลือกเพิ่มเติมประมาณ 30 ตัวเลือก และหยุดรองรับตัวเลือกหลายสิบตัวเลือก รวมถึงการประมวลผลตัวเลือกเช่น “-ask-password”, “-header”, “-exclude-directories”, “-ftp*”, “-warc*”, “-limit-rate”, “-relative” ได้รับ หยุด " และ "--ยกเลิกการเชื่อมโยง"
นวัตกรรมที่สำคัญได้แก่:
- การย้ายฟังก์ชันการทำงานไปยังไลบรารี libwget
- การเปลี่ยนไปใช้สถาปัตยกรรมแบบมัลติเธรด
- ความสามารถในการสร้างการเชื่อมต่อหลายรายการพร้อมกันและดาวน์โหลดไปยังหลายเธรด นอกจากนี้ยังเป็นไปได้ที่จะขนานการดาวน์โหลดไฟล์หนึ่งไฟล์ที่แบ่งออกเป็นบล็อกโดยใช้ตัวเลือก "-chunk-size"
- รองรับโปรโตคอล HTTP/2
- ใช้ส่วนหัว HTTP If-Modified-Since เพื่อดาวน์โหลดเฉพาะข้อมูลที่แก้ไข
- เปลี่ยนไปใช้ตัวจำกัดแบนด์วิธภายนอก เช่น หยด
- รองรับส่วนหัว 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
- รองรับคำสั่ง 'รวม' ในไฟล์การกำหนดค่าและการกระจายการตั้งค่าไปยังไฟล์ต่างๆ (/etc/wget/conf.d/*.conf)
- กลไกการแคชแบบสอบถาม DNS ในตัว
- ความเป็นไปได้ในการบันทึกเนื้อหาโดยการเปลี่ยนการเข้ารหัสเอกสาร
- การบัญชีสำหรับไฟล์ "robots.txt" ระหว่างการดาวน์โหลดแบบเรียกซ้ำ
- โหมดการเขียนที่เชื่อถือได้พร้อมการเรียก fsync() หลังจากบันทึกข้อมูล
- ความสามารถในการดำเนินการเซสชัน TLS ที่ถูกขัดจังหวะต่อ รวมถึงแคชและบันทึกพารามิเตอร์เซสชัน TLS ลงในไฟล์
- โหมด "--input-file-" สำหรับการโหลด URL ที่มาจากสตรีมอินพุตมาตรฐาน
- การตรวจสอบขอบเขตของคุกกี้กับไดเร็กทอรีของส่วนต่อท้ายที่เป็นสาธารณสมบัติ (รายการส่วนต่อท้ายสาธารณะ) เพื่อแยกออกจากไซต์ต่างๆ ที่โฮสต์ในโดเมนระดับที่สองเดียวกัน (เช่น "a.github.io" และ "b.github ไอโอ”)
- รองรับการดาวน์โหลดสตรีมมิ่ง ICEcast/SHOUTcast
ที่มา: opennet.ru