このトピックでは、ドメイン名解決用の API について説明します。
事前解決の実行
アプリの起動と SDK の初期化後、すぐにこの操作を呼び出して、後で使用する可能性のある頻繁にアクセスするドメイン名を指定できます。 これにより、SDK はこれらのドメイン名を事前に解決できるため、後続のドメイン名解決リクエストのレイテンシが短縮されます。
実行時にこの操作を呼び出すと、SDK は指定されたリスト内のドメイン名をすぐに解決し、キャッシュ内の解決結果を更新します。 これは強制的に更新するのと同じです。 この操作は通常、特定のビジネスアクションが発生した後に、現在のドメイン名解決を更新してドメイン名の再スケジュールを強制する場合に使用されます。
操作定義
- (void)setPreResolveHosts:(NSArray *)hosts; // 事前解決するドメイン名を設定
クラス
HttpDnsService
パラメーターの説明
パラメーター | タイプ | 必須かどうか | 備考 |
hosts | NSArray * | はい | 事前解決するドメイン名。 重要
|
同期ノンブロッキングドメイン名解決 操作
同期ノンブロッキング API は、現在のスレッドをブロックせずにドメイン名を解決しますが、空の結果を返す場合があります。
この操作はキャッシュのクエリのみを行い、キャッシュからの解決結果を返します。 キャッシュに解決結果が存在しない場合、またはキャッシュされた解決結果の Time To Live(TTL)が期限切れになっている場合、ドメイン名解決はワーカースレッドで実行されます。 解決が成功すると、後続のドメイン名解決で使用するためにキャッシュが更新されます。
操作定義
- (nullable HttpdnsResult *)resolveHostSyncNonBlocking:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType; // 同期ノンブロッキングでホストを解決
- (nullable HttpdnsResult *)resolveHostSyncNonBlocking:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType withSdnsParams:(NSDictionary<NSString *, NSString *> *)sdnsParams sdnsCacheKey:(NSString *)cacheKey; // SDNS パラメータとキャッシュキーを指定して同期ノンブロッキングでホストを解決
- (nullable HttpdnsResult *)resolveHostSyncNonBlocking:(HttpdnsRequest *)request; // リクエストオブジェクトを使用して同期ノンブロッキングでホストを解決
この API はバージョン v3.0.0 で導入されました。
クラス
HttpDnsService
パラメーター定義
パラメーター | タイプ | 必須かどうか | 備考 |
host | NSString * | はい | 解決するドメイン名 |
queryIpType | HttpdnsQueryIPType | はい | ドメイン名を解決する IP アドレスのタイプ。 有効な値:
|
sdnsParams | NSDictionary<NSString *, NSString *> * | いいえ | ソフトウェア定義の解決用のカスタムパラメーター。 |
cacheKey | NSString * | いいえ | ソフトウェア定義の解決用のカスタムキャッシュキー。 |
request | HttpdnsRequest * | はい | 以下の解像度に関連するデータ構造をご覧ください。 |
戻り値の説明
タイプ | 説明 |
HttpdnsResult * | 解決結果。後述の解決に関連するデータ構造をご覧ください。 |
同期ドメイン名解決操作
同期ドメイン名解決 API は、有効な結果を取得して返すまで、現在のスレッドをブロックします。
この API は最初にキャッシュをクエリします。 有効な結果が存在する場合は、すぐに返されます。 存在しない場合は、現在のスレッドがブロックされ、ワーカースレッドでドメイン名解決が実行されます。 結果は、完了時またはタイムアウト期間に達したときに返されます。
このインターフェイスはバージョン v3.0.0 で導入されました。
メインスレッドでのこの操作の誤用によって引き起こされるアプリのスタッターを防ぐために、この操作は検出を実行します。 呼び出しスレッドがメインスレッドであることが検出された場合、
resolveHostSyncNonBlocking操作の実装ロジックに自動的にスペックダウンします。デフォルトのタイムアウトは 2 秒です。 この期間内に有効な結果が取得されない場合は、nil が返されます。 タイムアウトはリクエストオブジェクトを介して調整できます。
インターフェイス定義
- (nullable HttpdnsResult *)resolveHostSync:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType; // 同期的にホストを解決
- (nullable HttpdnsResult *)resolveHostSync:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType withSdnsParams:(NSDictionary<NSString *, NSString *> *)sdnsParams sdnsCacheKey:(NSString *)cacheKey; // SDNS パラメータとキャッシュキーを指定して同期的にホストを解決
- (nullable HttpdnsResult *)resolveHostSync:(HttpdnsRequest *)request; // リクエストオブジェクトを使用して同期的にホストを解決
クラス
HttpDnsService
パラメーター定義
パラメーター | タイプ | 必須かどうか | 備考 |
host | NSString * | はい | 解決するドメイン名 |
queryIpType | HttpdnsQueryIPType | はい | ドメイン名を解決する IP アドレスのタイプ。 有効な値:
|
sdnsParams | NSDictionary<NSString *, NSString *> * | いいえ | ソフトウェアのカスタム解析パラメーター |
cacheKey | NSString * | いいえ | ソフトウェア定義のカスタムキャッシュキー |
request | HttpdnsRequest * | はい | 以下の解析用データ構造を参照してください |
戻り値の説明
タイプ | 説明 |
HttpdnsResult * | 解決結果。詳細については、「解決に関連するデータ構造」をご参照ください。 |
非同期ドメイン名解決操作
非同期解決インターフェイスは、現在のスレッドをブロックせずにドメイン名を解決し、コールバックを介して結果を返します。
この操作は最初にキャッシュをクエリします。 キャッシュに有効な解決結果が存在する場合、キャッシュされた解決結果はコールバックを通じてすぐに返されます。 有効な解決結果が見つからない場合、操作はワーカースレッドでドメイン名解決を実行します。 ドメイン解決が完了するか、タイムアウトに達すると、解決結果はコールバックを通じて返されます。
操作定義
- (void)resolveHostAsync:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType completionHandler:(void (^)(HttpdnsResult * nullable))handler; // 非同期的にホストを解決
- (void)resolveHostAsync:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType withSdnsParams:(NSDictionary<NSString *, NSString *> *)sdnsParams sdnsCacheKey:(NSString *)cacheKey completionHandler:(void (^)(HttpdnsResult * nullable))handler; // SDNS パラメータとキャッシュキーを指定して非同期的にホストを解決
- (void)resolveHostAsync:(HttpdnsRequest *)request completionHandler:(void (^)(HttpdnsResult * nullable))handler; // リクエストオブジェクトを使用して非同期的にホストを解決
このインターフェイスはバージョン v3.0.0 で導入されました。
デフォルトのタイムアウトは 2 秒です。 この期間内に有効な結果が得られない場合は、nil を含むコールバックが行われます。 タイムアウトは、リクエストオブジェクトを通じてカスタマイズできます。
クラス
HttpDnsService
パラメーター定義
パラメーター | タイプ | 必須かどうか | 備考 |
host | NSString * | はい | 解決するドメイン名 |
queryIpType | HttpdnsQueryIPType | はい | ドメイン名を解決する IP アドレスのタイプ。 有効な値:
|
handler | (void (^)(HttpdnsResult * nullable)) | はい | 解決結果コールバック |
sdnsParams | NSDictionary<NSString *, NSString *> * | いいえ | ソフトウェア定義の解決パラメーター |
cacheKey | NSString * | いいえ | ソフトウェア定義のカスタムキャッシュキー |
request | HttpdnsRequest * | はい | 次の解像度関連のデータ構造を参照してください |
コールバック結果の説明
タイプ | 説明 |
HttpdnsResult * | 解決結果。次の解決関連データ構造を参照してください。 |
ドメイン名キャッシュのクリア
HTTPDNS を使用する場合、この操作を呼び出して、ドメイン名のキャッシュされた DNS レコードをクリアできます。 これにより、解決結果を数秒以内に更新できます。 たとえば、ドメイン名 xxx.com が IP アドレス ip1 に解決され、ip1 で攻撃が発生した場合、次の手順を実行してトラフィックを ip1 から ip2 に移行できます。
まず、Cloud DNS コンソールでドメイン名の IP アドレスを ip2 に変更します。
次に、HTTPDNS コンソールに移動し、このドメイン名の更新アクションを手動で送信して、サーバー側で更新をトリガーします。
この操作を手動で呼び出して、xxx.com ドメイン名のローカルキャッシュをクリアします。
アプリからキャッシュがクリアされた後にリクエストが開始されると、サーバーは権威サーバーにリクエストを再送信して、最新の DNS レコードで ip2 を取得します。 これにより、ip2 は解決のための実際の IP アドレスとしてすぐに使用されます。
この操作を呼び出して、特定のドメイン名リストのキャッシュ、またはすべてのドメイン名のキャッシュをクリアできます。
この操作は、HTTPDNS SDK V2.0.4 以降でのみサポートされています。 新たに追加された
cleanAllHostCache操作は、V3.1.0 以降でサポートされています。消去操作では、メモリキャッシュとローカルの永続サンドボックスキャッシュの両方がクリアされます。
操作の定義
- (void)cleanHostCache:(NSArray <NSString *>*)hostArray; // 指定されたホストのキャッシュをクリア
- (void)cleanAllHostCache; // すべてのホストキャッシュをクリア
パラメーターの説明
パラメーター | タイプ | 必須かどうか | 備考 |
hostArray | NSArray <NSString *> * | はい | ローカルキャッシュから DNS レコードをクリアするドメイン名で構成される配列。 すべてのデータをクリアする場合は、このパラメーターを nil または空の配列に設定します |
解決に関連するデータ構造
HTTPDNS iOS SDK によって提供されるドメイン名解決操作には、主に 2 つのカスタム構造、HttpdnsRequest と HttpdnsResult が関係します。
HttpdnsRequest
ドメイン名解決のリクエストパラメーターをカプセル化するクラス。
パラメーター | タイプ | 必須かどうか | 備考 |
host | NSString * | はい | 解決されるドメイン名。 |
queryIpType | HttpdnsQueryIPType | はい | ドメイン名を解決する IP アドレスのタイプ。 有効な値:
|
resolveTimeoutInSecond | double | いいえ | 解決タイムアウト期間。 同期インターフェイスの場合、これは最大待機時間です。 非同期インターフェイスの場合、これは最大待機コールバック時間です。 デフォルトは 2 秒で、構成可能な範囲は 0.5 秒から 5 秒です。 単位: 秒 |
sdnsParams | NSDictionary<NSString *, NSString *> * | いいえ | カスタムソフトウェア解決パラメーター |
cacheKey | NSString * | いいえ | カスタムソフトウェア解決キャッシュキー |
HttpdnsResult
ドメイン名解決が成功した後に返される結果をカプセル化するクラス。 次のシナリオでは、解決インターフェイスの結果が空になる可能性があることに注意してください。
再帰解決で IP レコードを取得できない場合など、ドメイン名を解決できません。
ドメイン名が HTTPDNS コンソールに登録されていないため、解決に失敗します。
ネットワークの異常により、解決に失敗します。
同期ノンブロッキングインターフェイスは、ローカルにキャッシュレコードが見つからない場合、最初に空の値を返す可能性があります。
パラメーター | タイプ | 説明 |
host | NSString * | 解決されるドメイン名 |
ips | NSArray<NSString *> * | 解決された IPv4 アドレスのリスト |
ipv6s | NSArray<NSString *> * | 解決された IPv6 アドレスのリスト |
lastUpdatedTimeInterval | NSTimeInterval | IPv4 アドレスが最後に更新された時刻。 UNIX タイムスタンプ。 単位: 秒 |
ttl | NSTimeInterval | IPv4 アドレスの TTL 。 単位: 秒 |