Conserva les dades emmagatzemades després d’una resposta HTTP CONNECT
Evita una negociació HTTP CONNECT encallada trobant el límit de les capçaleres de la resposta i conservant els bytes que hi arriben després.
Un petit embolcall de proxy pot funcionar amb HTTPS i després encallar-se quan es reutilitza per a un protocol en què el servidor parla primer. La línia sospitosa sol ser la que espera que el búfer de recepció acabi amb \r\n\r\n.
TCP dona al client un flux. Una crida de recepció pot retornar mitja línia d’estat HTTP, una resposta CONNECT completa, o aquesta resposta seguida immediatament de dades del túnel. No hi ha cap promesa que una lectura s’aturi al final de les capçaleres.
Troba el límit dins del búfer
Per a un intercanvi HTTP/1.1 CONNECT, acumula bytes fins que el terminador de capçaleres aparegui en qualsevol lloc del búfer. Divideix a la primera ocurrència. Analitza la línia d’estat i les capçaleres de la primera part; conserva a part tot el que hi ha després del límit. Aplica un límit de mida de capçaleres i un temps d’espera mentre esperes, i tracta una lectura buida del sòcol com una connexió tancada, no com una nova invitació a repetir.
Una resposta 2xx final correcta commuta la connexió al mode túnel immediatament després d’aquestes capçaleres. Els seus bytes finals ja són bytes del túnel. No els descartis, no esperis un cos de resposta CONNECT, ni interpretis un camp Content-Length com a permís per consumir part del nou protocol. Les respostes informatives, si n’hi ha, s’han de gestionar abans d’aquesta resposta final.
L’embolcall ha de passar les seves restes
Retornar només el sòcol subjacent perd qualsevol byte que l’analitzador de la negociació ja n’hagi extret. El lector següent necessita un flux amb búfer que lliuri primer la cua desada i després reprengui les lectures del sòcol. En un protocol en què el servidor parla primer, perdre aquesta salutació inicial pot deixar les dues bandes esperant indefinidament.
Per contra, els bytes d’una resposta CONNECT fallida no són una salutació del túnel. Un 407 encara pertany a l’intercanvi amb el proxy i necessita gestió d’autenticació; un altre estat no satisfactori necessita un camí d’error adequat.
Això és especialment important quan s’adapta un client FTP o SSH a través d’un proxy HTTP. El proxy també ha de permetre el port de destinació sol·licitat, i FTP pot necessitar connexions de dades addicionals. L’anàlisi correcta de les capçaleres resol el traspàs del flux; no pot concedir permís CONNECT ni proporcionar el segon canal de FTP.