Odota tyhjää riviä CONNECTin jälkeen
Lue koko HTTP/1 CONNECT -vastaus ennen kuin luovutat socketin TLS:lle, vaikka tilannerivi saapuisi ensin.
Asiakas näkee 200 Connection Established, käynnistää TLS:n ja ilmoittaa heti hölynpölyä siinä, missä pitäisi olla TLS-tietue. Etsi keskeneräistä HTTP-vastausta ennen kuin syytät kohteen salausasetuksia.
HTTP/1 CONNECT -vaihdossa tilannerivi on vain vastauksen alku. Sitä voivat seurata otsikkokentät. Otsikko-osan päättävä tyhjä rivi merkitsee siirtymistä tunneliin onnistuneen CONNECT-vastauksen jälkeen.
HTTP/1.1 200 Connection Established\r\n
Proxy-Agent: example\r\n
\r\n
Nämä tavut voivat saapua yhdellä lukukerralla, usealla lukukerralla tai lukukerralla, joka sisältää myös seuraavat tavut. TCP ei säilytä palvelimen kirjoitusrajoja.
Tee luovutuksesta jäsentimen eksplisiittinen tila
- Kerää ja jäsennä tilannerivi. Käytä numeerista tilaa tarkan englanninkielisen syyfraasin sijaan.
- Jatka, kunnes otsikko-osan täydellinen pääte on saapunut. Onnistunut tilannerivi ei saa jäljellä olevia kenttiä katoamaan.
- Onnistuneessa CONNECT-vastauksessa heti päätteen jälkeinen tavu on tunnelidatan alku. Muissa vastauksissa noudata asianmukaista HTTP-vastauksen ja todennuksen käsittelyä.
- Siirrä yhteys ja kaikki käyttämättömät tavut seuraavan protokollan tukeman puskuroidun I/O-rajapinnan kautta.
Viimeinen vaihe on tärkeä hyvästä erottimen etsinnästä huolimatta. Puskuroitu lukija on voinut kuluttaa socketista enemmän kuin jäsennin pyysi. TLS:n käynnistäminen paljaalla socketilla ja lukijan hylkääminen voi jättää tavuja lukijan yksityiseen puskuriin.
Käytä asetukselle määräaika ja otsikkokoolle raja. EOF ennen päätettä on puutteellinen välityspalvelinvastaus, ei kehotus odottaa ikuisesti tai yrittää TLS:ää silti.
Pohdi useita rajoja
Kuvittele lukukerta, joka päättyy Proxy-Agent: jälkeen. Jäsennin tarvitsee yhä lisää HTTP-otsikkotavuja. Kuvittele toinen, joka päättyy viimeisen CRLF-jakson puoliväliin. Se ei ole vielä täydellinen otsikko-osa. Kuvittele nyt täydellinen onnistunut otsikko-osa, jota seuraa tunnelitavuja samassa puskurissa: näiden ylimääräisten tavujen on selvittävä luovutuksesta.
407 on eri lopputulos. Se vaatii todennuksen käsittelyn; se ei salli TLS ClientHelloa tunneliin, jota ei koskaan avattu.
Suosi ylläpidettyä liitintä, ellet nimenomaan toteuta kättelyä. Tämä raja koskee tässä näytettyä HTTP/1-vaihtoa. HTTP/2-välityspalvelin kuljettaa CONNECTin virrassa, jossa on erilainen kehystys.