背景介绍

本文的需求背景是对接苹果公司的推送服务(APNS),苹果在安全方面比较积极,已经严格限制API只支持HTTP2。但是我这里的应用目前仍然是.NET Framework平台,所以必须寻找一种解决方案。本文在调研及验证后,将相关资料整理出来供大家参考。

什么是HTTP2及依赖条件

HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),简称为h2(基于TLS/1.2或以上版本的加密连接)或h2c(非加密连接)[1],是HTTP协议的的第二个主要版本,使用于全球资讯网。

多数主流浏览器已经在2015年底支持了该协议。[9]此外,根据W3Techs的数据,截至2021年10月,全球有46.5%的网站支持了HTTP/2。

Windows 对HTTP2的支持情况?

调研结论:需要Windows Server 2016或者Windows 10及更高版本。

参考资料:https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10/http2-on-iis

.Net Framework对HTTP2的支持情况?

结论:不支持!但是有解决方案:安装nuget包System.Net.Http.WinHttpHandler

参考资料:https://github.com/dotnet/runtime/issues/31217

.Net Framework对TLS的支持情况?

结论:框架.Net Framework 4.6.2及以上才支持tls1.2

参考资料:https://docs.microsoft.com/zh-cn/mem/configmgr/core/plan-design/security/enable-tls-1-2-client

核心代码片段

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();
}

总结

随着各大浏览器支持和苹果的带头效应,HTTP2的应用会越来越广泛,但是规模庞大的.NET Framework应用却也不能为了连接HTTP2就升级到NET Core平台。通过本文提供的方案,可以最小成本的实现.NET Framework应用成功访问HTTP2站点。

如何在.Net Framework应用中请求HTTP2站点的更多相关文章

  1. 如何在Windows Server 2003中配置FTP站点服务

    前面写过一篇文章<怎样给你的网站注册一个好域名?> ,讲到“玉米”,笔者有很深的情节,也希望与大家交流“米事”,可以站内私信我或者直接回复文章. 有了好域名只是做网站的开始.我们还要买主机 ...

  2. 在Entity Framework 7中进行数据迁移

    (此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:虽然EF7重新设计了Entity Framework,不过也还是能够支持数据迁移的. Entity Fra ...

  3. 如何在ASP.NET Core中应用Entity Framework

    注:本文提到的代码示例下载地址> How to using Entity Framework DB first in ASP.NET Core 如何在ASP.NET Core中应用Entity ...

  4. 如何在ASP.NET Core中实现CORS跨域

    注:下载本文的完整代码示例请访问 > How to enable CORS(Cross-origin resource sharing) in ASP.NET Core 如何在ASP.NET C ...

  5. 如何在 ASP.NET MVC 中集成 AngularJS(3)

    今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...

  6. 如何在 ASP.NET MVC 中集成 AngularJS(2)

    在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...

  7. 如何在 ASP.NET MVC 中集成 AngularJS(1)

    介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...

  8. 如何在Android应用程序中使用传感器模拟器SensorSimulator

    原文地址; 如何在Android应用程序中使用传感器模拟器 - 移动平台应用软件开发技术 - 博客频道 - CSDN.NET http://blog.csdn.net/pku_android/arti ...

  9. 无法打开登录 'ASPState' 中请求的数据库。登录失败。

    问题: 无法打开登录 'ASPState' 中请求的数据库.登录失败.用户 'WH\Administrator' 登录失败. 解决方法: (启动SQL Server Agent服务) 从本系统中找到: ...

随机推荐

  1. Spring 源码(3)Spring BeanFactory 是怎么创建的?

    Spring创建 BeanFactory 的方式 按照Bean的配置方式手动创建可以分为两种: 使用XMl配置的Bean 这种方式使用xml配置文件配置Bean的信息并且设置扫描的路径,扫描到的包可以 ...

  2. 华为麒麟团队力造的Python,整整26G

    华为团队力造的Python,下面链接自取 https://docs.qq.com/doc/DRkZvRkxvb292c2Vz

  3. Python最强IDE(PyCharm)安装教程

    欢迎关注公众号[Python开发实战],免费领取Python学习电子书! PyCharm是目前最流行.使用最广泛的Python IDE(Integrated Development Environme ...

  4. 4.文件共享总结上篇-Windows之间文件共享

    本文章包含上篇和下篇两部分,今天我们主要讨论Windows系统之间的文件互访 Windows系统之间文件互传 1)利用Windows自带的文件共享服务 本次试验以Win7为服务器端,win10为客户端 ...

  5. 浅谈Nginx性能调优

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! Linux系统参数优化 下文中提到的一些配置,需要较新的 ...

  6. JavaScript 数据结构与算法3(链表)

    学习数据结构的 git 代码地址: https://gitee.com/zhangning187/js-data-structure-study 1.链表 本章学习如何实现和使用链表这种动态的数据结构 ...

  7. GIL与普通互斥锁区别,死锁现象,信号量,event事件,进程池与线程池,协程

    GIL与普通互斥锁区别 GIL锁和互斥锁的异同点 相同: 都是为了解决解释器中多个线程资源竞争的问题 异: 1.互斥锁是Python代码层面的锁,解决Python程序中多线程共享资源的问题(线程数据共 ...

  8. Azure DevOps (十三) 通过Azure Devops部署一个Go的Web应用

    前几篇文章中,我们分别实现通过azure来部署.NET和Springboot的应用,今天我们来研究一下如何部署一套Go的Web应用上去. 文章配套视频专栏: https://space.bilibil ...

  9. Kafka 生产者解析

    一.消息发送 1.1 数据生产流程 数据生产流程图解: Producer创建时,会创建⼀个Sender线程并设置为守护线程 ⽣产消息时,内部其实是异步流程:⽣产的消息先经过拦截器->序列化器-& ...

  10. Spring Boot 2.7.0发布,2.5停止维护,节奏太快了吧

    这几天是Spring版本日,很多Spring工件都发布了新版本, Spring Framework 6.0.0 发布了第 4 个里程碑版本,此版本包含所有针对 5.3.20 的修复补丁,以及特定于 6 ...