全部產品
Search
文件中心

HTTPDNS:最佳實務建議

更新時間:Nov 15, 2025

HTTPDNS 提供了通過 HTTP API 實現網域名稱解析的能力。針對無法直接整合官方 SDK 的情境,開發人員可以自訂接入方式。本指南圍繞可用性、效能、解析品質和安全性等關鍵方面,提供專業化建議,協助開發人員最佳化 HTTP API 的使用效果。

1. 可用性最佳化

情境:HTTPDNS 部分服務節點不可用

背景

在某些極端情況下,如自然災害、電訊廠商封鎖或網路故障,HTTPDNS單個服務入口可能出現停用風險,導致對網域名稱解析產生影響。

解決方案

  1. 啟動 IP 冗餘機制

    • 應用內嵌入多個啟動 IP 或網域名稱,確保始終與HTTPDNS服務保持連通性。

    • 請求失敗時,自動切換使用下一個啟動 IP。

  2. 服務 IP 動態更新

    通過向啟動 IP 發起請求來擷取服務 IP,更新服務IP的流程如下圖所示:

有關調度介面的詳細資料,請參閱調度服務介面

說明

建議在下列描述的情境中更新並儲存服務IP列表:

  • 建議在App冷啟動時進行更新。

  • 建議在切換網路環境時進行更新。

  • 建議每8小時至少更新一次。

  • 當服務IP列表經過重試發現都無法解析時,立即更新。

  1. 容錯移轉策略

    使用解析服務時,採用IP輪轉機制,某個IP訪問不通時輪轉到下一個進行重試,避免某個服務IP無法使用時受到影響。在向服務端發起解析請求時,會從全域服務IP列表中擷取一個可用的服務IP,只要當前IP可以解析,那麼整個SDK生命週期都會使用這個IP解析,如果當前服務IP解析失敗,則會切換全域服務IP列表中的下個IP重試一次。如果仍然失敗則返回空,並且再次切換服務IP。

重要
  • 遊標是全域的,並且建議將遊標持久化儲存在本地。

  • 服務IP列表只有出現解析失敗的情況才會動態更新,通常是保持全域不變的。

  • 服務IP列表最好是動態可配置,這樣可以減少覆蓋生效的時間,縮小影響。

若所有 HTTPDNS 服務 IP 均請求失敗,降級使用 Local DNS(即作業系統原生DNS鏈路)。如果是Android端使用了 OkHttp 網路程式庫進行接入,降級使用 Local DNS 解析的方法如下:

List<InetAddress> result = okhttp3.Dns.SYSTEM.lookup(host);
val result: List<InetAddress> = Dns.SYSTEM.lookup(host)

如果是iOS端,只要不進行Host替換或者請求攔截即可,保持原有請求如下:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
// 發送請求
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    if (error) {
        NSLog(@"error: %@", error);
    } else {
        NSLog(@"response: %@", response);
    }
}];
[task resume];
var request = URLRequest(url: url)
// 發送請求
let session = URLSession.shared
let task = session.dataTask(with: request) { (data, response, error) in
    if let error = error {
        print("error: \(error)")
    } else {
        print("response: \(response?.description ?? "")")
    }
}
task.resume()
  1. 避免阻塞解析

    訪問HTTPDNS服務時請做非同步化處理,避免業務主流程同步等待網路解析過程。

2. 效能最佳化

情境:頻繁查詢導致效能瓶頸

背景

如果每次網路請求需要網域名稱解析時,都向 HTTPDNS 服務發起請求,會顯著增加業務耗時和頻寬消耗。考慮到網域名稱解析結果是有 TTL 緩衝時間的,您可以基於這個值進行緩衝。

解決方案

  1. 本機快取

    • 根據DNS標準RFC104,可以按照TTL時間對解析結果進行緩衝。

說明
  • TTL的值為HTTP API響應報文中的ttl欄位。

  • 當緩衝未命中或者已經到期時,則需要發起解析請求,並更新緩衝。

  1. 預解析

說明

在緩衝即將到期時(如 TTL 的 80%)提前解析相關網域名稱並緩衝到本地。在應用啟動時,預解析常用網域名稱並緩衝結果。預解析能降低業務訪問的延遲,但會增加一定的解析請求,建議只對熱點網域名稱使用該功能。

  1. 串連複用

    開啟HTTP用戶端的串連複用特性可以降低TCP串連建立的耗時,進而降低HTTPDNS的解析延遲。

  2. 持久化緩衝

    可以把上一次解析到的結果進行持久化緩衝,在 App 重啟後,可以優先從持久層載入解析結果,這樣可以提升首次載入速度。

說明
  • 存在第一次使用的IP為到期IP(TTL到期,大多數情況下該IP依然可以正常使用)的可能性。

  • 持久化緩衝會影響“初次開機/網路切換”後網域名稱解析結果,後續解析仍會請求HTTPDNS伺服器,並更新本機快取。

3. 解析品質最佳化

情境:跨電訊廠商解析導致訪問延遲

背景

在使用CDN網域名稱,或網域名稱配置了智能線路解析等情境,如果用戶端根據 TTL 緩衝了網域名稱解析結果IP ,當網路環境發生變化(如4G切換到WIFI,或者WIFI切換到4G),新的網路環境和緩衝的 IP 線路不匹配時,則可能導致業務網路請求效能問題。

解決方案

  1. 網路環境監聽

    • 監測用戶端網路變化(如從 Wi-Fi 切換到移動資料)。

    • 主動重新整理本機快取,確保解析結果適配當前網路環境。

重要

重新整理所有網域名稱的解析結果會產生一定流量消耗。

  1. 測速排序

    使用 ICMP 或 TCP 非同步測試對解析結果排序,優先選擇響應最快的 IP。

重要

此方法會影響原有商務服務器的負載平衡策略。

4. 安全性最佳化

情境:解析請求被劫持或泄露

背景

未使用鑒權機制的解析介面存在安全隱患,可能被第三方盜刷流量產生費用。

解決方案

  1. 鑒權解析

    解析介面建議使用鑒權解析,您可以在控制台設定開啟/關閉非鑒權解析請求。

    • 需要使用鑒權解析的secretKey進行鑒權產生加密串,然後將產生的加密串攜帶在請求中,而secretKey無需在請求中攜帶,所以secretKey不會暴露,安全層級較高,確保解析請求中不暴露敏感資訊。

    • 實現方式參考:實現鑒權訪問

  2. HTTPS 安全通訊

5. 問題排查建議

為了更高效地定位問題,您可以在 App 啟動時,產生一個用於標識單個App生命週期的會話ID,在向HTTPDNS 發起請求時,附帶該會話ID,則發生問題後,HTTPDNS 支援人員可以根據您提供的會話ID進行問題排查。會話ID格式定義為:[a-zA-Z0-9]{12} 。

例如:http://203.107.xxx.xxx/{accountId}/sign_d?host=www.aliyun.com&t=1573XXXX&s=60c7XXXXXX&sid=1234567890ab

6. 總結

通過遵循上述最佳化方案,開發人員可以通過 API 在複雜網路環境中實現高可用、低延遲和安全的 HTTPDNS 接入,同時有效解決潛在問題,提升整體解析品質。