﻿
{"id":23873,"date":"2021-11-27T22:38:51","date_gmt":"2021-11-27T22:38:51","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=23873"},"modified":"2021-11-28T11:12:56","modified_gmt":"2021-11-28T11:12:56","slug":"net-6da-http-3-destegi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/net-6da-http-3-destegi\/","title":{"rendered":".NET 6&#8217;da HTTP\/3 Deste\u011fi"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde .NET 6&#8217;da gelen HTTP\/3 deste\u011fi \u00fczerine bir incelemede bulunuyor olaca\u011f\u0131z.<\/p>\n<p>.NET 6, HTTP\/3 ile <em style=\"font-size:13px;\">Asp.NET i\u00e7in Kestrel, HTTP.Sys ve IIS Sunucu Senaryolar\u0131na<\/em>, <em style=\"font-size:13px;\">HttpClient Request&#8217;lerine<\/em> ve <em style=\"font-size:13px;\">gRPC teknolojisine<\/em> olmak \u00fczere \u00fc\u00e7 farkl\u0131 noktada destek getirmi\u015f bulunmaktad\u0131r. Her\u015feyden \u00f6nce HTTP\/3&#8217;\u00fcn ne oldu\u011funa ve desteklenmesinin \u00f6nemine temas ederek ba\u015flayal\u0131m.<\/p>\n<h6>HTTP\/3 Nedir ve Neden Desteklenmelidir?<\/h6>\n<p>HTTP, 1.1 s\u00fcr\u00fcm\u00fcnde nispeten basit ve senkron \u00e7al\u0131\u015fan bir protokold\u00fc. \u0130stek(request) g\u00f6nderilir ve sonu\u00e7 \u00fcretildikten sonra cevap(response) al\u0131n\u0131rd\u0131. HTTP\/1.1&#8217;de request\/response s\u00fcre\u00e7leri tek bir seferlik ba\u011flant\u0131 \u00fczerinden ger\u00e7ekle\u015ftirilmekteydi. Haliyle, bir web uygulamas\u0131na yap\u0131lan istek neticesinde bir \u00e7ok kaynak dosyas\u0131<span style=\"font-size:13px;\">(JavaScript kodlar\u0131, resim ve css dosyalar\u0131, yaz\u0131 tipleri vs.)<\/span> i\u00e7in ayr\u0131 istekler yap\u0131lmas\u0131 gerekmekte ve b\u00f6ylece performans d\u00fc\u015f\u00fckl\u00fc\u011f\u00fc ya\u015fanmaktayd\u0131. <\/p>\n<p>HTTP\/1.1&#8217;de ki bu handikaplara, HTTP\/2 ile bir ba\u011flant\u0131 \u00fczerinden birden fazla iste\u011fin ayn\u0131 anda i\u015flenebilirli\u011fi sa\u011flanarak ikili protokole d\u00f6n\u00fc\u015f\u00fcm ger\u00e7ekle\u015ftirilerek \u00e7\u00f6z\u00fcm getirildi. Yani request\/response s\u00fcrecindeki ba\u011flant\u0131 maliyeti tek seferlik \u00f6denmekte ve ard\u0131ndan t\u00fcm request&#8217;ler bu tek ba\u011flant\u0131 \u00fczerinden i\u015flenerek her birine kar\u015f\u0131 ayr\u0131 response&#8217;lar al\u0131nabilmektedir.<br \/>\n<div id=\"attachment_23889\" style=\"width: 719px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-23889\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi.jpg\" alt=\".NET 6&#039;da HTTP\/3 Deste\u011fi\" width=\"709\" height=\"347\" class=\"size-full wp-image-23889\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi.jpg 709w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-300x147.jpg 300w\" sizes=\"auto, (max-width: 709px) 100vw, 709px\" \/><\/a><p id=\"caption-attachment-23889\" class=\"wp-caption-text\">HTTP\/1.1 ile HTTP\/2 aras\u0131ndaki request\/response s\u00fcre\u00e7lerindeki davran\u0131\u015f modeli&#8230;<\/p><\/div><br \/>\n<div id=\"attachment_23884\" style=\"width: 649px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi.gif\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-23884\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi.gif\" alt=\".NET 6&#039;da HTTP\/3 Deste\u011fi\" width=\"639\" height=\"376\" class=\"size-full wp-image-23884\" \/><\/a><p id=\"caption-attachment-23884\" class=\"wp-caption-text\">HTTP\/1.1 ile HTTP\/2 aras\u0131ndaki performans fark\u0131&#8230;<\/p><\/div><\/p>\n<p>Bu harika geli\u015fmeyi, g\u00fcn\u00fcm\u00fczde mobil cihazlar\u0131n kullan\u0131m\u0131n\u0131n artmas\u0131 ve g\u00fcvenilmez Wi-Fi ba\u011flant\u0131lar\u0131n kullan\u0131lmas\u0131 sayesinde ya\u015fanan t\u00fcrl\u00fc problemler seyretti. HTTP\/2, \u00f6nceki s\u00fcr\u00fcm\u00fcn bir\u00e7ok sorununu \u00e7\u00f6zse de, esas olarak temeldeki TCP protokol\u00fcnden kaynaklanan b\u00fcy\u00fck bir sorunla ba\u015f edemedi.<\/p>\n<p>HTTP\/2, g\u00fcvenli haberle\u015fmeden sorumlu olan TLS(Transport Layer Security) protokol\u00fc \u00fczerinde \u00e7al\u0131\u015fan bir protokold\u00fcr. Haliyle HTTP\/2, TCP protokol\u00fcn\u00fc kullanarak veri iletimini ger\u00e7ekle\u015ftirirken g\u00fcvenlik ama\u00e7l\u0131 HTTPS kullan\u0131l\u0131yorsa burada TLS protokol\u00fcn\u00fcn de kullan\u0131lmas\u0131 zorunlulu\u011fu mevcuttur. \u0130\u015fte bu durumda TCP&#8217;nin d\u0131\u015f\u0131nda TLS&#8217;de ayr\u0131 bir ba\u011flant\u0131 gerektirdi\u011fi i\u00e7in belirli bir gecikme s\u00f6z konusu olmaktad\u0131r. Bunlar\u0131n d\u0131\u015f\u0131nda olas\u0131 paket kayb\u0131 durumlar\u0131nda HTTP\/2, HTTP\/1 kadar iyi performans g\u00f6steremeyecektir.<\/p>\n<p>Google t\u00fcm bu sorunlardan s\u0131yr\u0131lmaya ve HTTPS protokol\u00fcn\u00fc h\u0131zland\u0131rmaya y\u00f6nelik olarak UDP protokol\u00fcne dayal\u0131 <em>QUIC(Quick UDP Internet Connections)<\/em> protokol\u00fcn\u00fc geli\u015ftirmi\u015f bulunmaktad\u0131r.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-1.jpg\" alt=\".NET 6&#039;da HTTP\/3 Deste\u011fi\" width=\"560\" height=\"223\" class=\"aligncenter size-full wp-image-23891\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-1.jpg 560w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-1-300x119.jpg 300w\" sizes=\"auto, (max-width: 560px) 100vw, 560px\" \/><\/a><br \/>\nYukar\u0131daki g\u00f6rselde g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere HTTP\/3, TCP yerine UDP protokol\u00fc \u00fczerinden \u00e7al\u0131\u015fmaktad\u0131r. Ee b\u00f6ylece QUIC, UDP tabanl\u0131 oldu\u011fu i\u00e7in TCP tabanl\u0131 olan HTTP\/2&#8217;ye nazaran bilgi aktar\u0131m\u0131n\u0131 a\u00e7\u0131k ara performans art\u0131\u015f\u0131yla birlikte sa\u011flamaktad\u0131r. Lakin burada dikkat edilmesi gereken bir nokta vard\u0131r. UDP g\u00fcvenilir ileti\u015fim sa\u011flamamaktad\u0131r. Hal b\u00f6yleyken QUIC, g\u00fcvenilir veri iletimini sa\u011flayabilmek i\u00e7in UDP&#8217;nin \u00fczerine bir katman eklemekte ve TLS ile bu g\u00fcvenli\u011fi sa\u011flamaktad\u0131r.<br \/>\n<div id=\"attachment_23900\" style=\"width: 610px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-1.gif\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-23900\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-1.gif\" alt=\".NET 6&#039;da HTTP\/3 Deste\u011fi\" width=\"600\" height=\"381\" class=\"size-full wp-image-23900\" \/><\/a><p id=\"caption-attachment-23900\" class=\"wp-caption-text\">HTTP ile HTTP\/3(Quic) aras\u0131ndaki performans fark\u0131&#8230;<\/p><\/div><\/p>\n<h6>.NET&#8217;te HTTP\/3 Deste\u011fi<\/h6>\n<p>HTTP\/3 i\u00e7in temel katman olarak tasarlanan QUIC protokol\u00fc art\u0131k .NET 6&#8217;dan itibaren desteklenmektedir. Bu geli\u015fme neticesinde; .NET, a\u011f de\u011fi\u015fiklikleriyle ba\u015fa \u00e7\u0131kma ve ba\u011flant\u0131 s\u00fcre\u00e7lerinde olas\u0131 paket kay\u0131plar\u0131 meydana geldi\u011finde iyi bir kurtarma sa\u011flama yetene\u011fi ile g\u00fcc\u00fcne g\u00fc\u00e7 katm\u0131\u015f bulunmaktad\u0131r.<\/p>\n<p><strong>GEREKS\u0130N\u0130MLER<\/strong><br \/>\nHTTP\/3&#8217;\u00fc kullanabilmek i\u00e7in ilgili sunucuda <em>MSQuic<\/em> ve <em>TLS<\/em>&#8216;in y\u00fckl\u00fc olmas\u0131 gerekmektedir. MSQuic, .NET 6&#8217;n\u0131n bir par\u00e7as\u0131 olarak y\u00fcklenmektedir lakin TLS, <em>Schannel SSP<\/em><em>(Security Support Provider Interface)<\/em>&#8216;ye ihtiya\u00e7 duymaktad\u0131r. Haliyle bu i\u015fletim sisteminin son s\u00fcr\u00fcmleriyle sa\u011flanmaktad\u0131r. Misal, Windows 11 \ud83d\ude09 <span style=\"font-size:12px;\">(ki ben deniz bu makaleyi klavyeye al\u0131rken Windows 11 \u00fczerinden i\u015flem yap\u0131yorum&#8230;)<\/span><\/p>\n<p>E\u011fer Linux&#8217;da \u00e7al\u0131\u015f\u0131yorsan\u0131z <em>libmsquic<\/em> paketinin y\u00fcklenmesi gerekmektedir. Misal Ubuntu&#8217;da <code>sudo apt install libmsquic<\/code> komutu e\u015fli\u011finde ilgili paket y\u00fcklenebilmektedir.<\/p>\n<h6>Kestrel Server&#8217;da HTTP\/3 Konfig\u00fcrasyonu<\/h6>\n<p>Kestrel sunucusunda HTTP\/3 deste\u011fini sa\u011flayabilmek i\u00e7in a\u015fa\u011f\u0131daki gibi konfig\u00fcrasyonun yap\u0131lmas\u0131 gerekmektedir;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.WebHost.ConfigureKestrel((context, options) =&gt;\r\n{\r\n    options.Listen(IPAddress.Any, 7154, listenOptions =&gt;\r\n    {\r\n        \/\/listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;\r\n        listenOptions.Protocols = HttpProtocols.Http3;\r\n        listenOptions.UseHttps();\r\n    });\r\n});\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu yazd\u0131\u011f\u0131n\u0131z anda a\u015fa\u011f\u0131daki g\u00f6rseldeki gibi <em style=\"color:red;font-size:14px;\">Using &#8216;Http3&#8217; requires opting into preview features. See https:\/\/aka.ms\/dotnet-warnings\/preview-features for more information.<\/em> hatas\u0131n\u0131 al\u0131yorsan\u0131z e\u011fer bunun sebebi mevzu bahis konunun bir \u00f6nizleme \u00e7al\u0131\u015fmas\u0131 olmas\u0131d\u0131r.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi.png\" alt=\".NET 6&#039;da HTTP\/3 Deste\u011fi\" width=\"1084\" height=\"86\" class=\"aligncenter size-full wp-image-23913\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi.png 1084w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-300x24.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-1024x81.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-768x61.png 768w\" sizes=\"auto, (max-width: 1084px) 100vw, 1084px\" \/><\/a>Haliyle bu hatan\u0131n kalkmas\u0131 i\u00e7in Asp.NET Core uygulaman\u0131z\u0131n <em>.csproj<\/em> dosyas\u0131na gelerek &#8216;PropertyGroup&#8217; tan\u0131mlamas\u0131 i\u00e7erisinde <code>&lt;EnablePreviewFeatures&gt;True&lt;\/EnablePreviewFeatures&gt;<\/code> komutu e\u015fli\u011finde &#8216;EnablePreviewFeatures&#8217; \u00f6zelli\u011finin etkinle\u015ftirilmesi gerekmektedir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-1.png\" alt=\".NET 6&#039;da HTTP\/3 Deste\u011fi\" width=\"528\" height=\"222\" class=\"aligncenter size-full wp-image-23919\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-1.png 528w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-1-300x126.png 300w\" sizes=\"auto, (max-width: 528px) 100vw, 528px\" \/><\/a><\/p>\n<p>\u015eimdi yaz\u0131lan \u00f6rnek koda tekrar geri d\u00f6nersek e\u011fer &#8216;7154&#8217; portuna herhangi bir adresten gelecek olan t\u00fcm isteklerin, 7. sat\u0131rda yaz\u0131lan <code style=\"color:blue;\"><strong>listenOptions.Protocols = HttpProtocols.Http3<\/strong><\/code> komutu sayesinde HTTP\/3 protokol\u00fcn\u00fc kullanmas\u0131 gerekti\u011fini bildirmi\u015f bulunuyoruz. Burada HTTP\/3&#8217;e olan zorunluluk yerine, 6. sat\u0131rda ifade edildi\u011fi gibi <code style=\"color:blue;\"><strong>listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3<\/strong><\/code> komutu sayesinde t\u00fcm HTTP s\u00fcr\u00fcmlerinden istek gelebilece\u011fini de ifade edebiliriz.<\/p>\n<h6>Client&#8217;da HTTP\/3 Konfig\u00fcrasyonu<\/h6>\n<p>C#&#8217;da <code>HttpClient<\/code> s\u0131n\u0131f\u0131, HTTP\/3 protokol\u00fcn\u00fc destekleyecek \u015fekilde tekrar g\u00fcncellenmi\u015ftir. Bu g\u00fcncel halini kullanabilmek i\u00e7in ilgili client uygulamas\u0131n\u0131n <em>.csproj<\/em> dosyas\u0131nda <em style=\"font-size:12px;\">System.Net.SocketsHttpHandler.Http3Support<\/em> k\u00fct\u00fcphanesinin item olarak eklenmesi gerekmektedir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-2.png\" alt=\".NET 6&#039;da HTTP\/3 Deste\u011fi\" width=\"866\" height=\"63\" class=\"aligncenter size-full wp-image-23926\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-2.png 866w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-2-300x22.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/11\/NET-6da-HTTP3-Destegi-2-768x56.png 768w\" sizes=\"auto, (max-width: 866px) 100vw, 866px\" \/><\/a>Bu i\u015flemden sonra client&#8217;\u0131n a\u015fa\u011f\u0131daki gibi geli\u015ftirilmesi yeterlidir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing HttpClient client = new();\r\nclient.DefaultRequestVersion = HttpVersion.Version30;\r\nclient.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionExact;\r\n\r\nusing HttpResponseMessage response = await client.GetAsync(&quot;https:\/\/localhost:7154&quot;);\r\nstring responseContent = await response.Content.ReadAsStringAsync();\r\n\r\nConsole.WriteLine(responseContent);\r\n<\/pre>\n<h6>gRPC&#8217;de HTTP\/3 Konfig\u00fcrasyonu<\/h6>\n<p>\u00d6z\u00fc itibariyle HTTP\/2 protokol\u00fcn\u00fc kullanan gRPC k\u00fct\u00fcphanesinde HTTP\/3 protokol\u00fcn\u00fc kullanabilmek i\u00e7in hasbel kader yukar\u0131daki gibi basit bir de\u011fi\u015fikli\u011fin yap\u0131lmas\u0131 yeterlidir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing GrpcService2.Services;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\nusing System.Net;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddGrpc();\r\nbuilder.WebHost.ConfigureKestrel((context, options) =&gt;\r\n{\r\n    options.Listen(IPAddress.Any, 7212, listenOptions =&gt;\r\n    {\r\n        listenOptions.Protocols = HttpProtocols.Http3;\r\n        listenOptions.UseHttps();\r\n    });\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\n\/\/ Configure the HTTP request pipeline.\r\napp.MapGrpcService&lt;GreeterService&gt;();\r\napp.MapGet(&quot;\/&quot;, () =&gt; &quot;Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https:\/\/go.microsoft.com\/fwlink\/?linkid=2086909&quot;);\r\n\r\napp.Run();\r\n<\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere, 8 ile 15. sat\u0131r aral\u0131\u011f\u0131nda yap\u0131lan konfig\u00fcrasyon gRPC k\u00fct\u00fcphanesinin HTTP\/3 protokol\u00fc e\u015fli\u011finde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamaktad\u0131r. Tabi burada ilgili uygulaman\u0131n <em>.csproj<\/em> dosyas\u0131nda <code>&lt;EnablePreviewFeatures&gt;True&lt;\/EnablePreviewFeatures&gt;<\/code> komutu e\u015fli\u011finde <em>EnablePreviewFeatures<\/em> \u00f6zelli\u011finin aktifle\u015ftirilmesi gerekmektedir.<\/p>\n<p><strong>GRPC Client<\/strong><br \/>\ngRPC client&#8217;\u0131 da a\u015fa\u011f\u0131daki gibi HTTP\/3 protokol\u00fc \u00fczerinden istekte bulunabilmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing HttpClient httpClient = new();\r\nhttpClient.DefaultRequestVersion = HttpVersion.Version30;\r\nhttpClient.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionExact;\r\n\r\nvar channel = GrpcChannel.ForAddress(&quot;https:\/\/localhost:7212&quot;, new() { HttpClient = httpClient });\r\n\r\nvar greetClient = new Greeter.GreeterClient(channel);\r\n\r\nHelloReply response = await greetClient.SayHelloAsync(new HelloRequest { Name = &quot;Gen\u00e7ay&quot; });\r\nConsole.WriteLine($&quot;Gelen cevap : {response.Message}&quot;);\r\n<\/pre>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde .NET 6&#8217;da gelen HTTP\/3 deste\u011fi \u00fczerine bir incelemede bulunuyor olaca\u011f\u0131z. .NET 6, HTTP\/3 ile Asp.NET i\u00e7in Kestrel, HTTP.Sys ve IIS Sunucu Senaryolar\u0131na, HttpClient Request&#8217;lerine ve gRPC teknolojisine olmak \u00fczere \u00fc\u00e7 farkl\u0131&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":23900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4446,4443],"tags":[4449,4450,4448,4452,4456,4454,4455,4447,4451,4453],"class_list":["post-23873","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-6","category-asp-net-core-6-0","tag-net-6","tag-net-6-http-3","tag-asp-net-core-http-3","tag-google-quic-protocol","tag-grpc-client-http-3","tag-grpc-http-3","tag-grpc-server-http-3","tag-http-3","tag-quic-protocol","tag-quick-udp-internet-connections"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/23873","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=23873"}],"version-history":[{"count":51,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/23873\/revisions"}],"predecessor-version":[{"id":23936,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/23873\/revisions\/23936"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/23900"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=23873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=23873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=23873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}