Rhaid i drafodwyr CONNECT Node.js gadw'r bwffer head
Delio â soced CONNECT a bwffer head Node ar y ffin rhwng HTTP a thwnnel, gan gadw'r beitiau sydd eisoes wedi'u darllen y tu hwnt i'r penawdau.
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.
| Dadl | Beth mae'n ei gario |
|---|---|
req | Y cais CONNECT, gan gynnwys ei awdurdod cyrchfan a'i benawdau |
clientSocket | Y cysylltiad yn ôl i'r cleient |
head | Data 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.