1.2.4 → 1.3.0 迁移

预计阅读时间: 4 分钟

1.3.0

  • ktor 客户端代理支持
  • 消除了 kotlinx.io 依赖
  • 修复了服务器一致性压缩处理:保持原始内容长度
  • 修复了处理正文的 GET 请求问题 #1302
  • 修复了带有空正文的 curl 请求问题
  • 添加了 iOS url 会话配置
  • 修复了 CIO 引擎不再在“Host”头中发送端口的问题 #1295
  • 向 TLS 签名算法添加 INTRINSIC 值
  • 引入了在请求正文中发送字符串的能力
  • 改进了客户端与服务器使用 kotlinx.serialization 的 typeOf 支持
  • 具有新版元数据的 Gradle 5.4.1+
  • 改进了 Android 上客户端与服务器的异常处理
  • 添加了缺少的 TLS 的参数并放宽了 TLS 解析以忽略不支持的特性
  • 改进了会话诊断 #1368
  • 修复了测试引擎中 hookRequests 的问题 #1300
  • 弃用了 java.time 相关 API 并进行相关清理(为了将来的 kotlin.time 支持)
  • 限制了 CIO HTTP 头解析
  • 引入了头名称与值验证
  • 修复了 ktor 客户端在请求端必须重新验证的问题 #1406
  • 修复了 OkHttp 客户端关闭时资源清理的问题
  • 添加了 watchos/tvos 原生目标平台
  • 修复了原生与 JS 目标平台的内容截断问题
  • 修复了服务端的 If-Range 头解析问题,以免在日期解析时崩溃 #1377
  • 修复了服务端的条件头处理问题
  • 降低了 DefaultHeaders 服务端特性所需的 JDK 版本
  • 修复了由于响应流水线中的异常导致客户端挂起的问题
  • 将 HttpClientJvmEngine 替换成了现在所有平台共用的 HttpClientEngineBase(只影响自定义客户端引擎)
  • 修复了客户端中执行与调用上下文的层次结构,允许使用执行上下文正确处理请求生存期。
  • 优化 JS 模块导入时间 #1464
  • 升级了 Netty、Jetty 与 Tomcat 实现的版本
  • 添加了 Pebble 模板引擎 #1374
  • 引入了始终与实际套接字端口绑定的 localPort 路由 #1392
  • 修正了 cookie 过期日期解析的问题 #1390
  • 服务端身份验证特性的各个阶段现在都已公开 #1160
  • 修复了重定向后重新发送身份验证头的问题 #1467
  • 对 CIO 客户端引擎来说 TCP 半关闭已可选,并且默认情况下是禁用的。 #1456
  • 修复了 Apache 客户端随机超时问题
  • 修复了区域设置相关代码 #1491
  • 修复了提前关闭频道时的 unclosed websocket channels 问题
  • 将 ktor-client-mock 引擎改进为线程安全 #1505
  • 修复了客户端 cookie 日志记录 #1506
  • 修复了测试引擎中的多次应用程序停止事件的问题 #1498
  • 修复了 CIO ActorSelectorManager 因取消的键而不自旋的问题(既影响 CIO 客户端也影响 CIO 服务器)
  • 使默认身份验证函数失败,以强制用户实现之
  • 在测试服务器中引入了测试客户端实例
  • 修复了各种服务器与客户端引擎,对于不存在的头返回 null 而非空列表
  • 引入了对客户端和服务器中 json 结构的支持 #1519
  • 修正了区域设置相关代码 #1491
  • kotlinx.coroutines 1.3.3

  • 完整更新日志:https://github.com/ktorio/ktor/compare/1.2.4...1.3.0
  • API 文档:https://api.ktor.io/1.3.0

发布于 2020-01-14(1.3.0

版本升级:

  • Kotlin 1.3.50 -> 1.3.61
  • kotlinx.coroutines 1.3.0 -> 1.3.3
  • Dropwizard: 3.2.4 -> 4.1.0
  • Tomcat: 9.0.10 -> 9.0.29
  • Jetty: 9.4.22.v20191022 -> 9.4.24.v20191120
  • Netty: 4.1.37.Final -> 4.1.43.Final
  • kotlinx.io -> 0.1.14 -> none

破坏性变更:

  • 已删除 kotlinx.io 依赖,请替换导入项:
    • import kotlinx.io. -> import io.ktor.utils.io.
    • import kotlinx.coroutines.io. -> import io.ktor.utils.io.
  • 与 1.2.x 二进制不兼容
  • 不兼容的 Gradle 元数据版本(MPP 需要 5.4.1+ 版本)
  • 忘记调用 HttpResponse.close 会很危险,因此我们清除了其 API:
    • HttpResponse 不再是 Closeable:无需关闭,无资源泄露
    • HttpResponse 默认在内存中
    • 引入了 HttpStatement:用于流式处理与部分加载的新的原语
  • Web socket session send function now throws CancellationException instead of ClosedSendChannelException.

已知问题:

  • Netty HTTP/2 推送有时会被拒绝
  • 仍然不支持在非 main worker 上运行 iOS 与原生客户端
  • JS 引擎可能会触发 CORS 预检 (#1533)