JavaScript ฝั่งเซิร์ฟเวอร์ Node.js 17.0 เปิดตัว

Node.js 17.0 ซึ่งเป็นแพลตฟอร์มสำหรับเรียกใช้แอปพลิเคชันเครือข่ายใน JavaScript ได้รับการเผยแพร่แล้ว Node.js 17.0 เป็นสาขาการสนับสนุนปกติที่จะยังคงรับการอัปเดตต่อไปจนถึงเดือนมิถุนายน 2022 ในอีกไม่กี่วันข้างหน้า การรักษาเสถียรภาพของสาขา Node.js 16 จะเสร็จสมบูรณ์ ซึ่งจะได้รับสถานะ LTS และจะรองรับจนถึงเดือนเมษายน 2024 การบำรุงรักษาสาขา LTS ก่อนหน้าของ Node.js 14.0 จะคงอยู่จนถึงเดือนเมษายน 2023 และปีก่อนสาขา LTS 12.0 สุดท้ายจนถึงเดือนเมษายน 2022

การปรับปรุงหลัก:

  • เครื่องยนต์ V8 ได้รับการอัพเดตเป็นเวอร์ชัน 9.5
  • การใช้งานตัวแปรของ API พื้นฐานตามการใช้อินเทอร์เฟซการประมวลผลแบบอะซิงโครนัสของ Promise ยังคงดำเนินต่อไป นอกเหนือจาก Timers Promises และ Streams Promises API ที่นำเสนอก่อนหน้านี้แล้ว Node.js 17.0 ยังแนะนำ Readline Promise API สำหรับการอ่านข้อมูลทีละบรรทัดโดยใช้โมดูล readline นำเข้า * เป็น readline จาก 'node:readline/promises'; นำเข้า { stdin เป็นอินพุต, stdout เป็นเอาต์พุต } จาก 'กระบวนการ'; const rl = readline.createInterface ({ อินพุต, เอาต์พุต }); const answer = await rl.question('คุณคิดอย่างไรกับ Node.js?'); console.log('ขอขอบคุณสำหรับข้อเสนอแนะอันมีค่าของคุณ: ${answer}'); rl.ปิด();
  • ไลบรารี OpenSSL ที่ให้มาได้รับการอัปเดตเป็นเวอร์ชัน 3.0 (ใช้ quictls/openssl fork ที่เปิดใช้งานการรองรับโปรโตคอล QUIC)
  • เปิดใช้งานเวอร์ชัน Node.js ให้แสดงในการติดตามสแต็กที่ส่งออกในกรณีที่มีข้อผิดพลาดร้ายแรงที่ทำให้แอปพลิเคชันหยุดทำงาน

นอกจากนี้ เราสามารถกล่าวถึงการกำจัดช่องโหว่สองช่องโหว่ในสาขาปัจจุบันของ Node.js (CVE-2021-22959, CVE-2021-22960) ซึ่งทำให้สามารถดำเนินการโจมตี “HTTP Request Smuggling” (HRS) ได้ ซึ่ง ช่วยให้เราสามารถแทรกเข้าไปในเนื้อหาของคำขอของผู้ใช้รายอื่นที่ประมวลผลในชุดข้อความเดียวกันระหว่างส่วนหน้าและส่วนหลัง (เช่น รหัส JavaScript ที่เป็นอันตรายสามารถแทรกลงในเซสชันของผู้ใช้รายอื่นได้) รายละเอียดจะถูกเปิดเผยในภายหลัง แต่สำหรับตอนนี้เราทราบเพียงว่าปัญหาเกิดจากการจัดการช่องว่างระหว่างชื่อส่วนหัว HTTP และโคลอนอย่างไม่ถูกต้อง รวมถึงการจัดการการขึ้นบรรทัดใหม่และอักขระป้อนบรรทัดที่แตกต่างกันในบล็อกพารามิเตอร์ที่ใช้ในการส่งสัญญาณ เนื้อหาคำขอในส่วนต่างๆ ในโหมด "chunked" "

