这篇文章主要介绍“在.Net Framework应用中请求HTTP2站点的问题怎么解决”,在日常操作中,相信很多人在在.Net Framework应用中请求HTTP2站点的问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”在.Net Framework应用中请求HTTP2站点的问题怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
什么是HTTP2及依赖条件
HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),简称为h3(基于TLS/1.2或以上版本的加密连接)或h3c(非加密连接)[1],是HTTP协议的的第二个主要版本,使用于全球资讯网。
多数主流浏览器已经在2015年底支持了该协议。[9]此外,根据W3Techs的数据,截至2021年10月,全球有46.5%的网站支持了HTTP/2。
划重点:HTTP2依赖的TLS协议版本号必须大于等于1.2,因此后文就分别针对Windows系统、Net Framework框架对HTTP2、TLS1.2的支持情况来梳理。
Windows 对HTTP2的支持情况?
调研结论:需要Windows Server 2016或者Windows 10及更高版本。
Windows对TLS1.2的支持情况?
结论:Windows 8.1、Windows Server 2012 R2、Windows 10、Windows Server 2016 和更高版本的 Windows 在本机支持 TLS 1.2。
.Net Framework对HTTP2的支持情况?
结论:不支持!但是有解决方案:安装nuget包System.Net.Http.WinHttpHandler
nuget包介绍如图所示:
根据简介可以得知:该nuget包是将Windows系统的WinHTTP接口封装,也就是说程序发起HTTP请求是通过Windows实现,而不是HttpClientHandler。而根据前面的调研,Windows对HTTP2和TLS1.2的支持情况已经非常明确。
.Net Framework对TLS1.2的支持情况?
结论:框架.Net Framework 4.6.2及以上支持tls1.2
核心代码片段
现在确保Windows系统能够满足最低要求 ,即可编写测试应用来验证请求。下面是代码片段,我在Windows Server 2016+.NET Framework 4.8环境可以请求成功。
try{ string url = "https://api.push.apple.com" + (":443") + "/3/device/" + appleDeviceToken; var req = new HttpRequestMessage(HttpMethod.Post, url); req.Version = new Version(2, 0); req.Content = new JsonContent("{}"); var resp = httpClient.SendAsync(req).Result; string respContent = resp.Content.ReadAsStringAsync().Result; this.outputBox.Text += respContent;}catch (Exception ex){ this.exceptionBox.Text = ex.ToString();}
到此,关于“在.Net Framework应用中请求HTTP2站点的问题怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!