Cadw data byfferu ar ôl ateb HTTP CONNECT
Osgoi llawgydradd HTTP CONNECT sy’n sticio drwy ddod o hyd i ffin penawdau’r ateb a chadw’r beitiau sy’n cyrraedd ar ei hôl.
Gall lapio proxy bach weithio ar gyfer HTTPS ac yna sticio pan gaiff ei ailddefnyddio ar gyfer protocol lle mae’r gweinydd yn siarad gyntaf. Y llinell amheus yw’r un sy’n aros i’r byffer derbyn orffen gyda \r\n\r\n.
Mae TCP yn rhoi ffrwd i’r cleient. Gall un alwad derbyn ddychwelyd hanner llinell statws HTTP, ateb CONNECT cyflawn, neu’r ateb hwnnw wedi’i ddilyn yn syth gan ddata’r twnnel. Nid oes addewid bod darlleniad yn stopio ar ddiwedd y penawdau.
Dod o hyd i’r ffin y tu mewn i’r byffer
Ar gyfer cyfnewid HTTP/1.1 CONNECT, cronnwch feitiau nes bod y terfynnydd penawdau yn ymddangos yn unrhyw le yn y byffer. Rhannwch ar ei gyntaf ymddangosiad. Dadansoddwch y llinell statws a’r penawdau o’r rhan gyntaf; cadwch bopeth ar ôl y ffin ar wahân. Gosodwch derfyn maint penawdau ac amserlen wrth aros, a thriniwch ddarlleniad soced gwag fel cysylltiad caeedig yn hytrach na gwahoddiad arall i ddolennu.
Mae ateb 2xx llwyddiannus terfynol yn newid y cysylltiad i fodd twnnel yn syth ar ôl y penawdau hynny. Mae ei feitiau olaf eisoes yn feitiau twnnel. Peidiwch â’u taflu, peidiwch ag aros am gorff ateb CONNECT, nac ystyried maes Content-Length yn ganiatâd i ddefnyddio rhan o’r protocol newydd. Mae atebion gwybodaethol, os oes rhai, angen eu trin cyn yr ateb terfynol hwnnw.
Rhaid i’r lapio drosglwyddo ei weddillion
Dychwelyd y soced sylfaenol yn unig sy’n colli unrhyw feitiau y mae’r parslydd llawgydradd eisoes wedi’u tynnu ohono. Mae angen ffrwd byffer ar y darllenydd nesaf sy’n ildio’r gynffon a gadwyd gyntaf ac yna’n ailafael mewn darlleniadau soced. Mewn protocol lle mae’r gweinydd yn siarad gyntaf, gall colli’r cyfarchiad cychwynnol hwnnw adael y ddwy ochr yn aros yn amhenodol.
I’r gwrthwyneb, nid cyfarchiad twnnel yw beitiau o ateb CONNECT aflwyddiannus. Mae 407 yn dal i berthyn i’r cyfnewid proxy ac angen triniaeth dilysu; mae statws aflwyddiannus arall angen llwybr gwall priodol.
Mae hyn yn bwysig yn enwedig wrth addasu cleient FTP neu SSH drwy broxy HTTP. Rhaid i’r proxy hefyd ganiatáu’r porthladd cyrchfan a ofynnwyd amdano, ac efallai y bydd FTP angen cysylltiadau data ychwanegol. Mae parsio penawdau cywir yn datrys trosglwyddiad y ffrwd; ni all roi caniatâd CONNECT nac arlwyo ail sianel FTP.