cURL 7.86 已发布,此版本添加实验性 WebSocket 支持、移除 NPN 支持,并带来大量修复。
重点
已移除 NPN 支持
curl 不再支持使用 NPN 协商 HTTP/2。执行此操作的标准方法长期以来一直是 ALPN,且浏览器几年前就取消了对 NPN 的支持。
WebSocket API
此版本中包含一个实验性 WebSocket API ,它以三个新功能和一个新的 setopt 选项来控制行为。
WebSocket API 的详细介绍。
Bug修复
一些已解决的问题:
- aws_sigv4 标头计算代码进行了重大改革。
- curl 手册页详细说明了每个选项的多用途
- 弃用带有小 curl_off_t 的构建,这个版本的 curl 不再支持在没有 64 位数据类型的系统上构建。
- ngtcp2 配置选项默认为“否”,需要明确要求在构建中启用 ngtcp2。
- 拒绝带有 TAB 字符的 cookie 名称或内容,名称或内容中带有标签的 Cookie无法互操作, curl 将它们保存到磁盘时会出问题,因此拒绝。
- 对于带有 gcc + want 警告的构建,设置 gnu89 标准,为了更好地确保兼容性。
- 使用 -O2 作为默认优化配置中的 clang
- 警告 –ssl 使用是“不安全的”
- ctype 函数转换为仅宏,用宏替换了整个函数族
- 100 多个文档拼写修复
- 使 nghttp2 对 HTTP/2 中的字段空白不那么挑剔,如果使用新的 nghttp2 库构建,curl 对标题字段后的尾随空格不那么挑剔。
- 使用 URL 解码的用户名进行 .netrc 解析,这种回归使得 curl 在使用 .netrc 文件查找相应密码时,无法正确解码 URL 中提供的用户名。
- 使 certinfo 可用于 QUIC,CURLOPT_CERTINFO选项现在适用于 QUIC/HTTP/3 传输。
- 强制 IPv4 传输仅使用 A 查询,当要求 curl 仅使用 IPv4 进行传输时,curl 现在仅解析 IPv4 名称。但很大一部分系统在请求 AAAA 地址时会出现问题,因此需要使用此选项来避免 bug。
- schannel:导入 PFX 时,禁用密钥持久性,使用 Schannel 后端时的一些操作会导致之后磁盘上的剩余文件。
- 添加和使用 Curl_timestrcmp,curl 在比较库中的密钥时使用这个新的恒定时间函数,避免使用时间作为反馈来判断猜测用户名或密码。
- curl:防止在并行模式下过度排队,命令行工具过于急切地在并行模式下创建和排队等待传输,使得具有数百万传输的命令行很容易使用海量的内存。
- url 解析器:在不猜测时更好地提取方案
- 使用 CURLU_URLENCODE 修复不带斜线的解析 URL
- url 解析器:更精简,分配更少,URL 解析器现快了几个百分点,且减少了内存分配。
- url 解析器:拒绝主机名字段中的坏字符
- wolfSSL:修复会话管理错误,由于缺少引用计数器,会话 ID 缓存处理可能会触发崩溃。
未来计划
计划在未来移除以下功能:
- 支持没有 64 位数据类型的系统
- 支持 NSS TLS 库
更新公告:https://daniel.haxx.se/blog/2022/10/26/7-86-0-with-websocket/