یکی از مهم ترین تغییرات در NET7. در بحث Network مشاهده میشود که میتوان آنها را به چهار دسته زیر تقسیم بندی کرد:
۱- بهبودهای مربوط به HTTP
۲- معرفی API جدید QUIC
۳- امنیت شبکه
۴- مسائل مربوط به WebSocket ها
🔽 بررسی موارد مربوط به HTTP
🔹یکی از تاثیر گذارترین تغییرات مدیریت connection هایی هست که attempt failures در آنها رخ داده است.
🔹دومین مورد Thread safe شدن HttpHeader ها است.
🔹مورد بعدی قابل درکتر شدن خطاهای HTTP/2 و HTTP/3:
در لایه های پایینی ممکن است خطاهای خاصی رخ دهد. مثلا امکان دارد در HTTP2 خطای REFUSED_STREAM (0x7) رخ دهد یا در HTTP3 با خطای H3_EXCESSIVE_LOAD (0x0107) مواجه شوید.
اینها همگی خطاهایی هستند که برای کاربر در لایههای بالاتر کد معنای خاصی ندارند.
در عوض در NET7. ما میتوانیم با استفاده از HttpProtocolException که در inner exception کلاس HttpRequestException است خطاهای مربوطه را catch کنیم:
tryزمانی هم که با ریسپانسهای HttpContent کار میکنیم، مستقیم میتوانیم از HttpProtocolException استفاده کنیم:
{
using var response = await httpClient.GetStringAsync(url);
}
catch (HttpRequestException ex) when (ex.InnerException is HttpProtocolException pex)
{
Console.WriteLine("HTTP error code: " + pex.ErrorCode)
}
using var response = await httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);🔽 توضیح مختصری در مورد QUIC
using var responseStream = await response.Content.ReadAsStreamAsync();
try
{
await responseStream.ReadAsync(buffer);
}
catch (HttpProtocolException pex)
{
Console.WriteLine("HTTP error code: " + pex.ErrorCode)
}
پروتکل QUIC یا Quick UDP Internet Connections یکی از پروتکلهای لایه transport شبکه است که قبلا مایکروسافت پیاده سازی خود را در قالب MsQuic ارائه داده بود.
بعدها در NET5. در کدهای خود هم از این امکان استفاده میکرد.
در NET7. هم امکان استفاده از این قابلیت با استفاده از System.Net.Quic امکان پذیر شده است.
نحوه کارکرد آن نیز در استفاده از سه کلاس زیر خلاصه میشود:
QuicListenerدر این بین تمرکز اصلی ما بر روی مورد اول یعنی (بهبودهای مربوط به HTTP) بود و توضیح کوتاهی نیز در مورد مورد QUIC ارائه دادیم.
QuicConnection
QuicStream
برای مشاهده توضیحات کامل میتوانید از 🔗 این لینک استفاده کنید.
🔗لینک ویرگول این پست.
___________
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
________