全部產品
Search
文件中心

HTTPDNS:服務IP調度介面

更新時間:Jul 13, 2024

針對無法使用SDK的情境,介紹如何使用服務IP調度介面。

介面能力和應用情境

重要

HTTPDNS官方SDK中已整合本介面,此文檔主要針對無法使用SDK的情境。

本介面根據源IP,返回最優和最新的服務調度資訊,並同時提供更多的容災能力。包括以下能力:

  1. 擷取服務IP列表,允許用戶端動態擷取服務節點IP。

  2. 列出當前所有已啟用的網域名稱列表,允許用戶端避免無效解析請求。

  3. 當某服務節點異常後,允許動態擷取最新的服務存取點列表。

術語介紹

調度服務:即本服務調度介面,根據來源IP,返回服務IP及其他服務調度資訊。

解析服務:即HTTPDNS解析服務介面,請參見解析服務介面文檔。

啟動IP:用於初次開機或災難情境下調用服務調度介面,此IP不提供解析服務。

服務IP:常規情境下用於調用調度服務和解析服務的IP地址。

接入方式

服務IP調度介面-new

  1. 提交工單申請啟動IP列表。

    說明

    啟動IP應寫死在App中,為保證服務可用性,我們會提供多個啟動IP供您接入。

  2. 使用啟動IP調用調度服務擷取服務IP列表。

    說明

    • 調度服務支援HTTP(S)方式訪問,請參考下文中驗證伺服器身份章節來驗證伺服器身份。

    • 啟動IP僅可用於調用調度服務,不提供解析服務。

  3. 使用服務IP調用解析服務。

  4. 必須周期性的使用服務IP調用調度服務來更新服務IP列表,保持服務IP列表的有效性。

    說明

    服務IP同時提供調度服務和解析服務。

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

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

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

  5. 當所有服務IP不可用時,降級使用啟動IP來調用調度服務,擷取可用的服務IP列表。

  6. 當所有啟動IP不可用時,請採用指數退避的方式來進行重試。

    重要

    解析服務返回的服務IP列表,不保證長期有效,可能隨時會發生改變,

介面訪問方式

URLhttps://{啟動IP_或_服務IP}/{account_id}/ss

重要

{account_id}是您HTTPDNS服務的專屬ID,您可以在HTTPDNS控制台上擷取。

請求方式:GET

選擇性參數說明一

說明

選擇性參數用於支援調度異常的排查,詳情請參考如何使用“會話追蹤方案”排查解析異常

名稱

是否必須

描述

sid

可選

sessionId,[a-zA-Z0-9]{12},在app啟動時產生,用於標記一次獨立的app生命週期。

net

可選

5g|4g|3g|2g|wifi|unknown,用於標記請求發起時刻os層提供的網路情況。

bssid

可選

WiFi環境的bssid,用於標記不同的WiFi網路。

選擇性參數說明二

說明

選擇性參數用于海外節點選擇。

名稱

是否必須

描述

n

可選

待加簽的隨機數,要求是16進位數,字元長度最小為8,最長為16,例如:abcdef2345。

t

可選

1970年1月1日以來的秒數(整形正數,固定長度10)。

重要

用戶端和伺服器時間位移需小於150秒,您可以根據回應標頭中的Date進行校準。

s

可選

用secret(在HTTPDNS控制台查看)產生的簽名, 計算方式:s=md5sum(n-secret-t), 如:n=abcdef2345,secret=123456,t=1632912372, 則對字串 "abcdef2345-123456-1632912372"對應的ASCII碼進行加簽,結果為: de7be63a9f19cf11e9d455d7d4f23cb4。

region

可選

海外服務地區選取項目,當前僅支援hk(中國香港節點)和sg(新加坡節點),填寫後返回當地的服務節點;預設時,使用中國大陸服務節點。

驗證伺服器身份:

  • 當您使用HTTPS請求調度服務時,我們會提供主機名稱為203.107.1.1的有效認證(無論使用哪個IP請求),請據此驗證伺服器身份;這需要您手動忽略認證錯誤中的主機名稱錯誤,並手動驗證認證所持主機名稱為203.107.1.1。

  • 當您使用HTTP請求調度服務時,由於缺少TLS的安全機制,我們會基於以下參數對響應內容做簽名,並將簽名值放置在回應標頭的X-Checksum-HmacMD欄位中。

調用樣本

  • 假設secretKey為:IAmASecret,隨機數n為:2EUenAaShVfy,目前時間戳1568802250, 響應內容為:{"service_ip":["47.74.222.190"],"service_ipv6":["240b:4000:f10::178"]}

  • 請求url:http://{啟動IP_或_服務IP}/{account_id}/ss?n=2EUenAaShVfy&t=1568802250

  • sign = hmacMD5("IAmASecret", "2EUenAaShVfy-{"service_ip":["47.74.222.190"],"service_ipv6":["240b:4000:f10::178"]}-1568802250") = 3C74A498A00EEE6C5E7C599B3B882658

  • 則回應標頭中應包含:X-Checksum-HmacMD5:3C74A498A00EEE6C5E7C599B3B882658

說明

secretKey可在“HTTPDNS控制台>鑒權配置>鑒權secretkey”查看。

返回樣本

請求成功時,HTTP響應的狀態代碼為200,響應結果用JSON格式表示,樣本如下:

{
  "service_ip": [
    "47.74.222.190"
  ],
  "service_ipv6": [
    "240b:4000:f10::178"
  ]
}

欄位

說明

service_ip

IPv4服務IP列表,請通過此IP列表接入IPv4鏈路服務。

service_ipv6

IPv6服務IP列表,請通過此IP列表接入IPv6鏈路服務。

請求失敗時,HTTP響應的狀態代碼為4xx/5xx,同時也返回具體的錯誤碼,響應結果用JSON格式表示,樣本如下:

{
  "code": "MissingArgument"
}

狀態代碼說明

錯誤碼

HTTP狀態代碼

描述

MissingArgument

400

缺少必要參數

TimeOutOfSync

400

時間偏差過大,請根據回應標頭中的Date進行校準

InvalidNonce

400

隨機數不合要求

InvalidTimestamp

403

時間戳記格式不正確

AccountNotExists

403

賬戶不存在或被禁用,或尚未在HTTPDNS控制台添加過網域名稱

InternalError

500

服務端內部錯誤