ให้เราระลึกว่าแพลตฟอร์ม Node.js สามารถใช้ทั้งสำหรับการสนับสนุนแอปพลิเคชันเว็บฝั่งเซิร์ฟเวอร์และสำหรับการสร้างโปรแกรมเครือข่ายไคลเอ็นต์และเซิร์ฟเวอร์ทั่วไป เพื่อขยายฟังก์ชันการทำงานของแอปพลิเคชันสำหรับ Node.js จึงมีการเตรียมชุดโมดูลจำนวนมากซึ่งคุณสามารถค้นหาโมดูลที่มีการใช้งาน HTTP, SMTP, XMPP, DNS, FTP, IMAP, เซิร์ฟเวอร์และไคลเอนต์ POP3 โมดูลสำหรับการรวม ด้วยเฟรมเวิร์กเว็บที่หลากหลาย, ตัวจัดการ WebSocket และ Ajax, ตัวเชื่อมต่อไปยัง DBMS (MySQL, PostgreSQL, SQLite, MongoDB), เอ็นจิ้นเทมเพลต, เอ็นจิ้น CSS, การใช้งานอัลกอริธึมการเข้ารหัสและระบบการอนุญาต (OAuth), ตัวแยกวิเคราะห์ XML

เพื่อให้แน่ใจว่าการประมวลผลคำขอแบบขนานจำนวนมาก Node.js ใช้โมเดลการดำเนินการโค้ดแบบอะซิงโครนัสตามการจัดการเหตุการณ์ที่ไม่ปิดกั้นและคำจำกัดความของตัวจัดการการเรียกกลับ วิธีการที่รองรับสำหรับการเชื่อมต่อมัลติเพล็กซ์คือ epoll, kqueue, /dev/poll และ select สำหรับการเชื่อมต่อมัลติเพล็กซ์ จะใช้ไลบรารี libuv ซึ่งเป็นส่วนเสริมสำหรับ libev บนระบบ Unix และ IOCP บน Windows ไลบรารี libeio ใช้เพื่อสร้างเธรดพูล และรวม c-ares เพื่อดำเนินการสืบค้น DNS ในโหมดไม่ปิดกั้น การเรียกใช้ระบบทั้งหมดที่ทำให้เกิดการบล็อกจะดำเนินการภายในเธรดพูล จากนั้น เช่นตัวจัดการสัญญาณ ถ่ายโอนผลลัพธ์ของการทำงานกลับผ่านไพพ์ที่ไม่มีชื่อ (ไพพ์) การดำเนินการโค้ด JavaScript มีให้โดยใช้เอ็นจิ้น V8 ที่พัฒนาโดย Google (นอกจากนี้ Microsoft กำลังพัฒนาเวอร์ชันของ Node.js ด้วยเอ็นจิ้น Chakra-Core)

โดยพื้นฐานแล้ว Node.js นั้นคล้ายกับ Perl AnyEvent, Ruby Event Machine, Python Twisted frameworks และ Tcl events แต่ event loop ใน Node.js ถูกซ่อนจากผู้พัฒนาและคล้ายกับการจัดการเหตุการณ์ในเว็บแอปพลิเคชันที่กำลังทำงานอยู่ ในเบราว์เซอร์ เมื่อเขียนแอปพลิเคชันสำหรับ node.js คุณต้องพิจารณาลักษณะเฉพาะของการเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์ เช่น แทนที่จะทำ "var result = db.query("select..");" ด้วยการรอการทำงานให้เสร็จสิ้นและการประมวลผลผลลัพธ์ที่ตามมา Node.js ใช้หลักการของการดำเนินการแบบอะซิงโครนัสนั่นคือ โค้ดจะถูกแปลงเป็น "db.query("select..", ฟังก์ชัน (ผลลัพธ์) {การประมวลผลผลลัพธ์});" ซึ่งการควบคุมจะส่งผ่านไปยังโค้ดเพิ่มเติมทันที และผลลัพธ์ของคิวรีจะถูกประมวลผลเมื่อข้อมูลมาถึง

ที่มา: opennet.ru

เพิ่มความคิดเห็น