常见问题
Ktor 是否提供捕获 IPC 信号(例如 SIGTERM 或 SIGINT)的方法,以便服务器可以优雅地关闭?
如果您正在运行一个 EngineMain,它将自动处理。 否则,您需要手动处理。 您可以使用 Runtime.getRuntime().addShutdownHook
这一 JVM 机制。
如何获取代理后面的客户端 IP?
如果代理提供了正确的标头并且
call.request.origin
属性会提供有关原始调用者(即代理)的连接信息。 如何测试 main 分支上的最新提交?
您可以从 jetbrains.space
获取 Ktor 的每夜构建版本。 从抢先体验计划了解更多信息。
如何确认我正在使用哪个版本的 Ktor?
您可以使用
Server
响应标头,例如: 我的路由未被执行。如何调试?
Ktor 提供了一种跟踪机制,可帮助排查路由决策问题。 请查看跟踪路由章节。
如何解决“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 表示未能找到适合将接收到的正文从结果类型转换为客户端期望类型的转换。
检查您请求中的
Accept
标头是否指定了所需的内容类型,以及服务器响应中的Content-Type
标头是否与客户端期望的类型匹配。注册针对您正在使用的特定内容类型所需的转换。
您可以在客户端使用ContentNegotiation插件。此插件允许您指定如何序列化和反序列化不同内容类型的数据。
kotlin请确保您安装了所有所需的插件。可能缺失的特性有:
- 客户端 WebSockets 和 服务器 WebSockets
- 客户端 ContentNegotiation 和 服务器 ContentNegotiation
- Compression