HttpDNS功能说明及实现
HTTPDNS使用HTTP协议进行域名解析,代替现有基于UDP的DNS协议,域名解析请求直接发送到阿里云的HTTPDNS服务器,从而绕过运营商的Local DNS,能够避免Local DNS造成的域名劫持问题和调度不精准问题。
创新互联公司专注于霍邱网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供霍邱营销型网站建设,霍邱网站制作、霍邱网页设计、霍邱网站官网定制、微信小程序开发服务,打造霍邱网络公司原创品牌,更为您提供霍邱网站排名全网营销落地服务。
HTTPDNS代替了传统的LocalDNS完成递归解析的功能,基于HTTP协议的设计可以适用于几乎所有的网络环境,同时保留了鉴权、HTTPS等更高安全性的扩展能力,避免恶意攻击劫持行为。
传统域名解析的调度精准性问题,本质根源在于Local DNS的部署和分配机制上。由于碎片化的管理方式,这些环节的服务质量同样很难得到保障。HTTPDNS在递归解析实现上优化了与权威DNS的交互,通过a name=""edns-client-subnet/a协议将终端用户的IP信息直接交付给权威DNS,这样权威DNS就可以忽略Local DNS IP信息,根据终端用户的IP信息进行精准调度,避免Local DNS的坐标干扰
服务端提供API接口,app端直接通过ip地址访问,ip地址可以有多个
请求方式:HTTP GET
URL参数说明:
请求示例:
考虑到服务IP防攻击之类的安全风险,为保障服务可用性,HTTPDNS同时提供多个服务IP,当某个服务IP在异常情况下不可用时,可以使用其它服务IP进行重试。
错误码列表如下:
异常下的出错兼容逻辑,主要包括异步请求,重试,降级
异步请求
重试
降级
OkHttp默认使用系统DNS服务InetAddress进行域名解析,但同时也暴露了自定义DNS服务的接口,通过该接口我们可以优雅地使用HttpDns。
OkHttp暴露了一个Dns接口,通过实现该接口,我们可以自定义Dns服务:
创建OkHttpClient对象,传入OkHttpDns对象代替默认Dns服务:
相比于通用方案,OkHttp+HttpDns有以下两个主要优势:
基于NSURLProtocol可拦截iOS系统上基于上层网络库NSURLConnection/NSURLSession发出的网络请求;
通过以下接口注册自定义NSURLProtocol,用于拦截上层网络请求,并创建新的网络请求接管数据发送、接收、重定向等处理逻辑,将结果反馈给原始请求。
自定义NSURLProtocol处理过程概述:
阿里云调用 API 服务后返回什么结果
返回结果
调用 API 服务后返回数据采用统一格式,返回的 HTTP 状态码为 2xx,代表调用成功;返回 4xx 或 5xx 的 HTTP 状态码代表调用失败。调用成功返回的数据格式主要有 XML 和 JSON 两种,外部系统可以在请求时传入参数来制定返回的数据格式,默认为 XML 格式。本文档中的返回示例为了便于用户查看,做了格式化处理,实际返回结果是没有进行换行、缩进等处理的。
成功结果:
错误结果
调用接口出错后,将不会返回结果数据。调用方可根据每个接口对应的错误码以及下述 2.3.3 的公共错误码来定位错误原因。当调用出错时,HTTP 请求返回一个 4xx 或 5xx 的 HTTP 状态码。返回的消息体中是具体的错误代码及错误信息。另外还包含一个全局唯一的请求 ID:RequestId 和一个您该次请求访问的站点 ID:HostId。在调用方找不到错误原因时,可以联系阿里云客服,并提供该 HostId 和 RequestId,以便我们尽快帮您解决问题。
公共错误码
错误代码
描述
Http 状态码
语义
MissingParameter The input parameter “Action” that is mandatory for processing this request is not supplied 400 缺少 Action 字段
MissingParameter The input parameter “AccessKeyId” that is mandatory for processing this request is not supplied 400 缺少 AccessKeyId 字段
MissingParameter An input parameter “Signature” that is mandatory for processing the request is not supplied. 400 缺少 Signature 字段
MissingParameter The input parameter “TimeStamp” that is mandatory for processing this request is not supplied 400 缺少 Timestamp 字段
MissingParameter The input parameter “Version” that is mandatory for processing this request is not supplied 400 缺少 Version 字段
InvalidParameter The specified parameter “Action or Version” is not valid. 400 无效的 Action 值(该 API 不存在)
InvalidAccessKeyId.NotFound The Access Key ID provided does not exist in our records. 400 无效的 AccessKeyId 值(该 key 不存在)
Forbidden.AccessKeyDisabled The Access Key is disabled. 403 该 AccessKey 处于禁用状态
IncompleteSignature The request signature does not conform to Aliyun standards. 400 无效的 Signature 取值(签名结果错误)
InvalidParamater The specified parameter “SignatureMethod” is not valid. 400 无效的 SignatureMethod 取值
InvalidParamater The specified parameter “SignatureVersion” is not valid. 400 无效的 SignatureVersion 取值
IllegalTimestamp The input parameter “Timestamp” that is mandatory for processing this request is not supplied. 400 无效的 Timestamp 取值(Timestamp 与服务器时间相差超过了 1 个小时)
SignatureNonceUsed The request signature nonce has been used. 400 无效的 SignatureNonce(该 SignatureNonce 值已被使用过)
InvalidParameter The specified parameter “Action or Version” is not valid. 400 无效的 Version 取值
InvalidOwnerId The specified OwnerId is not valid. 400 无效的 OwnerId 取值
InvalidOwnerAccount The specified OwnerAccount is not valid. 400 无效的 OwnerAccount 取值
InvalidOwner OwnerId and OwnerAccount can’t be used at one API access. 400 同时使用了 OwnerId 和 OwnerAccount
Throttling Request was denied due to request throttling. 400 因系统流控拒绝访问
Throttling Request was denied due to request throttling. 400 该 key 的调用 quota 已用完
InvalidAction Specified action is not valid. 403 该 key 无权调用该 API
UnsupportedHTTPMethod This http method is not supported. 403 用户使用了不支持的 Http Method(当前 TOP 只支持 post 和 get)
ServiceUnavailable The request has failed due to a temporary failure of the server. 500 服务不可用
UnsupportedParameter The parameter ”” is not supported. 400 使用了无效的参数
InternalError The request processing has failed due to some unknown error, exception or failure. 500 其他情况
MissingParameter The input parameter OwnerId,OwnerAccount that is mandatory for processing this request is not supplied. 403 调用该接口没有指定 OwnerId
Forbidden.SubUser The specified action is not available for you。 403 无权调用订单类接口
UnsupportedParameter The parameter ”” is not supported. 400 该参数无权使用
Forbidden.InstanceNotFound The specified Instance is not found, so we cann’t get enough information to check permission in RAM. 404 使用了 RAM 授权子账号进行资源访问,但是本次访问涉及到的 Instance 不存在
Forbidden.DiskNotFound The specified Disk is not found, so we cann’t get enough information to check permission in RAM. 404 使用了 RAM 授权子账号进行资源访问,但是本次访问涉及到的 Disk 不存在
Forbidden.SecurityGroupNotFound The specified SecurityGroup is not found, so we cann’t get enough information to check permission in RAM. 404 使用了 RAM 授权子账号进行资源访问,但是本次访问涉及到的 SecurityGroup 不存在
Forbidden.SnapshotNotFound The specified Snapshot is not found, so we cann’t get enough information to check permission in RAM. 404 使用了 RAM 授权子账号进行资源访问,但是本次访问涉及到的 Snapshot 不存在
Forbidden.ImageNotFound The specified Image is not found, so we cann’t get enough information to check permission in RAM. 404 使用了 RAM 授权子账号进行资源访问,但是本次访问涉及到的 Image 不存在
Forbidden.RAM User not authorized to operate the specified resource, or this API doesn’t support RAM. 403 使用了 RAM 授权子账号进行资源访问,但是本次操作没有被正确的授权
Forbidden.NotSupportRAM This action does not support accessed by RAM mode. 403 该接口不允许使用 RAM 方式进行访问
InsufficientBalance Your account does not have enough balance. 400 余额不足
IdempotentParameterMismatch Request uses a client token in a previous request but is not identical to that request. 400 使用了一个已经使用过的 ClientToken,但此次请求内容却又与上一次使用该 Token 的 request 不一样.
RealNameAuthenticationError Your account has not passed the real-name authentication yet. 403 用户未进行实名认证
InvalidIdempotenceParameter.Mismatch The specified parameters are different from before 403 幂等参数不匹配
LastTokenProcessing The last token request is processing 403 上一次请求还在处理中
InvalidParameter The specified parameter is not valid 400 参数校验失败
阿里云把http改造成https的方法
这个不是修改的,是进行安全部署,https使用证书进行访问,有加密的更安全。
你需要先申请一个域名的https证书,在阿里云,腾讯云上面都有免费的域名https证书申请。
检查网站是否支持https,可以说99/100的网站都支持https,内容和界面都和http的是一样的,但是如果你的网站有外部http链接的话,这个网站使用https的话就无法打开http链接。
在iis,apache,nginx等网站服务上面部署证书,开放https端口(默认443端口),既可访问https地址,也可以访问http地址。
分享名称:阿里云http服务器请求格式的简单介绍
当前地址:http://lswzjz.com/article/ddesjoo.html