Pelayan HTTP Node mengendalikan permintaan proksi biasa melalui callback permintaannya. CONNECT mengambil laluan lain: pelayan memancarkan connect bersama permintaan, soket klien dan buffer head.

Peristiwa itu ialah penyerahan antara penghuraian HTTP dan terowong. Tiada objek ServerResponse biasa untuk terus digunakan bagi trafik terowong.

ArgumenApa yang dibawanya
reqPermintaan CONNECT, termasuk autoriti destinasinya dan pengepala
clientSocketSambungan kembali kepada klien
headData terowong yang telah dibaca Node melepasi pengepala HTTP, mungkin kosong

Selesaikan keputusan HTTP sebelum menyampaikan bait

Sahkan hos dan port yang diminta, gunakan dasar akses dan pengesahan proksi, dan wujudkan sambungan huluan. CONNECT mengenal pasti autoriti seperti service.example:443; huraikan bentuk itu dengan mengambil kira autoriti IPv6 dan bukannya membahagi secara buta pada setiap titik bertindih.

Apabila terowong diterima, hantar respons HTTP yang berjaya diikuti baris kosong penamatnya. Kemudian teruskan sebarang bait head ke huluan sebelum meneruskan dengan bait seterusnya daripada soket klien. Melampirkan pendengar data baharu tidak dapat memulihkan buffer yang sudah dihantar secara berasingan kepada pengendali.

Contoh terowong rasmi Node melakukan penyerahan itu dengan serverSocket.write(head) sebelum menyambungkan kedua-dua arah aliran. Contoh kecilnya menggambarkan peralihan; proksi yang digunakan juga memerlukan percubaan sambungan terhad, kawalan akses dan pengendalian kitaran hayat.

Selepas kejayaan, bait itu milik protokol perkhidmatan

Respons CONNECT yang berjaya menukar sambungan menjadi aliran bait. Jika sasarannya laman HTTPS, pertukaran TLSnya bergerak di dalam aliran itu. Sekadar menyalurkannya ke terowong tidak memerlukan proksi mengeluarkan sijil laman web pengganti.

Sebelum menerima CONNECT, ralat HTTP boleh menjelaskan sebab penolakan. Selepas diterima, menulis HTTP 500 ke dalam aliran akan menyuntik bait ke dalam protokol terowong. Sebaliknya, tamatkan atau musnahkan sambungan yang sesuai pada kegagalan kemudian.

Sambungkan kedua-dua arah dengan pengendalian aliran sedar tekanan balik, dan tentukan bagaimana peristiwa end, error dan close menamatkan rakan. Kekalkan buffer head awal sebagai sebahagian daripada model pemilikan yang sama; ia data aplikasi, bukan pengepala HTTP lebihan untuk dibuang.

Artikel berkaitan