forward proxy ඉල්ලීම් පේළිය සහ headers කියවා, ඒවා යවා, පසුව select තුළ POST බොඩියක් සඳහා රැඳී සිටී. සේවාලාභියා එය දැනටමත් යවා ඇත. දෙපසම එකිනෙකා එනතුරු බලා සිටින බව පෙනේ.

Python හි BaseHTTPRequestHandler සමඟ, headers කියවීම rfile හරහා යයි, එය buffer කළ ආදාන stream එකකි. එම stream එකට ඉදිරියට කියවා බොඩියට අයත් byte රඳවා ගත හැක. යටින් ඇති socket මත රැඳී සිටීම එහි file descriptor සූදානම්ද යන්න පමණක් අසයි; Python stream එකේ දැනටමත් භාවිත කළ හැකි දත්ත තිබේද යන්න අසන්නේ නැත.

headers කියවූ buffer එක අනුගමනය කරන්න

බොඩිය ද self.rfile හරහා කියවන්න. buffer කළ stream එකෙන් headers විග්‍රහ කිරීමෙන් පසු self.connection.recv වෙත මාරු නොවන්න. එසේ නොමැති නම් කේතය එම stream එකේ රඳවා ඇති byte මඟ හැර, නැවත කිසිදා නොයවන දත්ත සඳහා රැඳී සිටිය හැක.

rfile ම select වෙත ලබා දීමෙන් select එහි Python buffer පරීක්ෂා කරන්නේ නැත. සූදානම API වස්තුවේ file descriptor හරහා ක්‍රියා කරයි.

වලංගු Content-Length එකක් සහ Transfer-Encoding නොමැති ඉල්ලීමක් සඳහා, ප්‍රකාශිත byte ගණන හරියටම පරිභෝජනය කරන්න, ආදානය කලින් අවසන් වීම සහ ඔබේ ප්‍රමාණ හා කාල සීමා හසුරුවන්න. EOF දක්වා නොකියවන්න: ස්ථිර සම්බන්ධතාවක් භාවිත කරන සේවාලාභියෙකුට ඉල්ලීම අවසන් වූ පසුවත් සම්බන්ධතාව විවෘතව තැබිය හැක.

framing ප්‍රොක්සියේ පැහැදිලි කොටසක් කරන්න

chunked ඉල්ලීම් බොඩි සඳහා chunked framing සහාය අවශ්‍යය. නොමැති Content-Length සොයා ඒවා කියවිය නොහැක. අපැහැදිලි දිග metadata සඳහා පහසු යැයි පෙනෙන header තෝරා ගැනීම වෙනුවට නිර්වචිත ප්‍රතික්ෂේප මාර්ගයක් අවශ්‍යය.

blocking handler එකකට සීමිත කියවීම් සහිතව එහි stream අතුරුමුහුණත භාවිත කරගෙන යා හැක. event-driven proxy එකකට parser හි ඉදිරි කියවීම සූදානම් හසුරුවීම සමඟ ඒකාබද්ධ කරන buffer ආකෘතියක් අවශ්‍යය. timeout වෙනස් කිරීමෙන් එකම socket හි ස්වාධීන පාරිභෝගිකයන් දෙදෙනෙකු සමගි නොවේ.

මෙම නිර්ණය ආවරණය වන්නේ ආදාන byte රඳවා ඇති ස්ථානයයි. proxy එක නිවැරදි බොඩිය පරිභෝජනය කළ පසුවත්, එම බොඩිය සුසංගත HTTP framing සමඟ යැවිය යුතුය. සම්මත http.server handler යාන්ත්‍රණය තේරුම් ගැනීමට ප්‍රයෝජනවත් ස්ථානයක් වුවත්, එය නිෂ්පාදන forward-proxy ක්‍රියාත්මක කිරීමක් නොවේ.

අදාළ ලිපි