Rilis JavaScript Node.js 17.0 sisi server

Rilis Node.js 17.0, sebuah platform untuk mengeksekusi aplikasi jaringan dalam JavaScript, telah dilakukan. Node.js 17.0 adalah cabang dukungan reguler dengan pembaruan hingga Juni 2022. Dalam beberapa hari mendatang, stabilisasi cabang Node.js 16 akan selesai, yang akan menerima status LTS dan akan didukung hingga April 2024. Pemeliharaan cabang Node.js 14.0 LTS sebelumnya akan berlangsung hingga April 2023, dan cabang 12.0 LTS sebelumnya hingga April 2022.

Perbaikan utama:

  • Mesin V8 telah diperbarui ke versi 9.5.
  • Implementasi varian API dasar berdasarkan penggunaan antarmuka komputasi asinkron Promise terus berlanjut. Selain Promise Timers Promises dan Streams Promises API yang diusulkan sebelumnya, Node.js 17.0 memperkenalkan Readline Promise API untuk membaca data baris demi baris menggunakan modul readline. import * as readline from 'node:readline/promises'; impor { stdin sebagai masukan, stdout sebagai keluaran } dari 'proses'; const rl = readline.createInterface({ input, output }); const answer = await rl.question('Apa pendapat Anda tentang Node.js?'); console.log('Terima kasih atas tanggapan Anda yang berharga: ${answer}'); rl.close();
  • Pustaka OpenSSL yang disediakan telah diperbarui ke versi 3.0 (menggunakan garpu quictls/openssl dengan dukungan protokol QUIC diaktifkan).
  • Pastikan versi Node.js ditampilkan dalam pelacakan tumpukan untuk kesalahan fatal yang menyebabkan aplikasi berhenti.

Selain itu, kami dapat menyebutkan penghapusan dua kerentanan di cabang Node.js saat ini (CVE-2021-22959, CVE-2021-22960), yang memungkinkan untuk melakukan serangan dari kelas HTTP Request Smuggling (HRS), yang memungkinkan, melalui pengiriman permintaan klien yang dirancang khusus, untuk memasukkan konten permintaan dari pengguna lain yang diproses di utas yang sama antara frontend dan backend (misalnya, Anda dapat mencapai penggantian kode JavaScript berbahaya di sesi pengguna lain). Detail akan diungkapkan nanti, tetapi untuk saat ini hanya diketahui bahwa masalah tersebut disebabkan oleh kesalahan penanganan spasi antara nama header HTTP dan titik dua, serta perbedaan penanganan karakter carriage return dan line feed di blok parameter yang digunakan saat meneruskan badan permintaan dalam potongan dalam mode "terpotong". ".

Ingatlah bahwa platform Node.js dapat digunakan baik untuk pemeliharaan server aplikasi Web maupun untuk membuat program jaringan klien dan server biasa. Untuk memperluas fungsionalitas aplikasi untuk Node.js, kumpulan besar modul telah disiapkan, di mana Anda dapat menemukan modul dengan penerapan HTTP, SMTP, XMPP, DNS, FTP, IMAP, server dan klien POP3, modul untuk integrasi dengan berbagai kerangka web, penangan WebSocket dan Ajax , konektor DBMS (MySQL, PostgreSQL, SQLite, MongoDB), mesin templating, mesin CSS, implementasi algoritma kripto dan sistem otorisasi (OAuth), parser XML.

Untuk memastikan pemrosesan sejumlah besar permintaan paralel, Node.js menggunakan model eksekusi kode asinkron berdasarkan penanganan peristiwa non-pemblokiran dan definisi penangan panggilan balik. Metode yang didukung untuk koneksi multiplexing adalah epoll, kqueue, /dev/poll, dan pilih. Untuk multiplexing koneksi, perpustakaan libuv digunakan, yang merupakan add-on untuk libev pada sistem Unix dan IOCP pada Windows. Pustaka libeio digunakan untuk membuat kumpulan utas, dan c-ares terintegrasi untuk melakukan kueri DNS dalam mode non-pemblokiran. Semua panggilan sistem yang menyebabkan pemblokiran dijalankan di dalam kumpulan utas dan kemudian, seperti penangan sinyal, mentransfer kembali hasil pekerjaannya melalui pipa (pipa) yang tidak disebutkan namanya. Eksekusi kode JavaScript disediakan melalui penggunaan mesin V8 yang dikembangkan oleh Google (selain itu, Microsoft sedang mengembangkan versi Node.js dengan mesin Chakra-Core).

Pada intinya, Node.js mirip dengan Perl AnyEvent, Ruby Event Machine, framework Python Twisted, dan implementasi event Tcl, tetapi event loop di Node.js disembunyikan dari pengembang dan menyerupai penanganan event di aplikasi web yang sedang berjalan di browser. Saat menulis aplikasi untuk node.js, Anda perlu mempertimbangkan spesifikasi pemrograman berbasis peristiwa, misalnya, alih-alih melakukan "var result = db.query("select..");" dengan menunggu penyelesaian pekerjaan dan pemrosesan hasil selanjutnya, Node.js menggunakan prinsip eksekusi asinkron, yaitu kode diubah menjadi "db.query("pilih..", fungsi (hasil) {pemrosesan hasil});", di mana kontrol akan langsung beralih ke kode lebih lanjut, dan hasil kueri akan diproses saat data tiba.

Sumber: opennet.ru

Tambah komentar