Sunucu taraflı JavaScript Node.js 17.0 sürümü

Ağ uygulamalarını JavaScript'te çalıştırmaya yönelik bir platform olan Node.js 17.0 piyasaya sürüldü. Node.js 17.0, Haziran 2022'ye kadar güncelleme almaya devam edecek düzenli bir destek şubesidir. LTS statüsü alacak ve Nisan 16 tarihine kadar desteklenecek olan Node.js 2024 şubesinin stabilizasyonu önümüzdeki günlerde tamamlanacak. Node.js 14.0'ın önceki LTS şubesinin bakımı Nisan 2023'e kadar, son LTS şubesi 12.0'dan önceki yılın bakımı ise Nisan 2022'ye kadar sürecek.

Ana iyileştirmeler:

  • V8 motoru 9.5 sürümüne güncellendi.
  • Promise eşzamansız bilgi işlem arayüzünün kullanımına dayalı temel API çeşitlerinin uygulanmasına devam edilmiştir. Daha önce sunulan Timers Promises ve Streams Promises API'lerine ek olarak Node.js 17.0, readline modülünü kullanarak verileri satır satır okumak için Readline Promise API'sini sunar. 'node:readline/promises'ten *'ı okuma satırı olarak içe aktarın; 'işlem'den { girdi olarak stdin, çıktı olarak stdout }'u içe aktarın; const rl = readline.createInterface({ giriş, çıkış }); const cevap = wait rl.question('Node.js hakkında ne düşünüyorsunuz?'); console.log('Değerli geri bildiriminiz için teşekkür ederiz: ${answer}'); rl.close();
  • Sağlanan OpenSSL kitaplığı sürüm 3.0'a güncellendi (QUIC protokol desteği etkinleştirilmiş bir quictls/openssl çatalı kullanıldı).
  • Uygulamanın sonlandırılmasına neden olan önemli hatalar durumunda çıktı olarak alınan yığın izlemelerinde Node.js sürümünün görüntülenmesi etkinleştirildi.

Ayrıca Node.js'nin mevcut dallarındaki (CVE-2021-22959, CVE-2021-22960) iki zafiyetin ortadan kaldırılarak, “HTTP İstek Kaçakçılığı” (HRS) saldırılarının gerçekleştirilmesini mümkün kıldığını söyleyebiliriz. aynı iş parçacığında işlenen diğer kullanıcıların isteklerinin içeriğini ön uç ve arka uç arasında sıkıştırmamıza izin verir (örneğin, kötü amaçlı JavaScript kodu başka bir kullanıcının oturumuna eklenebilir). Ayrıntılar daha sonra açıklanacak, ancak şimdilik yalnızca sorunların HTTP başlık adı ile iki nokta üst üste arasındaki boşlukların yanlış işlenmesinden ve iletim sırasında kullanılan parametre bloğundaki satır başı ve satır besleme karakterlerinin farklı işlenmesinden kaynaklandığını biliyoruz. "parçalanmış" modda parçalar halinde istek gövdesi "

Node.js platformunun hem Web uygulamalarının sunucu tarafı desteği için hem de sıradan istemci ve sunucu ağ programlarının oluşturulması için kullanılabileceğini hatırlatalım. Node.js uygulamalarının işlevselliğini genişletmek için, HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 sunucuları ve istemcilerinin uygulamalı modüllerini, entegrasyon modüllerini bulabileceğiniz geniş bir modül koleksiyonu hazırlanmıştır. çeşitli web çerçeveleri, WebSocket ve Ajax işleyicileri, DBMS bağlayıcıları (MySQL, PostgreSQL, SQLite, MongoDB), şablon motorları, CSS motorları, şifreleme algoritmalarının ve yetkilendirme sistemlerinin (OAuth) uygulamaları, XML ayrıştırıcıları.

Node.js, çok sayıda paralel isteğin işlenmesini sağlamak için engellemeyen olay işlemeye ve geri arama işleyicilerinin tanımına dayalı eşzamansız bir kod yürütme modeli kullanır. Bağlantıları çoğaltmak için desteklenen yöntemler epoll, kqueue, /dev/poll ve select'tir. Bağlantı çoğullama için Unix sistemlerde libev ve Windows üzerinde IOCP için bir eklenti olan libuv kitaplığı kullanılır. libeio kitaplığı bir iş parçacığı havuzu oluşturmak için kullanılır ve c-ares, engellemesiz modda DNS sorguları gerçekleştirmek için entegre edilmiştir. Engellemeye neden olan tüm sistem çağrıları, iş parçacığı havuzunda yürütülür ve ardından, sinyal işleyiciler gibi, çalışmalarının sonucunu adsız bir kanal (boru) aracılığıyla geri aktarır. JavaScript kodunun yürütülmesi, Google tarafından geliştirilen V8 motorunun kullanılmasıyla sağlanır (ayrıca Microsoft, Chakra-Core motoruyla Node.js'nin bir sürümünü geliştirmektedir).

Node.js özünde Perl AnyEvent, Ruby Event Machine, Python Twisted çerçeveleri ve Tcl olay uygulamasına benzer, ancak Node.js'deki olay döngüsü geliştiriciden gizlenir ve çalışan bir web uygulamasındaki olay işlemeye benzer. tarayıcıda. node.js için uygulama yazarken, örneğin "var result = db.query("select..");" yapmak yerine olay güdümlü programlamanın özelliklerini göz önünde bulundurmanız gerekir. işin tamamlanmasını ve ardından sonuçların işlenmesini bekleyen Node.js, eşzamansız yürütme ilkesini kullanır, yani. kod "db.query("select..", function (result) {sonuç işleme});" biçimine dönüştürülür, burada denetim anında diğer koda geçer ve veri geldikçe sorgu sonucu işlenir.

Kaynak: opennet.ru

Yorum ekle