1039
英雄聯盟
API接口__SDK手冊_HTTPDNS-阿裏雲
API接口
0. 重要提示
用戶通過編碼使用HTTPDNS提供的服務時, 務必添加針對無法獲取解析結果時的降級處理代碼(參見第3節錯誤處理降級部分),否則極端異常情況下存在業務無法訪問的風險。
1. API訪問說明
HTTPDNS通過HTTP接口對外提供域名解析服務,對外服務的IP地址固定為203.107.1.1,服務的訪問方式如下。
請求方式:HTTP GET或HTTPS GET(兩種請求方式的收費價格不同,請參考計費說明)
HTTP服務URL:https://203.107.1.1/{account_id}/d
HTTPS服務URL:https://203.107.1.1/{account_id}/d
其中的{account_id}
需要替換為用戶的HTTPDNS Account ID,在HTTPDNS控製台上可以獲得這個ID。
URL參數說明:
名稱 | 是否必須 | 描述 |
---|---|---|
host | 必須 | 要解析的域名 |
ip | 可選 | 用戶的來源IP,如果沒指定這個參數,默認使用請求連接的源IP |
訪問HTTPDNS服務時,一次請求隻能解析一個域名。
請求示例:
- 示例1(默認來源IP):https://203.107.1.1/100000/d?host=www.aliyun.com
- 示例2(指定來源IP):https://203.107.1.1/100000/d?host=www.aliyun.com&ip=42.120.74.196
2. API響應說明
請求成功
請求成功時,HTTP響應的狀態碼為200,響應結果用JSON格式表示,示例如下:
{
"host": "www.aliyun.com",
"ips": [
"140.205.140.234"
],
"ttl": 57
}
返回字段說明:
名稱 | 描述 |
---|---|
host | 請求解析的域名 |
ips | 該域名的解析結果,是一個列表,可能包括0個、1個或多個IP地址 |
ttl | 該域名解析結果的TTL緩存時間 |
注意,請求成功時,返回結果中的ips
字段可能是空列表,即沒有獲得該域名的IP地址,這裏主要有兩個原因:
- 該域名沒有在HTTPDNS控製台中添加,請前往控製台添加。
- 該域名不存在對應IP,域名未注冊,或者沒有配置IP地址。
ips
字段為空的返回結果示例:
{
"host": "www.aliyun.com",
"ips": [],
"ttl": 300
}
返回結果中包含TTL緩存時間,為避免頻繁進行域名解析,用戶應該按這個TTL時間,對域名解析結果進行緩存。在TTL過期之前,直接使用緩存的IP;TTL過期後,再去請求HTTPDNS服務,獲得最新的解析結果。
請求失敗
請求失敗時,HTTP響應的狀態碼為4xx/5xx,同時也返回具體的錯誤碼,響應結果用JSON格式表示。
請求失敗的響應示例:
{
"code": "MissingArgument"
}
錯誤碼列表如下:
錯誤碼 | HTTP狀態碼 | 描述 |
---|---|---|
MissingArgument | 400 | 缺少必要參數 |
InvalidHost | 400 | 域名格式不合法 |
MethodNotAllowed | 405 | 不支持的HTTP方法 |
InternalError | 500 | 服務端內部錯誤 |
3. 錯誤處理說明
用戶業務使用HTTPDNS時,應做好異常情況下的出錯兼容邏輯,主要包括重試和降級。
重試
訪問HTTPDNS服務解析域名時,如果請求HTTPDNS服務端失敗,即HTTP請求沒有返回,可以進行重試。
大部分情況下,這種訪問失敗是由於網絡原因引起的,重試可以解決。
降級
不管是因為什麼原因,當通過HTTPDNS服務無法獲得域名對應的IP時,都必須降級:使用標準的DNS解析,通過Local DNS去解析域名。
如上所述,請求HTTPDNS但沒有返回IP時,主要是因為“域名沒有在控製台添加”或“域名本身不存在”,無論如何,如果通過HTTPDNS沒有解析出IP,為保證業務請求正常,必須“降級”使用標準的DNS,作為一種兜底的方案。
4. 快速接入
為了方便移動端用戶的接入,我們提供了基於HTTPDNS接口的接入Demo和SDK,包括Android和iOS平台。
接入Demo
該Demo基於HTTPDNS服務的API接口,是接入HTTPDNS的一個參考實現,用戶可以根據自身業務的需要做相關修改。
Demo的源碼托管在GitHub,包含在阿裏雲移動服務Demo的項目中,通過以下鏈接可獲取:
SDK
SDK封裝了HTTPDNS服務的底層API接口,提供給用戶一個可用的庫,方便用戶快速接入HTTPDNS服務。
SDK的獲取和使用,可參考:
5. 注意事項
HTTP請求頭HOST字段設置
標準的HTTP協議中服務端會將HTTP請求頭HOST字段的值作為請求的域名信息進行解析。使用HTTPDNS後,您可能需要將HTTP請求URL中的HOST字段替換為HTTPDNS解析獲得的IP,這時標準的網絡庫會將您的IP賦值給HTTP請求頭的HOST字段,進而導致服務端的解析異常(服務端認可的是您的域名信息,而非IP信息)。為了解決這個問題,您可以主動設置HTTP請求HOST字段的值,以HttpUrlConnection為例:
// 比如您要訪問https://www.aliyun.com/,假設www.aliyun.com域名的解析結果是140.205.62.8。
// 一般情況下,使用IP的方式進行訪問時,需要設置HTTP請求頭的HOST字段為原來的域名。
String fullPath = "https://140.205.62.8/";
String host = "www.aliyun.com";
URL url = new URL(fullPath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 設置HTTP請求頭HOST字段為www.aliyun.com
conn.setRequestProperty("Host", host);
COOKIE字段
部分網絡庫支持COOKIE的自動存儲管理,當您使用HTTPDNS進行IP URL請求時,部分網絡庫會將您URL中的IP信息作為COOKIE對應的域名信息進行存儲管理(而非HTTP請求頭HOST字段信息),進而造成COOKIE管理與使用上的困擾,因此您需要關閉COOKIE的自動管理功能(默認關閉)。
HTTPS域名下的使用
在使用HTTPS服務時本地認證證書環節需要確認您的訪問域名是否和證書一致,采用IP URL發起請求時係統網絡庫會使用IP信息進行驗證進而發生異常。針對該問題,有以下2種解決方案:
- 建議您在進行HTTPS服務時關閉HTTPDNS功能。
- 更改客戶端驗證證書的邏輯,可參考HTTPS業務場景的解決方案。
代理情況下的使用
當存在中間HTTP代理時,客戶端發起的請求中請求行會使用絕對路徑的URL,在您開啟HTTPDNS並采用IP URL進行訪問時,中間代理將識別您的IP信息並將其作為真實訪問的HOST信息傳遞給目標服務器,這時目標服務器將無法處理這類無真實HOST信息的HTTP請求。針對該問題,有以下2種解決方案:
1.使用原生的DNS解析規避該問題。2.修改服務端配置,使用類似於WAP網關(見下麵介紹)在header字段中增加其它字段的方式,服務端根據該私有字段進行驗證。
移動WAP網關使用了X-Online-Host
的私有協議字段來解決這個問題,比如:
目標URL:https://www.aliyun.com/product/oss/
代理:10.0.0.172:80
您的HTTP請求頭應設置為:
GET https://10.0.0.172:80/product/oss/ HTTP/1.1
Host: 10.0.0.172
X-Online-Host: www.aliyun.com
同樣您可以通過setRequestProperty
方法進行X-Online-Host
請求頭域的設置。
在絕大多數場景下,我們建議您在代理模式下關閉HTTPDNS功能。
最後更新:2016-12-13 13:09:26
上一篇:
獲取域名列表接口__域名管理接口_Open API_HTTPDNS-阿裏雲
下一篇:
Android SDK手冊__SDK手冊_HTTPDNS-阿裏雲
金融雲負載均衡開放哪些端口__常見問題_負載均衡-阿裏雲
高可靠性__產品優勢_產品簡介_雲數據庫 RDS 版-阿裏雲
部署應用__快速開始_企業級分布式應用服務 EDAS-阿裏雲
API調用示例__快速入門(調用API)_API 網關-阿裏雲
防盜鏈__存儲空間管理_最佳實踐_對象存儲 OSS-阿裏雲
集群管理__控製台使用指南_批量計算-阿裏雲
數據拆分策略__最佳實踐_分布式關係型數據庫 DRDS-阿裏雲
JobInstanceWorker__數據類型_API參考_E-MapReduce-阿裏雲
修改共享帶寬包-增加公網IP__NAT網關相關接口_API 參考_雲服務器 ECS-阿裏雲
什麼是大數據開發套件__產品簡介_大數據開發套件-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