このトピックでは、iOS 用 HTTPDNS SDK の基本的な構成操作について説明します。
初期化
この操作を使用して、グローバル HTTPDNS サービスインスタンスを作成できます。このインスタンスはシングルトン設計パターンを使用します。インスタンスが初期化されると、アプリのライフサイクル全体にわたって存在します。インスタンスを繰り返し作成する必要はありません。インスタンスが初めて作成された後、アプリのライフサイクル中に使用する必要がある場合は、[HttpDnsService sharedInstance] 操作を直接呼び出してサービスインスタンスを取得できます。
この操作には、暗号化を必要としないシナリオと暗号化を必要とするシナリオで使用される 2 つのバージョンがあります。暗号化を有効にすると、SDK がサーバーにリクエストを送信するときに、SDK は高度暗号化標準(AES)アルゴリズムを使用してリクエストパラメータと応答結果を暗号化します。暗号化はより高いセキュリティを提供しますが、課金ロジックが異なります。課金について詳しくは、「製品の課金」をご参照ください。
applicationDidFinishLaunchingHTTPDNS 解決操作を使用する前に、この操作を呼び出して初期化を完了してください。そうしないと、解決は失敗します。 で初期化を完了することをお勧めします。
操作定義
- (nonnull instancetype)initWithAccountID:(NSInteger)accountID secretKey:(NSString * _Nonnull)secretKey;
- (nonnull instancetype)initWithAccountID:(NSInteger)accountID secretKey:(NSString * _Nonnull)secretKey aesSecretKey:(NSString * _Nullable)aesSecretKey;
クラス
HttpDnsService
パラメーターの説明
パラメーター | タイプ | 必須 | 説明 |
accountId | int | はい | システムによって割り当てられたアカウント ID です。HTTPDNS を有効にすると、コンソールで Alibaba Cloud アカウントのアカウント ID を取得できます。 |
secretKey | NSString | はい | 認証用の secretKey で、Alibaba Cloud HTTPDNS コンソールでも取得できます。 |
aesSecretKey | NSString | いいえ | 暗号化用の AES 秘密鍵。 HTTPDNS コンソールで AES 秘密鍵を取得できます。このパラメータを設定すると、SDK は暗号化機能を有効にします。 |
サービスインスタンスの取得
グローバル HTTPDNS サービスインスタンスを確立した後、この API を使用すると、必要に応じて HTTPDNS を構成したり、HTTPDNS 経由でドメイン名を解決したりするためのグローバルシングルトンを取得できます。
操作定義
+ (instancetype)sharedInstance;
クラス
HttpDnsService
HTTPS リクエストの使用
この操作を使用して、SDK が解決リクエストをサーバーに送信するときに HTTPS を使用するかどうかを指定できます。この操作を呼び出さない場合、デフォルトで HTTP が使用されます。
HTTPS リクエストはより高いセキュリティを提供しますが、HTTP と HTTPS の課金の相違点に注意する必要があります。課金について詳しくは、「製品の課金」をご参照ください。
HTTP リクエストは、基盤となる CFNetwork フレームワークを介して処理され、ATS の制限の影響を受けません。
HTTPS リクエストを使用する場合でも暗号化が必要かどうか:2 つの機能は異なるレイヤーで動作します。 HTTPS プロトコルはトランスポート層のセキュリティを確保しますが、パラメータと応答の詳細はパケットキャプチャで引き続き表示できます。 AES 暗号化は、HTTPDNS ビジネスレイヤーのセキュリティを確保します。パケットがキャプチャされても、プレーンテキストのコンテンツを表示することはできません。したがって、要件に基づいて両方の機能を有効にするかどうかを決定できます。
操作定義
- (void)setHTTPSRequestEnabled:(BOOL)enable;
クラス
HttpDnsService
パラメーターの説明
パラメーター | タイプ | 必須 | 説明 |
enable | BOOL | はい | 有効な値: YES:HTTPS を使用します NO:HTTP を使用します |
期限切れの IP アドレスを許可する
iOS 用 HTTPDNS SDK は DNS プロトコルに従い、アプリがネットワークリクエストを開始したときに IP アドレスを取得する効率を向上させるために、有効期間(TTL)に基づいてドメイン名解決の結果をキャッシュします。キャッシュの期限が切れると、アプリが解決操作を呼び出して IP アドレスを取得した場合、さまざまな状況が発生する可能性があります。
アプリが同期非ブロッキング操作を呼び出すと、キャッシュの期限は切れていますが、SDK はサーバーから新しい解決結果をすぐに取得できません。スレッドのブロッキングを回避するために、操作は空の結果を返します。呼び出し側は、ローカル DNS 解決へのフォールバックを処理する必要があります。
アプリが同期操作または非同期操作を呼び出すと、SDK は解決リクエストを開始して、サーバーから新しい解決結果を取得します。このプロセスには時間がかかります。同期操作は、新しい解決結果が取得されるまでスレッドをブロックします。非同期操作は、新しい解決結果が取得された後にのみ
completionHandlerをコールバックします。
SDK は、期限切れの IP アドレスの再利用を許可する設定オプションを提供します。このオプションを YES に設定すると、上記の 2 つの状況で、キャッシュされた IP アドレスの期限が切れていても、操作は期限切れの IP アドレスをすぐに返して DNS フェーズの処理時間を短縮し、ネットワークリクエストのパフォーマンスを向上させることができます。同時に、SDK は IP アドレスの期限が切れていることを検出して IP アドレスを返した後、すぐに非同期スレッドを開始してドメイン名を解決し、新しい解決結果を取得します。
したがって、このオプションを有効にしても副作用は最小限であり、特に解決されるドメイン名の解決構成が頻繁に変更されない場合(プライマリサイトのドメイン名や静的ゲートウェイのドメイン名など)は、その傾向が顕著です。ドメイン名解決が変更された場合、このオプションを有効にすると、ドメイン名キャッシュの期限が切れた後の最初のリクエストにのみ影響します。これは、SDK が呼び出されて IP アドレスの期限が切れていることが検出されると、SDK がすぐにドメイン名の解決更新を開始するためです。
デフォルトでは、期限切れの IP アドレスは返されません。
ビジネスサーバーの IP アドレスが頻繁に変更される場合は、ビジネスへの影響を避けるために、この機能を有効にする際には注意が必要です。
バージョン 2.x.x 以前では、この操作は
- (void)setExpiredIPEnabled:(BOOL)enableとして定義されています。
操作定義
- (void)setReuseExpiredIPEnabled:(BOOL)enable;
クラス
HttpDnsService
パラメーターの説明
パラメーター | タイプ | 必須 | 説明 |
enable | BOOL | はい | 解決操作で TTL の期限が切れたキャッシュされた解決結果を返すかどうかを指定します。 YES:期限切れの IP アドレスの返却を許可します NO:期限切れの IP アドレスの返却を許可しません |
永続キャッシュを有効にする
永続キャッシュ機能は、起動後のドメイン名解決に費やされる時間を最適化し、最初の画面の読み込み速度を向上させるように設計されています。
この機能を有効にすると、HTTPDNS は以前に解決された結果をローカルの永続レイヤーに保存します。アプリの再起動時、各ドメイン名の最初の解決では、永続レイヤーからキャッシュされた結果を取得して、最速の解決効率を実現します。ただし、これにより、期限切れの IP が最初に使用される可能性があります。つまり、キャッシュされた結果の TTL が期限切れになっています。ほとんどの場合、特に DNS レコードが比較的安定しているドメイン名では、IP を引き続き使用できます。
起動後にアプリが期限切れになってから長時間経過したキャッシュされた結果を再利用することを避けるため(たとえば、アプリが最後に起動されたのが 1 か月前)、この操作ではバージョン 3.1.2 以降 discardRecordsHasExpiredFor:(NSTimeInterval)duration パラメータが提供されています。このパラメータは、アプリが起動後にキャッシュを永続レイヤーからメモリにロードするときに、duration より長く期限切れになった解決結果を破棄するかどうかを決定します。このパラメータは 1 日に設定することをお勧めします。
このスイッチはデフォルトではオフになっています。
ビジネスサーバーの IP アドレスが頻繁に変更される場合は、ビジネスへの影響を避けるために、この機能を有効にする際には注意が必要です。
-
永続キャッシュは、主に最初のドメイン名解決に影響します。後続のすべての解決は、HTTPDNS サーバーを介して処理され、ローカルキャッシュが更新されます。
永続キャッシュ機能が有効になると、DNS レコードがローカルキャッシュに更新されます。アプリが再起動されると、ローカルキャッシュがメモリにロードされます。
バージョン 2.x.x 以前では、この操作は
- (void)setCachedIPEnabled:(BOOL)enable;として定義されています。
操作定義
- (void)setPersistentCacheIPEnabled:(BOOL)enable;
- (void)setPersistentCacheIPEnabled:(BOOL)enable discardRecordsHasExpiredFor:(NSTimeInterval)duration; // (バージョン 3.1.2 以降で使用可能)
クラス
HttpDnsService
パラメーターの説明
パラメーター | タイプ | 必須 | 説明 |
enable | BOOL | はい | 有効な値: YES:永続キャッシュ機能を有効にします NO:永続キャッシュ機能を無効にします |
duration | NSTimeInterval | いいえ | このパラメータは、永続キャッシュ機能が有効になっている場合にのみ有効です。この場合、SDK は起動後にレコードをローカルの永続キャッシュからメモリキャッシュにロードするときに、有効期限がこの 単位は秒です。デフォルト値は 0 秒で、期限切れのレコードはデフォルトで破棄されることを意味します。 |
ネットワーク変更後の自動解決を有効にする
デバイスネットワークが変更された場合(Wi-Fi ネットワークからセルラーネットワークへの切り替え、または China Mobile ネットワークから China Unicom ネットワークへの切り替えなど)、HTTPDNS SDK が以前にキャッシュされた解決 IP アドレスを返し続けると、クロスネットワークリクエストが発生し、リクエストのパフォーマンスと成功率に影響を与える可能性があります。したがって、SDK は内部でネットワーク変更イベントをリッスンし、グローバル解決キャッシュをクリアするかどうかをインテリジェントに判断します。
この操作は、ネットワーク環境が変更されたときに SDK がグローバル解決キャッシュをクリアした後、すべてのドメイン名の解決結果を自動的に更新するかどうかを指定するために使用されます。この機能を有効にすると、SDK はネットワークの切り替え後にビジネスネットワークリクエストがすぐに新しい結果を取得できるようにし、ドメイン名解決に費やされる時間を短縮し、リクエストのパフォーマンスを向上させます。
この機能を有効にすると、解決の数がわずかに増加する可能性があります。このスイッチはデフォルトではオフになっています。
操作定義
- (void)setPreResolveAfterNetworkChanged:(BOOL)enable;
クラス
HttpDnsService
パラメータ
パラメータ | タイプ | 必須 | 説明 |
enable | BOOL | はい | 有効な値: YES:ネットワーク変更後の自動解決を有効にします NO:ネットワーク変更後の自動解決を無効にします |