Klien melihat 200 Connection Established, memulakan TLS dan segera melaporkan perkara tidak masuk akal di tempat yang sepatutnya ada rekod TLS. Cari respons HTTP yang belum selesai sebelum menyalahkan tetapan sifer destinasi.

Dalam pertukaran HTTP/1 CONNECT, baris status hanyalah permulaan respons. Medan pengepala boleh menyusul. Baris kosong yang menamatkan bahagian pengepala menandakan peralihan ke terowong selepas respons CONNECT berjaya.

HTTP/1.1 200 Connection Established\r\n
Proxy-Agent: example\r\n
\r\n

Bait itu boleh tiba dalam satu bacaan, beberapa bacaan, atau bacaan yang juga mengandungi bait berikutnya. TCP tidak mengekalkan sempadan tulisan pelayan.

Jadikan penyerahan sebagai keadaan penghurai yang eksplisit

  1. Kumpul dan hurai baris status. Guna status berangka dan bukan frasa sebab bahasa Inggeris yang tepat.
  2. Teruskan sehingga penamat penuh bahagian pengepala tiba. Baris status yang berjaya tidak membuat medan selebihnya hilang.
  3. Untuk respons CONNECT yang berjaya, anggap bait sejurus selepas penamat itu sebagai permulaan data terowong. Untuk respons lain, ikut pengendalian respons HTTP dan pengesahan yang sesuai.
  4. Pindahkan sambungan dan bait yang belum digunakan melalui antara muka I/O berpenimbal yang disokong protokol seterusnya.

Langkah terakhir penting walaupun carian pembatas sudah baik. Pembaca berpenimbal mungkin telah menggunakan lebih banyak soket daripada yang diminta penghurai. Memulakan TLS pada soket telanjang sambil meninggalkan pembaca itu boleh meninggalkan bait dalam penimbal peribadi pembaca.

Guna had masa persediaan dan had saiz pengepala. EOF sebelum penamat ialah respons proksi yang tidak lengkap, bukan jemputan untuk menunggu selamanya atau mencuba TLS juga.

Fikirkan beberapa sempadan

Bayangkan bacaan yang berakhir selepas Proxy-Agent:. Penghurai masih memerlukan lebih banyak bait pengepala HTTP. Bayangkan satu lagi yang berakhir di tengah urutan CRLF terakhir. Itu masih bukan bahagian pengepala yang lengkap. Sekarang bayangkan bahagian pengepala berjaya yang lengkap diikuti bait terowong dalam penimbal yang sama: bait tambahan itu mesti melepasi penyerahan.

407 ialah hasil yang berbeza. Ia memerlukan pengendalian pengesahan; ia tidak membenarkan TLS ClientHello masuk ke terowong yang tidak pernah dibuka.

Utamakan penyambung yang diselenggara melainkan pelaksanaan jabat tangan itu sendiri tugasnya. Sempadan ini khusus untuk pertukaran HTTP/1 yang ditunjukkan di sini. Proksi HTTP/2 membawa CONNECT pada strim dengan pembingkaian berbeza.

Artikel berkaitan