Skip to content

よくある質問

Ktor の適切な発音方法は何ですか?

/keɪ-tor/

"Ktor"という名前は何を意味しますか?

Ktorという名前は、Kotlinの「K」に置き換えられた略語のctor(constructor)に由来します。

質問、バグ報告、連絡、貢献、フィードバックなどはどうすればよいですか?

利用可能なサポートチャネルの詳細については、サポートページをご覧ください。 貢献方法ガイドでは、Ktorに貢献できる方法について説明しています。

CIOとは何を意味しますか?

CIOは コルーチンベースI/O の略です。 通常、Kotlinとコルーチンを使用してIETF RFCまたは別のプロトコルを実装するロジックを、外部のJVMベースのライブラリに依存せずに実装するエンジンを指します。

未解決(赤色)のKtorインポートを修正するには?

対応する

Ktorアーティファクト
既存のGradle/MavenプロジェクトにKtorサーバーの依存関係を追加する方法を学びます。
がビルドスクリプトに追加されていることを確認してください。

KtorはIPCシグナル(例:SIGTERMやSIGINT)を捕捉し、サーバーシャットダウンを適切に処理する方法を提供しますか?

EngineMainを実行している場合、自動的に処理されます。 それ以外の場合は、手動で処理する必要があります。 Runtime.getRuntime().addShutdownHookというJVMの機能を使用できます。

プロキシの背後にあるクライアントIPを取得するには?

プロキシが適切なヘッダーを提供し、

ForwardedHeader
必須の依存関係: io.ktor:%artifact_name% コード例: %example_name% ネイティブサーバーサポート: ✅
プラグインがインストールされている場合、call.request.originプロパティは元の呼び出し元(プロキシ)に関する接続情報を提供します。

mainブランチの最新コミットをテストするにはどうすればよいですか?

jetbrains.spaceからKtorのナイトリービルドを取得できます。 詳細は早期アクセスプログラムをご覧ください。

現在使用しているKtorのバージョンを確認するには?

DefaultHeaders
必須の依存関係: io.ktor:%artifact_name% ネイティブサーバーサポート: ✅
プラグインを使用すると、Ktorのバージョンを含むServerレスポンスヘッダーを送信できます。例:

ルートが実行されません。デバッグするにはどうすればよいですか?

Ktorはルーティングの決定のトラブルシューティングに役立つトレースメカニズムを提供します。 ルーティングのトレースセクションを確認してください。

'Response has already been sent'を解決するには?

これは、あなた、またはプラグイン、あるいはインターセプターがすでにcall.respond* 関数を呼び出しており、再度呼び出していることを意味します。

Ktorイベントを購読するには?

詳細については、

アプリケーション監視
コード例: %example_name%
ページをご覧ください。

'No configuration setting found for key ktor'を解決するには?

これは、Ktorが

設定ファイル
設定ファイルでさまざまなサーバーパラメータを設定する方法を学びます。
を見つけられなかったことを意味します。 resourcesフォルダーに設定ファイルがあり、そのresourcesフォルダーがそのようにマークされていることを確認してください。 ベースとなる動作するプロジェクトを持つために、Ktorプロジェクトジェネレーター または IntelliJ IDEA Ultimate用Ktorプラグインを使用してプロジェクトをセットアップすることを検討してください。詳細については、
新しいKtorプロジェクトを作成、開いて実行する
Ktorでサーバーアプリケーションを開き、実行し、テストする方法を学びます。
を参照してください。

AndroidでKtorを使用できますか?

はい、Ktorサーバーとクライアントは、少なくともNettyエンジンではAndroid 5(API 21)以降で動作することが知られています。

'CURL -I'が'404 Not Found'を返すのはなぜですか?

CURL -Iは、HEADリクエストを実行するCURL --headのエイリアスです。 デフォルトでは、KtorはGETハンドラーのHEADリクエストを処理しません。 この機能を有効にするには、

AutoHeadResponse
%plugin_name%は、GETが定義されているすべてのルートに対してHEADリクエストに自動的に応答する機能を提供します。
プラグインをインストールしてください。

'HttpsRedirect'プラグイン使用時の無限リダイレクトを解決するには?

最も可能性の高い原因は、バックエンドがリバースプロキシまたはロードバランサーの背後にあり、その仲介者がバックエンドに通常のHTTPリクエストを行っているため、Ktorバックエンド内のHttpsRedirectプラグインが通常のHTTPリクエストであると認識し、リダイレクトで応答してしまうことです。

通常、リバースプロキシは元のリクエスト(HTTPSであったか、元のIPアドレスなど)を記述するいくつかのヘッダーを送信し、それらのヘッダーを解析するための

ForwardedHeader
必須の依存関係: io.ktor:%artifact_name% コード例: %example_name% ネイティブサーバーサポート: ✅
プラグインがあります。これにより、
HttpsRedirect
必須の依存関係: io.ktor:%artifact_name% コード例: %example_name% ネイティブサーバーサポート: ✅
プラグインは元のリクエストがHTTPSであったことを認識します。

Kotlin/Nativeで対応するエンジンを使用するためにWindowsに「curl」をインストールするには?

Curlクライアントエンジンには、curlライブラリのインストールが必要です。 Windowsでは、MinGW/MSYS2 curlバイナリを検討するとよいでしょう。

  1. MinGW/MSYS2に記載されているとおりにMinGW/MSYS2をインストールします。

  2. 次のコマンドを使用してlibcurlをインストールします。

    shell
  3. MinGW/MSYS2をデフォルトの場所にインストールした場合は、 C:\msys64\mingw64\bin\PATH環境変数に追加します。

'NoTransformationFoundException'を解決するには?

NoTransformationFoundExceptionは、結果タイプからクライアントが期待するタイプへの受信したボディに対する適切な変換を見つけられないことを表します。

  1. リクエストのAcceptヘッダーが目的のコンテンツタイプを指定していること、およびサーバーのレスポンスのContent-Typeヘッダーがクライアント側の期待するタイプと一致していることを確認してください。

  2. 作業している特定のコンテンツタイプに必要なコンテンツ変換を登録します。

    クライアント側ではContentNegotiationプラグインを使用できます。 このプラグインを使用すると、さまざまなコンテンツタイプに対してデータをシリアライズおよびデシリアライズする方法を指定できます。

    kotlin
  3. 必要なすべてのプラグインをインストールしていることを確認してください。不足している可能性のある機能:

    1. クライアントWebSocketsおよび サーバーWebSockets
    2. クライアントContentNegotiationおよび サーバーContentNegotiation
    3. Compression