Mijoz 200 Connection Established ni ko'radi, TLS ni boshlaydi va TLS yozuvi bo'lishi kerak joyda darhol ma'nosiz narsalarni xabar qiladi. Manzilning shifrlash sozlamalarini ayblashdan oldin tugallanmagan HTTP javobini qidiring.

HTTP/1 CONNECT almashinuvida holat qatori javobning faqat boshlanishi. Undan keyin sarlavha maydonlari kelishi mumkin. Muvaffaqiyatli CONNECT javobidan keyin sarlavha bo'limini tugatuvchi bo'sh qator tunnelga o'tishni bildiradi.

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

Bu baytlar bitta o'qishda, bir nechta o'qishda yoki keyingi baytlarni ham o'z ichiga olgan o'qishda kelishi mumkin. TCP serverning yozish chegaralarini saqlamaydi.

Topshirishni parserning aniq holatiga aylantiring

  1. Holat qatorini to'plang va tahlil qiling. Aniq inglizcha sabab iborasi o'rniga raqamli holatdan foydalaning.
  2. Sarlavha bo'limining to'liq tugatuvchisi kelguncha davom eting. Muvaffaqiyatli holat qatori qolgan maydonlarni yo'q qilmaydi.
  3. Muvaffaqiyatli CONNECT javobida o'sha tugatuvchidan keyingi baytni tunnel ma'lumotlarining boshlanishi deb hisoblang. Boshqa javoblarda tegishli HTTP javobi va autentifikatsiya ishlovini kuzatib boring.
  4. Ulanishni va ishlatilmagan baytlarni keyingi protokol qo'llab-quvvatlaydigan buferli I/O interfeysi orqali uzating.

Yaxshi ajratgich qidiruvi bo'lsa ham oxirgi qadam muhim. Buferli o'quvchi parser so'raganidan ko'proq socket sarflagan bo'lishi mumkin. Yalang'och socketda TLS boshlab, o'sha o'quvchini tashlab ketsangiz, baytlar o'quvchining shaxsiy buferida qolib ketishi mumkin.

Sozlash uchun muddat va sarlavha o'lchami chegarasini qo'llang. Tugatuvchidan oldingi EOF to'liq bo'lmagan proksi javobi, abadiy kutish yoki baribir TLS sinab ko'rishga chaqiriq emas.

Bir nechta chegaralarni o'ylab ko'ring

Proxy-Agent: dan keyin tugaydigan o'qishni tasavvur qiling. Parserga hali ham qo'shimcha HTTP sarlavha baytlari kerak. Oxirgi CRLF ketma-ketligining o'rtasida tugaydigan boshqasini tasavvur qiling. Bu hali to'liq sarlavha bo'limi emas. Endi o'sha buferda to'liq muvaffaqiyatli sarlavha bo'limidan keyin tunnel baytlari kelishini tasavvur qiling: bu qo'shimcha baytlar topshirishdan omon o'tishi kerak.

407 boshqa natija. U autentifikatsiya ishlovini talab qiladi; hech qachon ochilmagan tunnelga TLS ClientHello yuborishga ruxsat bermaydi.

Qo'l berib ko'rishishni amalga oshirishning o'zi vazifa bo'lmasa, qo'llab-quvvatlanadigan konnektorni tanlang. Bu chegara shu yerda ko'rsatilgan HTTP/1 almashinuviga xos. HTTP/2 proksisi CONNECT ni boshqa freymingli oqimda olib yuradi.

O'xshash maqolalar