使用 WinHttpHandler 与 HttpClientHandler 在 Net Framework 上编写的应用程序

Posted

技术标签:

【中文标题】使用 WinHttpHandler 与 HttpClientHandler 在 Net Framework 上编写的应用程序【英文标题】:Usage WinHttpHandler vs HttpClientHandler for apps written on Net Framework 【发布时间】:2018-05-16 08:04:12 【问题描述】:

我们可以在 HttpClient 中为 Net Framework 4.6.1+ 编写的应用程序使用至少 2 个处理程序,即:

HttpClientHandler(网络框架的一部分) WinHttpHandler(提供 通过 Nuget)

没有文章通过下一个问题来比较它们:

性能对比 使用 DNS 转移(当 IP 用于 DNS FQDN 已更改) 连接租约超时(当 HttpClient 没有 自动缩放时自动移动到新实例)

谁能分享你的使用经验WinHttpHandler

【问题讨论】:

【参考方案1】:

Karel Zikmund 回答了我的问题,你可以通过下一个url看到它

从 .NET Core 2.1 开始,HttpClientHandler 默认使用 SocketsHttpHandler - 基于套接字的新 C# 实现。

它的关键价值是跨平台的一致性和注重性能(尤其是针对 Linux/Mac 上的 CurlHandler)。

WinHttpHandler 是 winhttp 操作系统组件的包装器。如果您需要 HTTP/2,它是目前唯一的选择,因为 SocketsHttpHandler 还不支持 HTTP/2(参见 #23134)。

DNS 更改在两者上的行为相同,但是,您可以通过 SocketsHttpHandler.PooledConnectionLifetime 对其进行一些调整。

不支持 DNS TTL - 请参阅 #24257 和 #11224。解决方法是定期回收处理程序。您还可以使用更高级别的包装器HttpClientFactory,它会为您做到这一点(至少作为一种动力)。

【讨论】:

以上是关于使用 WinHttpHandler 与 HttpClientHandler 在 Net Framework 上编写的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

使用 httpc lib 将大型 http 响应流式传输到 Erlang 中的磁盘

Golang的一个简单实用的http客户端库httpc

yaws 因 httpc 崩溃:请求 docker 容器提供的 URL

HTTPC1-Web及网络基础

erlang常用模块

使用 Erlang 进行 https 帖子的简单示例