Node.js-ийн CONNECT боловсруулагчид head буферийг хадгалах ёстой
Node-ийн CONNECT сокет ба head буферийг HTTP-ээс туннель рүү шилжих хил дээр удирдаж, толгойн мөрүүдээс цааш аль хэдийн уншсан байтуудыг хадгална.
Node HTTP сервер энгийн прокси хүсэлтийг хүсэлтийн callback-аар боловсруулдаг. CONNECT өөр замаар явдаг: сервер connect-ийг хүсэлт, клиентийн сокет болон head буферийн хамт гаргадаг.
Тухайн үйл явдал нь HTTP задлан шинжилгээ ба туннелийн хоорондох шилжүүлэг юм. Туннельчилсэн урсгалд үргэлжлүүлэн ашиглах энгийн ServerResponse объект байхгүй.
| Аргумент | Юуг зөөдөг |
|---|---|
req | CONNECT хүсэлт, түүний очих эрх мэдэл болон толгойн мөрүүдийг оролцуулан |
clientSocket | Клиент руу буцах холболт |
head | Node-ийн HTTP толгойн мөрүүдээс цааш аль хэдийн уншсан туннелийн өгөгдөл, хоосон байж болно |
Байтуудыг дамжуулахын өмнө HTTP шийдвэрийг дуусга
Хүссэн хост болон портыг баталгаажуулж, прокси-н хандалт, баталгаажуулалтын бодлогыг хэрэглэж, дээд урсгалын холболтыг тогтооно. CONNECT нь service.example:443 шиг эрх мэдлийг тодорхойлдог; тухайн хэлбэрийг хоёр цэг бүр дээр сохроор хуваахын оронд IPv6 эрх мэдлийг бодолцон задлан шинжилнэ үү.
Туннелийг хүлээн авсны дараа амжилттай HTTP хариу болон түүнийг дуусгах хоосон мөрийг илгээнэ. Дараа нь клиентийн сокетоос ирэх дараагийн байтуудыг үргэлжлүүлэхийн өмнө аливаа head байтыг дээш илгээнэ. Шинэ өгөгдлийн сонсогчийг холбосноор боловсруулагчид тусад нь хүргэсэн буферийг сэргээх боломжгүй.
Node-ийн албан ёсны туннелийн жишээ хоёр урсгалын чиглэлийг холбохын өмнө тэр шилжүүлгийг serverSocket.write(head)-оор гүйцэтгэдэг. Түүний жижиг жишээ шилжилтийг харуулдаг; байршуулсан прокси мөн хязгаарлагдмал холболтын оролдлого, хандалтын хяналт, амьдралын мөчлөгийн удирдлага шаарддаг.
Амжилтын дараа байтууд үйлчилгээний протоколд хамаарна
Амжилттай CONNECT хариу холболтыг байт урсгал болгон хувиргана. Хэрэв зорилт HTTPS сайт бол түүний TLS солилцоо тэр урсгалын дотор явагдана. Зөвхөн туннельчилэх нь прокси-гоос орлуулах вэбсайтын гэрчилгээ гаргахыг шаарддаггүй.
CONNECT-ийг хүлээн авахаас өмнө HTTP алдаа татгалзсан шалтгааныг тайлбарлаж болно. Хүлээн авсны дараа урсгалд HTTP 500 бичих нь туннелийн протоколд байт шахах болно. Үүний оронд дараагийн алдааны үед тохирох холболтыг зогсоох эсвэл устгана уу.
Хоёр чиглэлийг буцах даралтыг мэддэг урсгалын удирдлага-ээр холбож, end, error, close үйл явдлууд хэрхэн хамтрагчийг дуусгахыг шийднэ үү. Анхны head буферийг мөн адил эзэмшлийн загварын хэсэг болгон хадгал; энэ нь програмын өгөгдөл бөгөөд хаях илүүдэл HTTP толгойн мөр биш.