Espereu la línia en blanc després de CONNECT
Llegiu la resposta HTTP/1 CONNECT completa abans de lliurar el sòcol a TLS, fins i tot quan la línia d'estat arriba primer.
El client veu 200 Connection Established, inicia TLS i de seguida informa de bajanades on hauria d'haver-hi un registre TLS. Busqueu una resposta HTTP inacabada abans de culpar la configuració de xifratge de la destinació.
En un intercanvi HTTP/1 CONNECT, la línia d'estat només és el començament de la resposta. Després poden venir camps de capçalera. La línia en blanc que tanca la secció de capçaleres marca el pas al túnel després d'una resposta CONNECT correcta.
HTTP/1.1 200 Connection Established\r\n
Proxy-Agent: example\r\n
\r\n
Aquests bytes poden arribar en una lectura, en diverses lectures o en una lectura que també contingui bytes posteriors. TCP no conserva les fronteres d'escriptura del servidor.
Feu del lliurament un estat explícit de l'analitzador
- Recolliu i analitzeu la línia d'estat. Feu servir l'estat numèric en lloc d'una frase de motiu anglesa exacta.
- Continueu fins que hagi arribat el terminador complet de la secció de capçaleres. Una línia d'estat correcta no fa desaparèixer la resta de camps.
- En una resposta CONNECT correcta, identifiqueu el byte immediatament posterior a aquest terminador com l'inici de les dades del túnel. En altres respostes, seguiu el tractament corresponent de resposta HTTP i autenticació.
- Transferiu la connexió i els bytes no consumits per la interfície d'E/S amb memòria intermèdia que admeti el protocol següent.
L'últim pas importa fins i tot amb una bona cerca de delimitadors. Un lector amb memòria intermèdia pot haver consumit més sòcol del que l'analitzador va demanar. Iniciar TLS al sòcol nu mentre s'abandona aquest lector pot deixar bytes atrapats al buffer privat del lector.
Feu servir un termini de configuració i un límit de mida de capçalera. Un EOF abans del terminador és una resposta de proxy incompleta, no una invitació a esperar per sempre ni a provar TLS igualment.
Rumieu diversos límits
Imagineu una lectura que acaba just després de Proxy-Agent:. L'analitzador encara necessita més bytes de capçalera HTTP. Imagineu-ne una altra que acaba a mitges de la seqüència CRLF final. Encara no és una secció de capçaleres completa. Ara imagineu una secció de capçaleres completa i correcta seguida de bytes de túnel al mateix buffer: aquests bytes extra han de sobreviure al lliurament.
Un 407 és un desenllaç diferent. Necessita tractament d'autenticació; no autoritza cap TLS ClientHello cap a un túnel que mai no s'ha obert.
Preferiu un connector mantingut tret que implementar l'apretada de mans sigui la tasca. Aquest límit és específic de l'intercanvi HTTP/1 que es mostra aquí. Un proxy HTTP/2 porta CONNECT en un flux amb un emmarcat diferent.