上云无忧 > 文档中心 > 百度智能云对象存储BOS通过安卓SDK使用HTTPDNS服务
对象存储BOS
百度智能云对象存储BOS通过安卓SDK使用HTTPDNS服务

文档简介:
基于BOS的使用情况来看,目前移动端上传的问题主要集中在如下几个方面: DNS解析失败,请求出错; 域名劫持,数据在传输中有篡改,给用户带来诸如网络钓鱼、隐私窃取等网络访问风险;
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

场景概述

基于BOS的使用情况来看,目前移动端上传的问题主要集中在如下几个方面:

  • DNS解析失败,请求出错;
  • 域名劫持,数据在传输中有篡改,给用户带来诸如网络钓鱼、隐私窃取等网络访问风险;
  • 弱网下,速度慢,上传数据可能有超时。

使用HTTPDNS服务访问BOS后,有以下优势:

  • 安全防劫持,可有效降低由域名劫持引起的成功率下降问题;
  • 精准调度可提供最优接入点,降低用户访问时延;
  • 域名解析结果变更时,HTTPDNS服务没有传统DNS服务多级缓存的影响,能够更快的令移动端获取新的解析结果,避免多层缓存的影响,可有效缩短域名切换的生效时间。

适用场景:使用BOS时对请求的成功率、延迟、故障止损效速度敏感的场景。

操作流程

开通HTTPDNS服务

  • 进入HTTPDNS官方文档,完成服务的开通;
  • 在【配置管理】的域名管理中添加*.bcebos.com,或者业务使用的自定义域名或者CDN域名;
  • 测试HTTPDNS。

添加项目依赖

我们提供了方便的远程依赖便于用户使用httpdns。

  • 打开需要引用该sdk的module的build.gradle,在最后增加:
repositories{ jcenter() maven { url "https://raw.githubusercontent.com/bdhttpdns/BDHttpDnsSDK/master" } }
  • 在dependencies下增加:
dependencies{ compile 'com.baidu:httpdns:1.3' }

重载OkHttpDns

设置刚刚开通HTTPDNS服务的账号和密码,对常用域名进行预加载,避免初次请求时缓存不命中。同时,还可以设置多种处理策略,以更好地完成业务需要,参考移动域名解析Android_SDK设置接口。

static class OkHttpDns implements Dns { private static OkHttpDns instance = null; private BDHttpDns httpDns;
 private OkHttpDns(Context context) { this.httpDns = BDHttpDns.getService(context); this.httpDns.setAccountID
(account); this.httpDns.setSecret(secret); // 预加载域名 ArrayList<String> preResolveHosts = new ArrayList<String>();
 preResolveHosts.add("bj.bcebos.com"); this.httpDns.setPreResolveHosts(preResolveHosts); } public static OkHttpDns 
getInstance(Context context) { if(instance == null) { instance = new OkHttpDns(context); } return instance; }
 @Override public List<InetAddress> lookup(final String hostname) throws UnknownHostException
 { // 通过同步解析接口获取ip final BDHttpDnsResult httpDnsResult = httpDns.syncResolve(hostname, false);
 Log.v("dns", "HttpDns resolve type: " + httpDnsResult.getResolveType()); 
// 优先使用ipv6结果,对于ipv6结果,需要在ip前后增加[]字符 // 若不存在ipv6结果,则使用ipv4结果 ArrayList<String>
 ipv6List = httpDnsResult.getIpv6List(); ArrayList<String> ipv4List = httpDnsResult.getIpv4List(); String ip = null; if 
(ipv6List != null && !ipv6List.isEmpty()) { ip = "[" + ipv6List.get(0) + "]"; } else if (ipv4List != null && !ipv4List.isEmpty())
 { ip = ipv4List.get(0); } else { Log.v("DNS", "Get empty iplist from httpdns, use origin url"); } if(ip != null) 
{ final String finalIp = ip; //如果ip不为null,直接使用该ip进行网络请求 List<InetAddress> inetAddresses = Arrays.asList
(InetAddress.getAllByName(ip)); Log.d("DNS", "inetAddresses:" + inetAddresses); return inetAddresses; } //如果返回null,
走系统DNS服务解析域名 return Dns.SYSTEM.lookup(hostname); } }

调整Bosclient配置

使用setDns。

BosClientConfiguration config = new BosClientConfiguration(); config.setCredentials(new DefaultBceCredentials
(accessKeyId, secretAccessKey)); config.setEndpoint(bos_endpoint); config.setProtocol(Protocol.HTTP); config.setDns
(OkHttpDns.getInstance(getApplicationContext()));

立即体验

以上流程完成后,正常使用BOS就可以体验HTTPDNS域名解析服务了。

注意

  • HTTPDNS虽然有一定免费额度(目前每自然月有300万次免费域名解析次数),超过初始额度后会产生一定的费用,通过dns的参数配置,可以减少对httpdns server的访问,例如:缓存过期处理策略、使用https协议或http协议等。
  • APP刚启动时,默认HTTPDNS降级标志为是。SDK、网络库自动使用DNS解析的方式发起请求。这属于正常情况,不会影响后续使用HTTPDNS服务来访问BOS。

相似文档
  • AWS 的S3接口协议具有广泛的开源工具支持,BOS兼容AWS S3主要常用接口,对于基于S3接口协议开发的各类应用及服务,可以轻松迁移到BOS。
  • 通过AWS S3协议访问BOS和直接访问BOS类似,也支持path-style和 bucket virtual hosting两种方式,以GetObject举例,两种风格请求语法如下:
  • 兼容最新的AWS Signature Version 4,签名方法见Authenticating Requests (AWS Signature Version 4),其中Transferring Payload in Multiple Chunks暂未兼容。
  • AWS S3 请求头 描述 Authorization 兼容以AWS4-HMAC-SHA256开头V4版本认证 Content-Length 兼容 Content-Type 兼容 Content-MD5 兼容 Date 兼容 Expect 兼容 Host 兼容 x-amz-content-sha256 兼容 x-amz-date 兼容 x-amz-security-token 未兼容
  • Service API AWS S3接口 描述 GET Service/List Buckets 兼容 Bucket API AWS S3接口 描述 DELETE Bucket 兼容 GET Bucket/List Objects 兼容GET Bucket (List Objects) Version 1 GET Bucket acl 兼容 GET Bucket Location 兼容 HEAD Bucket 兼容
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部