புரோஹோஸ்டர் > Блог > நிர்வாகம் > குபெர்னெட்டஸுடனான வாழ்க்கையிலிருந்து: HTTP சேவையகம் எப்படி ஸ்பானியர்களுக்கு ஆதரவாக இல்லை
குபெர்னெட்டஸுடனான வாழ்க்கையிலிருந்து: HTTP சேவையகம் எப்படி ஸ்பானியர்களுக்கு ஆதரவாக இல்லை
மைக்ரோசாப்ட் (Azure) இலிருந்து கிளவுட்டில் இருக்கும் அப்ளிகேஷன் ஸ்டேக் இருக்கும் எங்கள் கிளையண்டின் பிரதிநிதி, ஒரு சிக்கலைத் தீர்த்தார்: சமீபத்தில், ஐரோப்பாவிலிருந்து சில வாடிக்கையாளர்களிடமிருந்து சில கோரிக்கைகள் பிழை 400 உடன் முடிவடையத் தொடங்கின (தவறான கோரிக்கை) அனைத்து பயன்பாடுகளும் .NET இல் எழுதப்பட்டுள்ளன, குபெர்னெட்ஸில் பயன்படுத்தப்படுகின்றன...
பயன்பாடுகளில் ஒன்று API ஆகும், இதன் மூலம் அனைத்து போக்குவரமும் இறுதியில் வருகிறது. இந்த டிராஃபிக்கை HTTP சர்வர் கேட்கிறது கெஸ்ட்ரல், .NET கிளையண்ட் மூலம் கட்டமைக்கப்பட்டது மற்றும் ஒரு பாட் ஹோஸ்ட். பிழைத்திருத்தத்தின் மூலம், சிக்கலைத் தொடர்ந்து மறுஉருவாக்கம் செய்யும் ஒரு குறிப்பிட்ட பயனர் இருப்பதால் நாங்கள் அதிர்ஷ்டசாலிகள். இருப்பினும், போக்குவரத்து சங்கிலியால் எல்லாம் சிக்கலானது:
இந்த சிக்கலை தீர்க்க tcpdump மட்டுமே உதவும் என்று தோன்றுகிறது ... ஆனால் நான் போக்குவரத்து சங்கிலி பற்றி மீண்டும் சொல்கிறேன்:
விசாரணை
வெளிப்படையாக, போக்குவரத்தைக் கேட்பது நல்லது அந்த குறிப்பிட்ட முனையில், குபெர்னெட்டஸ் ஒரு பாட் ஒன்றை அமைத்துள்ளார்: டம்ப்பின் அளவு, குறைந்த பட்சம் எதையாவது மிக விரைவாகக் கண்டுபிடிக்கும் வகையில் இருக்கும். உண்மையில், அதை ஆராயும்போது, பின்வரும் சட்டகம் கவனிக்கப்பட்டது:
குப்பைத்தொட்டியை உன்னிப்பாகப் பார்த்தபோது, அந்த வார்த்தை கவனிக்கப்பட்டது M.laga. ஸ்பெயினில் M.laga நகரம் இல்லை என்று யூகிக்க எளிதானது (ஆனால் உள்ளது மலகா) இந்த யோசனையைப் பயன்படுத்தி, உள் நுழைவு கட்டமைப்புகளைப் பார்த்தோம், அங்கு ஒரு மாதத்திற்கு முன்பு செருகப்பட்டதைக் கண்டோம் (வாடிக்கையாளரின் வேண்டுகோளின்படி) "தீங்கற்ற" துணுக்கு:
திரும்பி வரும் 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
}
முடிவுகளை
குறிப்பாக கெஸ்ட்ரல் முடியாது UTF-8 இல் சரியான எழுத்துகளுடன் HTTP தலைப்புகளைச் சரியாகச் செயல்படுத்தவும், அவை அதிக எண்ணிக்கையிலான நகரங்களின் பெயர்களில் உள்ளன.
எங்கள் விஷயத்தில் கூடுதல் காரணி என்னவென்றால், க்ளையன்ட் தற்போது பயன்பாட்டில் Kestrel ஐ செயல்படுத்துவதை மாற்றத் திட்டமிடவில்லை. இருப்பினும், AspNetCore இல் உள்ள சிக்கல்கள் (№4318, №7707) இது உதவாது என்று அவர்கள் கூறுகிறார்கள் ...
சுருக்கமாக: குறிப்பு Kestrel அல்லது UTF-8 (2019 இல்?!) இன் குறிப்பிட்ட சிக்கல்களைப் பற்றியது அல்ல, ஆனால் அந்த உண்மையைப் பற்றியது நினைவாற்றல் மற்றும் நிலையான படிப்பு சிக்கல்களைத் தேடும்போது நீங்கள் எடுக்கும் ஒவ்வொரு அடியும் விரைவில் அல்லது பின்னர் பலனைத் தரும். நல்ல அதிர்ஷ்டம்!