全部產品
Search
文件中心

HTTPDNS:基礎配置

更新時間:Sep 03, 2025

本文介紹HarmonyOS SDK的一些基礎配置。

Context配置

由於SDK內部需要使用HarmonyOS的API進行資料存放區,需要Context參數,所以在配置時,需要設定Context參數。

範例程式碼如下:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { httpdns } from '@aliyun/httpdns';

const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'
        
export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // ************* 初始化配置 begin *************
    httpdns.configService(ACCOUNT_ID, {
      // 請務必配置harmony上下文
      context: this.context,
    });
    // ************* 初始化配置 end *************
  }
  // 省略其它代碼
}
重要

context是必選配置。如果不配置會導致HTTPDNS的服務節點無法儲存,降低HTTPDNS服務的可用性。

是否使用HTTPS請求

設定SDK內部向服務端發起解析請求時,是否使用HTTPS協議。若不調用該介面,預設使用HTTP協議。

使用HTTPS請求將會獲得更高的安全性,但也要關注HTTP和HTTPS兩種方式在計費上的不同。關於計費邏輯可參考產品計費

使用HTTPS協議的配置如下:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';

const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    httpdns.configService(ACCOUNT_ID, {
      context: this.context,
      // ************* 初始化配置是否使用HTTPS請求 begin *************
      useHttps: true,
      // ************* 初始化配置是否使用HTTPS請求 end *************
    });
  }
  // 省略其它代碼
}

是否允許使用到期IP

SDK遵循DNS協議,按照TTL緩衝網域名稱解析結果,從而提升App在發起網路請求時擷取IP的效率。當緩衝到期後,若App調用解析介面擷取IP,此時會有不同情況:

  1. 如果App調用的是同步非阻塞介面,因為緩衝已到期,但SDK又無法立即從服務端獲得新的解析結果,為了不阻塞線程,該介面將返回空結果,需要調用方做降級到LocalDNS解析的處理。

  2. 如果App調用的是非同步介面,則SDK會發起解析請求從服務端擷取新的解析,這個過程需要一定時間,則同步介面會阻塞線程直到獲得新的解析結果。

SDK提供設定選項,允許複用到期IP,設定為YES後,則上述兩種情況,雖然緩衝的IP到期了,但介面仍然可以立即返回這個到期的IP,從而減少DNS環節處理時間,提升網路請求效能。同時,SDK發現該IP到期,返回後,也會立即啟動非同步線程對這個網域名稱進行解析,從而擷取新的解析結果。

因此,開啟這個選項的副作用非常小,特別是在,所解析網域名稱本身的解析配置不會頻繁變動時(如主站網域名稱、靜態網關網域名稱等)。若網域名稱確實發生解析變更,則開啟該選項也只會影響該網域名稱緩衝到期後的第一個請求,因為SDK在被調用時發現IP到期,總是會立即發起對這個網域名稱的解析更新。

不允許使用到期IP的配置如下:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';

const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 配置HTTPDNS
    httpdns.configService(ACCOUNT_ID, {
      context: this.context,
      // ************* 初始化配置是否允許使用到期IP begin *************
      enableExpiredIp: false,
      // ************* 初始化配置是否允許使用到期IP end *************
    })
  }
  // 省略其它代碼
}

是否開啟本機快取

通過enableDiskCache配置項控制是否將解析結果儲存在本機快取中,預設為false,不開啟。

當開啟後,每次解析會把結果緩衝到本地,當下次應用啟動時,會從本地載入緩衝解析結果,提高應用啟動時擷取解析結果的速度。

當開啟本機快取後,可以通過expiredThresholdMillis配置本機快取到期時間。該參數決定App啟動後,從持久層載入緩衝到記憶體中時,丟棄已經到期超過expiredThresholdMillis時間長度的解析結果,預設為0毫秒。

開啟本機快取的配置如下:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';

const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 配置HTTPDNS
    httpdns.configService(ACCOUNT_ID, {
      context: this.context,
      // ************* 初始化配置是否開啟本機快取 begin *************
      enableDiskCache: true,
      expiredThresholdMillis: 3600000,
      // ************* 初始化配置是否開啟本機快取 end *************
    })
  }
  // 省略其它代碼
}

是否開啟網路變化自動解析

配置當網路變化時,是否自動重新解析已解析的網域名稱,預設為true,開啟。

當網路變化時,已緩衝的解析結果很有可能已經失效了,此時需要重新解析才能擷取正確的結果。

關閉網路變化自動解析的配置如下:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';

const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 配置HTTPDNS
    httpdns.configService(ACCOUNT_ID, {
      context: this.context,
      // ************* 初始化配置是否開啟網路變化自動解析 begin *************
      reResolveCachedHostsAfterNetworkChanged: false,
      // ************* 初始化配置是否開啟網路變化自動解析 end *************
    })
  }
  // 省略其它代碼
}
重要
  • WiFi、蜂窩、無網路這三個狀態之間的切換算網路變化。

  • 3G、4G、5G之間的切換不算網路變化。

逾時配置

佈建網域名解析請求時的逾時時間長度,預設為2000毫秒。

配置代碼如下:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';

const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 配置HTTPDNS
    httpdns.configService(ACCOUNT_ID, {
      context: this.context,
      // ************* 初始化配置逾時時間長度 begin *************
      timeoutInMs: 3000
      // ************* 初始化配置逾時時間長度 end *************
    })
  }
  // 省略其它代碼
}

解析參數加密配置

佈建網域名解析介面參數加密Key,開啟加密之後,SDK請求服務時,會對網域名稱、用戶端IP、自訂解析業務參數、解析類型進行加密,以密文的形式傳輸到服務端,提高資料安全性,不配置預設不加密。

配置代碼如下:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';

const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'
const AES_SECRET_KEY = '這裡需要替換為阿里雲HTTPDNS控制台的AES加密Key'

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 配置HTTPDNS
    httpdns.configService(ACCOUNT_ID, {
      context: this.context,
      // ************* 初始化配置介面加密key begin *************
      aesSecretKey: AES_SECRET_KEY,
      // ************* 初始化配置介面加密key end *************
    })
  }
  // 省略其它代碼
}