常见问题解答
常见问题解答
如何提问、报告错误、联系你们、进行贡献或提供反馈等?
请访问 Support 页面以详细了解可用的支持渠道。 How to contribute 指南介绍了您可以为 Ktor 做出贡献的方式。
CIO 是什么意思?
CIO 代表 基于协程的 I/O(Coroutine-based I/O) 。 通常我们将其称为一个使用 Kotlin 和协程(Coroutines)来实现 IETF RFC 或其他协议逻辑的引擎,且不依赖于外部基于 JVM 的库。
Ktor 是否提供捕获 IPC 信号(例如 SIGTERM 或 SIGINT)的方法,以便优雅地处理服务器停机?
如果您正在运行 EngineMain,它将自动处理。 否则,您需要手动处理。 您可以使用 JVM 提供的 Runtime.getRuntime().addShutdownHook 设施。
在代理之后如何获取客户端 IP?
如果代理提供了正确的标头,并且安装了
call.request.origin 属性会提供有关原始调用者(代理)的连接信息。 如何测试 main 分支上的最新提交?
您可以从 jetbrains.space 获取 Ktor 每夜构建版本。 详情请参阅 抢先体验计划。
如何确认我使用的是哪个版本的 Ktor?
您可以使用
Server 响应标头,例如: 我的路由没有被执行。我该如何调试它?
Ktor 提供了一种跟踪机制来帮助排查路由决策。 请查看 Tracing routes 章节。
如何解决 'No configuration setting found for key ktor'?
这意味着 Ktor 无法找到
resources 文件夹中存在配置文件,并且该 resources 文件夹已被正确标记。 可以考虑使用 Ktor 项目生成器 或 IntelliJ IDEA Ultimate 的 Ktor 插件 来创建一个可以运行的项目作为基础。有关更多信息,请参阅 为什么 'CURL -I' 返回 '404 Not Found'?
CURL -I 是 CURL --head 的别名,执行的是 HEAD 请求。 默认情况下,Ktor 不会为 GET 处理程序处理 HEAD 请求。 要启用此功能,请安装
使用 'HttpsRedirect' 插件时如何解决无限重定向问题?
最可能的原因是您的后端位于反向代理或负载均衡器之后,而这些中间件正在向您的后端发起普通的 HTTP 请求,因此 Ktor 后端中的 HttpsRedirect 插件认为这是一个普通的 HTTP 请求并响应重定向。
通常,反向代理会发送一些描述原始请求的标头(例如它是否为 HTTPS,或原始 IP 地址),可以使用
如何在 Windows 上安装 'curl' 以在 Kotlin/Native 上使用相应的引擎?
Curl 客户端引擎需要安装 curl 库。 在 Windows 上,您可以考虑使用 MinGW/MSYS2 的 curl 二进制文件。
按照 MinGW/MSYS2 中的说明安装 MinGW/MSYS2。
使用以下命令安装
libcurl:shell如果您将 MinGW/MSYS2 安装到了默认位置,请将 C:\msys64\mingw64\bin\ 添加到
PATH环境变量中。
如何解决 'NoTransformationFoundException'?
NoTransformationFoundException 表示无法为接收到的正文找到合适的转换,即无法将生成的(resulted)类型转换为客户端预期的(expected)类型。
检查请求中的
Accept标头是否指定了所需的内容类型,以及服务器响应中的Content-Type标头是否与客户端预期的类型匹配。为您正在处理的特定内容类型注册必要的内容转换。
您可以在客户端使用 ContentNegotiation 插件。 此插件允许您指定如何针对不同的内容类型对数据进行序列化和反序列化。
kotlin确保安装了所有需要的插件。可能缺失的功能包括:
- 客户端 WebSockets 和服务器端 WebSockets
- 客户端 ContentNegotiation 和服务器端 ContentNegotiation
- Compression
