پرو ہوسٹر > بلاگ > انتظامیہ > کبرنیٹس کے ساتھ زندگی سے: کس طرح HTTP سرور نے ہسپانویوں کی حمایت نہیں کی۔
کبرنیٹس کے ساتھ زندگی سے: کس طرح HTTP سرور نے ہسپانویوں کی حمایت نہیں کی۔
ہمارے کلائنٹ کے ایک نمائندے، جس کی ایپلیکیشن اسٹیک مائیکروسافٹ (Azure) سے کلاؤڈ میں رہتی ہے، نے ایک مسئلے کو حل کیا: حال ہی میں، یورپ سے کچھ کلائنٹس کی کچھ درخواستیں غلطی 400 کے ساتھ ختم ہونا شروع ہوئیں۔غلط فرمائش)۔ تمام ایپلیکیشنز .NET میں لکھی گئی ہیں، Kubernetes میں تعینات ہیں...
ایپلی کیشنز میں سے ایک API ہے، جس کے ذریعے تمام ٹریفک بالآخر آتی ہے۔ اس ٹریفک کو HTTP سرور کے ذریعہ سنا جاتا ہے۔ کیسٹریل.NET کلائنٹ کے ذریعہ ترتیب دیا گیا اور پوڈ میں میزبانی کی گئی۔ ڈیبگنگ کے ساتھ، ہم اس لحاظ سے خوش قسمت تھے کہ ایک مخصوص صارف تھا جس نے مستقل طور پر مسئلہ کو دوبارہ پیش کیا۔ تاہم، ٹریفک سلسلہ کی وجہ سے سب کچھ پیچیدہ تھا:
ایسا لگتا ہے کہ صرف tcpdump اس مسئلے کو حل کرنے میں مدد کرے گا ... لیکن میں ٹریفک چین کے بارے میں دہراؤں گا:
تفتیش
ظاہر ہے، ٹریفک کو سننا بہتر ہے۔ اس مخصوص نوڈ پر، جہاں Kubernetes نے ایک پوڈ تعینات کیا ہے: ڈمپ کا حجم ایسا ہو گا کہ کم از کم کچھ بہت جلد تلاش کرنا ممکن ہو گا۔ اور درحقیقت، اس کی جانچ کرتے وقت، مندرجہ ذیل فریم کو دیکھا گیا تھا:
ڈمپ کا قریب سے معائنہ کرنے پر یہ لفظ نظر آیا M.laga. یہ اندازہ لگانا آسان ہے کہ سپین میں M.laga شہر نہیں ہے (لیکن وہاں ہے۔ Malaga)۔ اس خیال پر قابو پاتے ہوئے، ہم نے Ingress کنفیگرز کو دیکھا، جہاں ہم نے ایک مہینہ پہلے داخل کی گئی (کلائنٹ کی درخواست پر) کو دیکھا۔ "بے ضرر" ٹکڑا:
لوٹے گا 400 Bad request - ایپلیکیشن لاگ میں ہمیں ایک ایسی غلطی موصول ہوگی جو ہمارے لیے پہلے سے واقف ہے:
{
"@t":"2019-03-31T12:59:54.3746446Z",
"@mt":"Connection id "{ConnectionId}" bad request data: "{message}"",
"@x":"Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Malformed request: invalid headers.n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection.TryParseRequest(ReadResult result, Boolean& endConnection)n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.<ProcessRequestsAsync>d__185`1.MoveNext()",
"ConnectionId":"0HLLLR1J974L9",
"message":"Malformed request: invalid headers.",
"EventId":{
"Id":17,
"Name":"ConnectionBadRequest"
},
"SourceContext":"Microsoft.AspNetCore.Server.Kestrel",
"ThreadId":71
}
کے نتائج
خاص طور پر Kestrel نہیں کر سکتا UTF-8 میں صحیح حروف کے ساتھ HTTP ہیڈر کو درست طریقے سے پروسیس کریں، جو کہ کافی بڑی تعداد میں شہروں کے ناموں میں موجود ہیں۔
ہمارے معاملے میں ایک اضافی عنصر یہ ہے کہ کلائنٹ فی الحال درخواست میں Kestrel کے نفاذ کو تبدیل کرنے کا ارادہ نہیں رکھتا ہے۔ تاہم، AspNetCore میں ہی مسائل (4318 №, 7707 №) وہ کہتے ہیں کہ اس سے کوئی فائدہ نہیں ہوگا...
خلاصہ کرنے کے لیے: نوٹ اب Kestrel یا UTF-8 (2019 میں؟!) کے مخصوص مسائل کے بارے میں نہیں ہے، بلکہ اس حقیقت کے بارے میں ہے کہ ذہن سازی اور مستقل مطالعہ مسائل کی تلاش کے دوران آپ جو بھی قدم اٹھاتے ہیں وہ جلد یا بدیر پھل لائے گا۔ اچھی قسمت!