針對無法使用SDK的情境,介紹如何使用服務IP調度介面。
介面能力和應用情境
HTTPDNS官方SDK中已整合本介面,此文檔主要針對無法使用SDK的情境。
本介面根據源IP,返回最優和最新的服務調度資訊,並同時提供更多的容災能力。包括以下能力:
擷取服務IP列表,允許用戶端動態擷取服務節點IP。
列出當前所有已啟用的網域名稱列表,允許用戶端避免無效解析請求。
當某服務節點異常後,允許動態擷取最新的服務存取點列表。
術語介紹
調度服務:即本服務調度介面,根據來源IP,返回服務IP及其他服務調度資訊。
解析服務:即HTTPDNS解析服務介面,請參見解析服務介面文檔。
啟動IP:用於初次開機或災難情境下調用服務調度介面,此IP不提供解析服務。
服務IP:常規情境下用於調用調度服務和解析服務的IP地址。
接入方式
提交工單申請啟動IP列表。
說明啟動IP應寫死在App中,為保證服務可用性,我們會提供多個啟動IP供您接入。
使用啟動IP調用調度服務擷取服務IP列表。
說明調度服務支援HTTP(S)方式訪問,請參考下文中驗證伺服器身份章節來驗證伺服器身份。
啟動IP僅可用於調用調度服務,不提供解析服務。
使用服務IP調用解析服務。
必須周期性的使用服務IP調用調度服務來更新服務IP列表,保持服務IP列表的有效性。
說明服務IP同時提供調度服務和解析服務。
建議App冷啟動時進行更新
建議切換網路環境時進行更新
建議每8小時至少更新一次
當所有服務IP不可用時,降級使用啟動IP來調用調度服務,擷取可用的服務IP列表。
當所有啟動IP不可用時,請採用指數退避的方式來進行重試。
重要解析服務返回的服務IP列表,不保證長期有效,可能隨時會發生改變,
介面訪問方式
URL:https://{啟動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 | 服務端內部錯誤 |