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-阿里云