Mae gweinydd HTTP Node yn trin cais procsi cyffredin drwy ei alwad yn ôl cais. Mae CONNECT yn dilyn llwybr arall: mae'r gweinydd yn allyrru connect gyda'r cais, soced y cleient a bwffer head.

Y digwyddiad hwnnw yw'r trosglwyddiad rhwng dosrannu HTTP a thwnnel. Nid oes gwrthrych ServerResponse cyffredin i barhau i'w ddefnyddio ar gyfer y traffig twnnel.

DadlBeth mae'n ei gario
reqY cais CONNECT, gan gynnwys ei awdurdod cyrchfan a'i benawdau
clientSocketY cysylltiad yn ôl i'r cleient
headData twnnel y mae Node eisoes wedi'i ddarllen y tu hwnt i'r penawdau HTTP, o bosibl yn wag

Gorffennwch y penderfyniad HTTP cyn trosglwyddo beitiau

Dilyswch y gwesteiwr a'r porthladd a ofynnwyd amdanynt, cymhwyswch bolisi mynediad a dilysu'r procsi, a sefydlwch y cysylltiad i fyny'r afon. Mae CONNECT yn nodi awdurdod fel service.example:443; dadansoddwch y ffurf hono gan gadw awdurdodau IPv6 mewn cof yn hytrach na hollti'n ddall ar bob colon.

Pan dderbynnir y twnnel, anfonwch yr ymateb HTTP llwyddiannus a'i linell wag derfynol. Yna anfonwch unrhyw feitiau head i fyny'r afon cyn parhau â beitiau diweddarach o soced y cleient. Ni all atodi gwrandäwr data newydd adennill bwffer a gyflwynwyd ar wahân i'r trafodwr yn barod.

Mae enghraifft tunnellu swyddogol Node yn cyflawni'r trosglwyddiad hwnnw gyda serverSocket.write(head) cyn cysylltu'r ddau gyfeiriad llif. Mae ei enghraifft fach yn darlunio'r newid; mae angen ymdrechion cysylltu cyfyngedig, rheolaethau mynediad a thrin cylch bywyd ar brocsi wedi'i ddefnyddio hefyd.

Ar ôl llwyddiant, mae'r beitiau'n perthyn i brotocol y gwasanaeth

Mae ymateb CONNECT llwyddiannus yn newid y cysylltiad yn llif beitiau. Os yw'r targed yn safle HTTPS, mae ei gyfnewid TLS yn teithio o fewn y llif hwnnw. Nid yw ei dunellu'n unig yn gofyn i'r procsi gyhoeddi tystysgrif safle gwe amgen.

Cyn derbyn CONNECT, gall gwall HTTP esbonio pam y gwrthwynebwyd. Ar ôl derbyn, byddai ysgrifennu HTTP 500 i'r llif yn chwistrellu beitiau i'r protocol tunnell. Yn lle hynny, terfynwch neu ddinistriwch y cysylltiadau priodol mewn methiannau diweddarach.

Cysylltwch y ddau gyfeiriad â trin llif sy'n ymwybodol o wrthbwysedd, a phenderfynwch sut mae digwyddiadau end, error a close yn terfynu'r cymar. Cadwch y bwffer head cychwynnol fel rhan o'r un model perchnogaeth; data'r cymhwysiad ydyw, nid penawdau HTTP sbâr i'w taflu.

Erthyglau cysylltiedig