路线图v2#

重要

我们在寻找 sponsors and supporters for urllib3 v2.0 on Open Collective 。我们的小团队有很多工作要做,我们希望确保开发可以按时完成,同时也要公平地补偿贡献者在大型版本中所需的额外工作,比如 v2.0

中提供的其他信息 赞助商和支持者 我们文档的一部分。

🚀 功能API兼容性#

我们在维持 99%功能API兼容性 使迁移成为大多数用户的一个简单选择。从v1.x迁移到v2.x应该是您完成的最简单的主要版本升级。

大多数更改都是对默认配置、支持的Python版本和内部实现细节的更改。所以除非你在一个特定的情况下,你应该注意到没有变化!🎉

v1.26.x安全和错误修复#

感谢来自 Tidelift 我们可以继续支持v1.26.x版本,同时提供安全性和bug修复,以备将来使用💖

如果您的组织依赖于urllib3并希望继续提供支持,您可以了解有关 Tidelift Subscription for Enterprise .

🔐 默认的现代安全#

HTTPS需要TLS 1.2+#

超过95%的网站支持TLS1.2或更高版本。现在,我们可以轻松地将默认的最低TLS版本切换为1.2,以确保在不中断服务的情况下为用户提供高安全性。

默认情况下删除TLS 1.0和1.1意味着,如果将来发现TLS 1.0或1.1中的漏洞,您将不会容易受到TLS降级攻击。免费提供额外的安全保障!通过删除tls1.0和tls1.1,我们还收紧了我们需要支持的密码列表,以确保在网络上传输的数据具有高安全性。

如果您仍然需要在应用程序中使用tls1.0或1.1,您仍然可以升级到v2.0,您只需要设置 ssl_version 以继续使用旧版TLS版本。

停止验证证书中的CommonName#

正在删除长期不推荐的支持 commonName 证书上只支持验证的字段 subjectAltName 使我们与浏览器和其他HTTP客户端库保持一致,并提高用户的安全性。

通过SSLContext验证证书#

默认情况下,证书验证由urllib3处理以支持旧版Python版本,但是现在我们可以依赖Python的证书验证了!这将加快验证证书的速度,并意味着在Python或OpenSSL中对证书验证所做的任何改进都将立即可用。

✨ 针对Python3.6优化+#

在v2.0中,我们将特别针对cpython3.6+和pypy7.0+(与cpython3.6兼容)并放弃对Python版本2.7和3.5的支持。

通过删除过期的Python版本,我们可以通过使用新的特性来优化python3.6+的代码库,从而提高性能并减少为支持遗留版本而需要执行的代码量。

🔮 追踪#

目前,使用urllib3,很难深入了解HTTP客户端的性能以及连接信息的外观。在v2.0中,我们将向HTTP响应对象添加跟踪和遥测信息,包括:

  • 连接ID

  • 由DNS解析的IP地址

  • 请求方法、目标和标头

  • TLS版本和密码

  • 证书指纹、subjectAltName和有效性信息

  • DNS、请求数据、响应的第一个字节的计时

📜 Type-Hinted APIs#

最后,您将能够使用urllib3对代码运行Mypy或其他类型检查程序。这也意味着对于支持类型提示的ide,您将从auto-complete获得更好的建议。别再和 **kwargs 你说什么?

我们还将添加API接口,以确保在对接口进行子分类时,只使用受支持的公共API,以确保兼容性,并将故障降至最低。

🎁 ...还有更多功能!#

  • 顶层 urllib3.request() API

  • 有可能替代HTTP实现

  • 翻译指南

  • 支持Z标准压缩

  • 流动 multipart/form-encoded 请求数据

  • 更强大和可配置的重试逻辑

如果在urllib3v2.0中您没有看到某个特性,但是您希望在urllib3v2.0中看到这个特性,那么在提出特性建议时就存在一个开放的GitHub问题。

📅 发布和迁移计划#

我们的目标是所有人 v2.x 将在中发布的功能 mid-to-late 2021 .

以下是发布v2.0之前的发布和迁移计划:

  • 发展 v2.x 打破改变开始了。

  • 释放 v1.26.0 的不推荐警告 v2.0.0 打破改变。这将是 v1.x 溪流。

  • 释放 v2.0.0-alpha1 一旦所有突破性的改变都完成了。在此阶段,我们将等待用户报告问题、错误和意外中断,以确保发布 v2.0.0 进展顺利。

  • 剩余开发 v2.x 功能开始。

  • 释放 v2.0.0v2.0.0-alpha1 .

  • 释放 v2.1.0 有剩余的 v2.x 特征。

内的弃用警告 v1.26.x 默认情况下会选择加入。

更详细的应用程序迁移指南即将发布。

包维护人员#

由于这是近9年来的第一个主要版本,一些用户可能会对新的urllib3主要版本感到措手不及。我们试图通过 v2.x API兼容 v1.x .

如果您的应用程序或库使用urllib3,并且您希望特别小心不要破坏您的用户,您可以这样固定urllib3,直到您确保与 v2.x

# 'install_requires' or 'requirements.txt'
"urllib3>=1.25,<2"

我们非常感谢测试兼容性并提供反馈 v2.0.0-alpha1 一旦释放。