Phát hành nền tảng JavaScript phía máy chủ Node.js 17.0

Node.js 17.0, một nền tảng chạy các ứng dụng mạng bằng JavaScript, đã được phát hành. Node.js 17.0 là nhánh hỗ trợ thường xuyên sẽ tiếp tục nhận được các bản cập nhật cho đến tháng 2022 năm 16. Trong những ngày tới, quá trình ổn định nhánh Node.js 2024 sẽ hoàn tất, nhánh này sẽ nhận được trạng thái LTS và sẽ được hỗ trợ cho đến tháng 14.0 năm 2023. Việc bảo trì nhánh LTS trước đây của Node.js 12.0 sẽ kéo dài đến tháng 2022 năm XNUMX và năm trước nhánh LTS XNUMX cuối cùng sẽ kéo dài đến tháng XNUMX năm XNUMX.

Cải tiến chính:

  • Động cơ V8 đã được cập nhật lên phiên bản 9.5.
  • Việc triển khai các biến thể của API cơ bản dựa trên việc sử dụng giao diện điện toán không đồng bộ Promise vẫn tiếp tục. Ngoài các API Lời hứa hẹn giờ và API Lời hứa luồng được cung cấp trước đó, Node.js 17.0 còn giới thiệu API Lời hứa Readline để đọc từng dòng dữ liệu bằng mô-đun readline. nhập * dưới dạng dòng đọc từ 'node:readline/promises'; nhập { stdin làm đầu vào, stdout làm đầu ra } từ 'process'; const rl = readline.createInterface({ đầu vào, đầu ra }); const câu trả lời = đang chờ rl.question('Bạn nghĩ gì về Node.js?'); console.log('Cảm ơn phản hồi có giá trị của bạn: ${answer}'); rl.close();
  • Thư viện OpenSSL được cung cấp đã được cập nhật lên phiên bản 3.0 (sử dụng một nhánh quictls/openssl có hỗ trợ giao thức QUIC).
  • Đã bật phiên bản Node.js hiển thị trong dấu vết ngăn xếp được xuất ra trong trường hợp có lỗi nghiêm trọng khiến ứng dụng bị chấm dứt.

Ngoài ra, chúng ta có thể đề cập đến việc loại bỏ hai lỗ hổng trong các nhánh hiện tại của Node.js (CVE-2021-22959, CVE-2021-22960), giúp thực hiện các cuộc tấn công “Truyền tải yêu cầu HTTP” (HRS). cho phép chúng tôi đưa vào nội dung các yêu cầu của người dùng khác được xử lý trong cùng một luồng giữa giao diện người dùng và phụ trợ (ví dụ: mã JavaScript độc hại có thể được chèn vào phiên của người dùng khác). Thông tin chi tiết sẽ được tiết lộ sau, nhưng hiện tại chúng tôi chỉ biết rằng sự cố xảy ra do việc xử lý không chính xác khoảng trắng giữa tên tiêu đề HTTP và dấu hai chấm, cũng như cách xử lý khác nhau về ký tự xuống dòng và ký tự nguồn cấp dòng trong khối tham số được sử dụng khi truyền phần thân yêu cầu được chia thành các phần ở chế độ “chunked” "

Chúng ta hãy nhớ lại rằng nền tảng Node.js có thể được sử dụng cho cả mục đích hỗ trợ phía máy chủ cho các ứng dụng Web và để tạo các chương trình mạng máy chủ và máy khách thông thường. Để mở rộng chức năng của các ứng dụng cho Node.js, một bộ sưu tập lớn các mô-đun đã được chuẩn bị, trong đó bạn có thể tìm thấy các mô-đun triển khai các máy chủ và máy khách HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, các mô-đun để tích hợp với nhiều khung web, trình xử lý WebSocket và Ajax khác nhau, trình kết nối với DBMS (MySQL, PostgreSQL, SQLite, MongoDB), công cụ tạo mẫu, công cụ CSS, triển khai thuật toán mật mã và hệ thống ủy quyền (OAuth), trình phân tích cú pháp XML.

Để đảm bảo xử lý một số lượng lớn các yêu cầu song song, Node.js sử dụng mô hình thực thi mã không đồng bộ dựa trên xử lý sự kiện không chặn và định nghĩa về trình xử lý gọi lại. Các phương thức được hỗ trợ cho kết nối ghép kênh là epoll, kqueue, /dev/poll và select. Để ghép kênh kết nối, thư viện libuv được sử dụng, đây là tiện ích bổ sung cho libev trên hệ thống Unix và IOCP trên Windows. Thư viện libeio được sử dụng để tạo nhóm luồng và c-ares được tích hợp để thực hiện các truy vấn DNS ở chế độ không chặn. Tất cả các cuộc gọi hệ thống gây ra chặn được thực thi bên trong nhóm luồng và sau đó, giống như các bộ xử lý tín hiệu, chuyển kết quả công việc của chúng trở lại thông qua một đường ống (pipe) không tên. Việc thực thi mã JavaScript được cung cấp thông qua việc sử dụng công cụ V8 do Google phát triển (ngoài ra, Microsoft đang phát triển phiên bản Node.js với công cụ Chakra-Core).

Về cốt lõi, Node.js tương tự như các khung công tác Perl AnyEvent, Ruby Event Machine, Python Twisted và triển khai sự kiện Tcl, nhưng vòng lặp sự kiện trong Node.js bị ẩn khỏi nhà phát triển và giống như xử lý sự kiện trong ứng dụng web đang chạy trong trình duyệt. Ví dụ: khi viết ứng dụng cho node.js, bạn cần xem xét các chi tiết cụ thể của lập trình hướng sự kiện, thay vì thực hiện "var result = db.query("select..");" với việc chờ hoàn thành công việc và xử lý kết quả sau đó, Node.js sử dụng nguyên tắc thực thi không đồng bộ, tức là mã được chuyển đổi thành "db.query("select..", function (result) {result processing});", trong đó kiểm soát sẽ ngay lập tức chuyển sang mã tiếp theo và kết quả truy vấn sẽ được xử lý khi dữ liệu đến.

Nguồn: opennet.ru

Thêm một lời nhận xét