Հաճախորդը տեսնում է 200 Connection Established, սկսում TLS և անմիջապես անհեթեթ բաներ է հաղորդում այնտեղ, որտեղ պետք է լինի TLS գրառում։ Փնտրեք անավարտ HTTP պատասխան նախքան նպատակակետի գաղտնագրման կարգավորումներին մեղադրելը։

HTTP/1 CONNECT փոխանակման մեջ կարգավիճակի տողը միայն պատասխանի սկիզբն է։ Դրանից հետո կարող են գալ վերնագրի դաշտեր։ Վերնագրի բաժինը ավարտող դատարկ տողը նշում է թունելին անցումը հաջող CONNECT պատասխանից հետո։

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

Այս բայթերը կարող են գալ մեկ ընթերցմամբ, մի քանի ընթերցմամբ կամ ընթերցմամբ, որը ներառում է նաև հաջորդ բայթերը։ TCP-ն չի պահպանում սերվերի գրելու սահմանները։

Հանձնումը դարձրեք parser-ի բացահայտ վիճակ

  1. Հավաքեք և վերլուծեք կարգավիճակի տողը։ Օգտագործեք թվային կարգավիճակը, ոչ թե ճշգրիտ անգլերեն պատճառաբանություն։
  2. Շարունակեք մինչև վերնագրի բաժնի ամբողջական ավարտիչը գա։ Հաջող կարգավիճակի տողը չի վերացնում մնացած դաշտերը։
  3. Հաջող CONNECT պատասխանի դեպքում այդ ավարտիչից անմիջապես հետո եկող բայթը համարեք թունելի տվյալների սկիզբ։ Այլ պատասխանների դեպքում հետևեք համապատասխան HTTP պատասխանի և նույնականացման մշակմանը։
  4. Փոխանցեք կապը և չօգտագործված բայթերը հաջորդ արձանագրության աջակցած բուֆերացված I/O ինտերֆեյսով։

Վերջին քայլը կարևոր է նույնիսկ լավ բաժանիչի որոնման դեպքում։ Բուֆերացված ընթերցիչը կարող է ավելի շատ socket սպառած լինել, քան parser-ը պահանջել էր։ TLS-ը մերկ socket-ի վրա սկսելը՝ այդ ընթերցիչը լքելով, կարող է բայթեր թողնել ընթերցիչի մասնավոր բուֆերում։

Օգտագործեք կարգավորման վերջնաժամկետ և վերնագրի չափի սահման։ Ավարտիչից առաջ EOF-ը թերի proxy պատասխան է, ոչ թե հրավեր անվերջ սպասելու կամ այնուամենայնիվ TLS փորձելու։

Մտածեք մի քանի սահմանների մասին

Պատկերացրեք ընթերցում, որն ավարտվում է Proxy-Agent:-ից հետո։ Parser-ին դեռ պետք են լրացուցիչ HTTP վերնագրի բայթեր։ Պատկերացրեք մեկ այլը, որն ավարտվում է վերջին CRLF հաջորդականության կեսին։ Դա դեռ ամբողջական վերնագրի բաժին չէ։ Հիմա պատկերացրեք ամբողջական հաջող վերնագրի բաժին, որին նույն բուֆերում հետևում են թունելի բայթեր․ այդ լրացուցիչ բայթերը պետք է վերապրեն հանձնումը։

407-ը այլ ելք է։ Այն պահանջում է նույնականացման մշակում․ այն թույլ չի տալիս TLS ClientHello ուղարկել երբեք չբացված թունել։

Նախընտրեք պահպանվող connector, եթե ձեռքսեղմման իրականացումը հենց խնդիրը չէ։ Այս սահմանը վերաբերում է այստեղ ցուցադրված HTTP/1 փոխանակմանը։ HTTP/2 proxy-ն CONNECT-ը կրում է այլ շրջանակավորմամբ հոսքում։

Առնչվող հոդվածներ