Node HTTP сервери кадимки прокси суроосун суроо callback аркылуу иштетет. CONNECT башка жол менен жүрөт: сервер connect окуясын суроо, кардар сокети жана head буфери менен чыгарат.

Ал окуя HTTP талдоосу менен туннелдин ортосундагы өткөрүп берүү болуп саналат. Туннелден өткөн трафик үчүн колдонууну улантуучу кадимки ServerResponse объектиси жок.

АргументЭмнени алып жүрөт
reqCONNECT суроосу, анын максаттуу ыйгарым укугу жана аталыштары менен
clientSocketКардарга кайра багытталган байланыш
headNode 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 аталыштары эмес.

Тектеш макалалар