Node.js CONNECT emal ediciləri head buferini qorumalıdır
Node-un CONNECT soketini və head buferini HTTP-dən tunelə keçid sərhədində idarə edin, başlıqlardan sonra artıq oxunmuş baytları qoruyun.
Node HTTP serveri adi proxy sorğusunu sorğu callback-i vasitəsilə emal edir. CONNECT başqa yol tutur: server sorğu, müştəri soketi və head buferi ilə birlikdə connect hadisəsini yayır.
Bu hadisə HTTP analizi ilə tunel arasındakı ötürmə nöqtəsidir. Tuneldən keçən trafik üçün istifadəyə davam ediləcək adi ServerResponse obyekti yoxdur.
| Arqument | Nə daşıyır |
|---|---|
req | CONNECT sorğusu, o cümlədən təyinat orqanı və başlıqları |
clientSocket | Müştəriyə geri qayıdan bağlantı |
head | Node-un HTTP başlıqlarından sonra artıq oxuduğu tunel məlumatları, boş ola bilər |
Baytları ötürməzdən əvvəl HTTP qərarını tamamlayın
Tələb olunan host və portu yoxlayın, proxy-nin giriş və autentifikasiya siyasətini tətbiq edin və yuxarı axın bağlantısını qurun. CONNECT service.example:443 kimi bir orqanı müəyyən edir; bu formanı hər iki nöqtədə kor-koranə bölmək əvəzinə IPv6 orqanlarını nəzərə alaraq təhlil edin.
Tunel qəbul edildikdə, uğurlu HTTP cavabını onu bitirən boş sətirlə birlikdə göndərin. Sonra müştəri soketindən gələn sonrakı baytlarla davam etməzdən əvvəl istənilən head baytını yuxarı axına ötürün. Yeni data dinləyicisi qoşmaq artıq emal ediciyə ayrıca çatdırılmış buferi bərpa edə bilməz.
Node-un rəsmi tunel nümunəsi iki axın istiqamətini birləşdirməzdən əvvəl bu ötürməni serverSocket.write(head) ilə həyata keçirir. Kiçik nümunə keçidi göstərir; yerləşdirilmiş proxy həm də məhdud bağlantı cəhdləri, giriş nəzarətləri və həyat dövrü idarəetməsi tələb edir.
Uğurdan sonra baytlar xidmət protokoluna aiddir
Uğurlu CONNECT cavabı bağlantını bayt axınına çevirir. Hədəf HTTPS saytıdırsa, onun TLS mübadiləsi bu axının içində gedir. Sadəcə tuneldən keçirmək proxy-dən əvəzedici veb-sayt sertifikatı verməsini tələb etmir.
CONNECT qəbul edilməzdən əvvəl HTTP xətası rədd səbəbini izah edə bilər. Qəbuldan sonra axına HTTP 500 yazmaq tunel protokoluna bayt yeridər. Sonrakı nasazlıqlarda bunun əvəzinə uyğun bağlantıları bitirin və ya məhv edin.
Hər iki istiqaməti əks təzyiqə həssas axın idarəetməsi ilə birləşdirin və end, error və close hadisələrinin qarşı tərəfi necə bitirdiyini müəyyənləşdirin. İlkin head buferini eyni mülkiyyət modelinin hissəsi kimi qoruyun; o, tətbiq məlumatıdır, atılacaq ehtiyat HTTP başlığı deyil.