Server tomonidagi JavaScript Node.js 17.0 versiyasi

JavaScript-da tarmoq ilovalarini ishga tushirish uchun platforma Node.js 17.0 chiqarildi. Node.js 17.0 - bu 2022-yil iyunigacha yangilanishlarni olishni davom ettiradigan muntazam qo‘llab-quvvatlash bo‘limi. Yaqin kunlarda Node.js 16 filialini barqarorlashtirish tugallanadi, u LTS maqomini oladi va 2024 yil apreligacha qo'llab-quvvatlanadi. Node.js 14.0 ning oldingi LTS filialiga texnik xizmat ko‘rsatish 2023-yil apreligacha va oxirgi LTS 12.0 filialidan oldingi yil 2022-yil apreligacha davom etadi.

Asosiy yaxshilanishlar:

  • V8 dvigateli 9.5 versiyasiga yangilandi.
  • Promise asinxron hisoblash interfeysidan foydalanishga asoslangan asosiy API variantlarini joriy etish davom ettirildi. Oldin taklif qilingan Timers Promises va Streams Promises API-lariga qo'shimcha ravishda, Node.js 17.0 Readline moduli yordamida ma'lumotlarni satr bo'yicha o'qish uchun Readline Promise API-ni taqdim etadi. import * 'tugun:readline/promises'dan o'qish qatori sifatida; import { stdin kirish sifatida, stdout chiqish sifatida } 'jarayon'dan; const rl = readline.createInterface({kirish, chiqish }); const answer = await rl.question('Node.js haqida qanday fikrdasiz?'); console.log('Qimmatli fikr-mulohazangiz uchun rahmat: ${answer}'); rl.close();
  • Taqdim etilgan OpenSSL kutubxonasi 3.0 versiyasiga yangilandi (QUIC protokolini qo'llab-quvvatlash yoqilgan quictls/openssl vilkalari ishlatiladi).
  • Node.js versiyasi ilovaning tugatilishiga olib keladigan jiddiy xatolarda chiqariladigan stek izlarida ko'rsatilishi uchun yoqilgan.

Bundan tashqari, Node.js ning joriy filiallarida (CVE-2021-22959, CVE-2021-22960) ikkita zaiflik yo‘q qilinganini ta’kidlashimiz mumkin, bu esa “HTTP Request Smuggling” (HRS) hujumlarini amalga oshirish imkonini beradi. bizga frontend va backend o'rtasida bir xil oqimda qayta ishlangan boshqa foydalanuvchilarning so'rovlari mazmuniga kirishga imkon bering (masalan, zararli JavaScript kodi boshqa foydalanuvchining sessiyasiga kiritilishi mumkin). Tafsilotlar keyinroq oshkor qilinadi, ammo hozircha biz bilamizki, muammolar HTTP sarlavhasi nomi va ikki nuqta o'rtasidagi bo'shliqlarni noto'g'ri ishlatish, shuningdek uzatish paytida ishlatiladigan parametrlar blokidagi karetni qaytarish va chiziqni uzatish belgilarining turli xil ishlov berish natijasida yuzaga keladi. so'rov tanasini qismlarga bo'lib "bo'laklangan" rejimda "

Eslatib o'tamiz, Node.js platformasidan ham veb-ilovalarga serverga texnik xizmat ko'rsatish, ham oddiy mijoz va server tarmoq dasturlarini yaratish uchun foydalanish mumkin. Node.js uchun ilovalarning funksionalligini kengaytirish uchun modullarning katta to‘plami tayyorlandi, ularda HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 serverlari va mijozlari, integratsiya modullarini amalga oshirish modullarini topishingiz mumkin. turli veb-ramkalar, WebSocket va Ajax ishlov beruvchilari, DBMS konnektorlari (MySQL, PostgreSQL, SQLite, MongoDB), shablonlash dvigatellari, CSS dvigatellari, kripto algoritmlari va avtorizatsiya tizimlari (OAuth), XML tahlilchilari.

Ko'p sonli parallel so'rovlarni qayta ishlashni ta'minlash uchun Node.js bloklanmaydigan hodisalarni qayta ishlash va qayta qo'ng'iroqlarni qayta ishlash vositalarini aniqlashga asoslangan asinxron kodni bajarish modelidan foydalanadi. Ulanishlarni multiplekslash uchun qo'llab-quvvatlanadigan usullar epoll, kqueue, /dev/poll va tanlash hisoblanadi. Ulanishni multiplekslash uchun Unix tizimlarida libev va Windowsda IOCP uchun qo'shimcha bo'lgan libuv kutubxonasidan foydalaniladi. Libeio kutubxonasi iplar hovuzini yaratish uchun ishlatiladi va c-ares bloklanmagan rejimda DNS so'rovlarini bajarish uchun birlashtirilgan. Bloklashni keltirib chiqaradigan barcha tizim qo'ng'iroqlari iplar hovuzi ichida amalga oshiriladi va keyin signal ishlov beruvchilari kabi o'z ishining natijasini noma'lum quvur (quvur) orqali qaytaradi. JavaScript kodining bajarilishi Google tomonidan ishlab chiqilgan V8 dvigatelidan foydalanish orqali ta'minlanadi (bundan tashqari, Microsoft Chakra-Core dvigateli bilan Node.js versiyasini ishlab chiqmoqda).

Asosan, Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted ramkalari va Tcl hodisalarini amalga oshirishga o'xshaydi, biroq Node.js-dagi voqealar tsikli ishlab chiquvchidan yashirin va ishlayotgan veb-ilovada hodisalarni qayta ishlashga o'xshaydi. brauzerda. Node.js uchun ilovalar yozishda, masalan, "var natija = db.query("select..");" qilish o'rniga, voqealarga asoslangan dasturlashning o'ziga xos xususiyatlarini hisobga olishingiz kerak. Ishning tugashini kutish va natijalarni keyinchalik qayta ishlash bilan Node.js asinxron bajarish tamoyilidan foydalanadi, ya'ni. kod "db.query("tanlang..", funktsiya (natija) {natijani qayta ishlash});" ga o'zgartiriladi, bunda boshqaruv darhol keyingi kodga o'tadi va ma'lumotlar kelishi bilan so'rov natijasi qayta ishlanadi.

Manba: opennet.ru

a Izoh qo'shish