华为云用户手册

  • 获取SDK 下载SDK的最新版本,获取“ApiGateway-csharp-sdk.zip”压缩包,解压后目录结构如下: 名称 说明 apigateway-signature\Signer.cs SDK代码 apigateway-signature\HttpEncoder.cs sdk-request\Program.cs 签名请求示例代码 backend-signature\ 后端签名示例工程 csharp.sln 工程文件 licenses\license-referencesource 第三方库license文件
  • 调用API示例 在工程中引入sdk。 1 using APIGATEWAY_SDK; 生成一个新的Signer, 填入AppKey和AppSecret。 123 Signer signer = new Signer();signer.Key = "4f5f626b-073f-402f-a1e0-e52171c6100c";signer.Secret = "******"; 生成一个HttpRequest对象,指定域方法名、请求url和body。 123 HttpRequest r = new HttpRequest("POST", new Uri("https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/app1?query=value"));r.body = "{\"a\":1}"; 给请求添加x-stage头,内容为环境名。如有需要,添加需要签名的其他头域。 1 r.headers.Add("x-stage", "RELEASE"); 进行签名,执行此函数会生成一个新的HttpWebRequest,并在请求参数中添加用于签名的X-Sdk-Date头和Authorization头。 1 HttpWebRequest req = signer.Sign(r); 访问API,查看访问结果。 123456 var writer = new StreamWriter(req.GetRequestStream());writer.Write(r.body);writer.Flush();HttpWebResponse resp = (HttpWebResponse)req.GetResponse();var reader = newStreamReader(resp.GetResponseStream());Console.WriteLine(reader.ReadToEnd());
  • 调用API示例 使用JavaScript SDK生成curl命令。 下载JavaScript SDK的最新版本,并解压。在浏览器中打开demo.html,页面如下图所示。 填入Key、Secret、方法名、请求协议、 域名 和url。例如: 1234 Key=4f5f626b-073f-402f-a1e0-e52171c6100cSecret=******Method=POSTUrl=https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com 填入json格式的Query和Headers,填入Body。 单击“Send request”,生成curl命令。将curl命令复制到命令行,访问API。 $ curl -X POST "https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/" -H "X-Sdk-Date: 20180530T115847Z" -H "Authorization: SDK-HMAC-SHA256 Access=071fe245-9cf6-4d75-822d-c29945a1e06a, SignedHeaders=host;x-sdk-date, Signature=9e5314bd156d517******dd3e5765fdde4" -d ""Congratulations, sdk demo is running SDK生成的curl命令不符合Window下cmd终端格式,请在git bash下执行生成的curl命令。
  • 准备环境 已获取API的域名、请求url、请求方法、AppKey和AppSecret等信息,具体参见认证前准备。 获取并安装IntelliJ IDEA,如果未安装,请至IntelliJ IDEA官方网站下载。 获取并安装PHP安装包,如果未安装,请至PHP官方下载页面下载。 将PHP安装目录中的“php.ini-production”文件复制到“C:\windows”,改名为“php.ini”,并在文件中增加如下内容。 123 extension_dir = "php安装目录/ext"extension=opensslextension=curl 已在IntelliJ IDEA中安装PHP插件,如果未安装,请按照图1所示安装。 图1 安装PHP插件
  • 步骤3:计算签名 将APP secret和创建的待签字符串作为加密哈希函数的输入,计算签名,将二进制值转换为十六进制表示形式。 伪代码如下: signature = HexEncode(HMAC(APP secret, string to sign)) 其中HMAC指密钥相关的哈希运算,HexEncode指转十六进制。伪代码中参数说明如表1所示。 表1 参数说明 参数名称 参数解释 APP secret 签名密钥 string to sign 创建的待签字符串 假设APP secret为FWTh5tqu2Pb9ZGt8NI09XYZti2V1LTa8useKXMD8,则计算得到的signature为: 01cc37e53d821da93bb7239c5b6e1640b184a748f8c20e61987b491e00b15822
  • 步骤2:创建待签字符串 对HTTP请求进行规范并取得请求的哈希值后,将其与签名算法、签名时间一起组成待签名字符串。 StringToSign = Algorithm + \n + RequestDateTime + \n + HashedCanonicalRequest 伪代码中参数说明如下。 Algorithm 签名算法。对于SHA 256,算法为SDK-HMAC-SHA256。 RequestDateTime 请求时间戳。与请求消息头X-Sdk-Date的值相同,格式为YYYYMMDDTHHMMSSZ。 HashedCanonicalRequest 经过哈希处理的规范请求。 上述例子得到的待签字符串为: SDK-HMAC-SHA25620191111T093443Zaf71c5a7ef45310b8dc05ab15f7da50189ffa81a95cc284379ebaa5eb61155c0
  • 步骤4:添加签名信息到请求头 在计算签名后,将它添加到Authorization的HTTP消息头。Authorization消息头未包含在已签名消息头中,主要用于身份验证。 伪代码如下: Authorization header创建伪码:Authorization: algorithm Access=APP key, SignedHeaders=SignedHeaders, Signature=signature 需要注意的是算法与Access之前没有逗号,但是SignedHeaders与Signature之前需要使用逗号隔开。 得到的签名消息头为: Authorization: SDK-HMAC-SHA256 Access=FM9RLCN************NAXISK, SignedHeaders=host;x-sdk-date, Signature=01cc37e53d821da93bb7239c5b6e1640b184a748f8c20e61987b491e00b15822 得到签名消息头后,将其增加到原始HTTP请求内容中,请求将被发送给API网关,由API网关完成身份认证。身份认证通过后,该请求才会发送给后端服务进行业务处理。
  • 步骤1:构造规范请求 使用APP方式进行签名与认证,首先需要规范请求内容,然后再进行签名。客户端与API网关使用相同的请求规范,可以确保同一个HTTP请求的前后端得到相同的签名结果,从而完成身份校验。 HTTP请求规范伪代码如下: CanonicalRequest = HTTPRequestMethod + '\n' + CanonicalURI + '\n' + CanonicalQueryString + '\n' + CanonicalHeaders + '\n' + SignedHeaders + '\n' + HexEncode(Hash(RequestPayload)) 通过以下示例来说明规范请求的构造步骤。 假设原始请求如下: GET https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/app1?b=2&a=1 HTTP/1.1Host: c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.comX-Sdk-Date: 20191111T093443Z 构造HTTP请求方法(HTTPRequestMethod),以换行符结束。 HTTP请求方法,如GET、PUT、POST等。请求方法示例: GET 添加规范URI参数(CanonicalURI),以换行符结束。 释义: 规范URI,即请求资源路径,是URI的绝对路径部分的URI编码。 格式: 根据RFC 3986标准化URI路径,移除冗余和相对路径部分,路径中每个部分必须为URI编码。如果URI路径不以“/”结尾,则在尾部添加“/”。 举例: 示例中的URI:/app1,此时规范的URI编码为: GET/app1/ 计算签名时,URI必须以“/”结尾。发送请求时,可以不以“/”结尾。 添加规范查询字符串(CanonicalQueryString),以换行符结束。 释义: 查询字符串,即查询参数。如果没有查询参数,则为空字符串,即规范后的请求为空行。 格式: 规范查询字符串需要满足以下要求: 根据以下规则对每个参数名和值进行URI编码: 请勿对RFC 3986定义的任何非预留字符进行URI编码,这些字符包括:A-Z、a-z、0-9、-、_、.和~。 使用%XY对所有非预留字符进行百分比编码,其中X和Y为十六进制字符(0-9和A-F)。例如,空格字符必须编码为%20,扩展UTF-8字符必须采用“%XY%ZA%BC”格式。 对于每个参数,追加“URI编码的参数名称=URI编码的参数值”。如果没有参数值,则以空字符串代替,但不能省略“=”。 例如以下含有两个参数,其中第二个参数parm2的值为空。 parm1=value1&parm2= 按照字符代码以升序顺序对参数名进行排序。例如,以大写字母F开头的参数名排在以小写字母b开头的参数名之前。 以排序后的第一个参数名开始,构造规范查询字符串。 举例: 示例中包含两个可选参数:a、b GET/app1/a=1&b=2 添加规范消息头(CanonicalHeaders),以换行符结束。 释义: 规范消息头,即请求消息头列表。包括签名请求中的所有HTTP消息头列表。消息头必须包含X-Sdk-Date,用于校验签名时间,格式为ISO8601标准的UTC时间格式:YYYYMMDDTHHMMSSZ。如果API发布到非RELEASE环境时,需要增加自定义的环境名称。 客户端须注意本地时间与时钟服务器的同步,避免请求消息头X-Sdk-Date的值出现较大误差。 API网关除了校验时间格式外,还会校验该时间值与网关收到请求的时间差,如果时间差大于15分钟,API网关将拒绝请求。 格式: CanonicalHeaders由多个请求消息头共同组成,CanonicalHeadersEntry0 + CanonicalHeadersEntry1 + ...,其中每个请求消息头(CanonicalHeadersEntry)的格式为Lowercase(HeaderName) + ':' + Trimall(HeaderValue) + '\n' Lowercase表示将所有字符转换为小写字母的函数。 Trimall表示删除值前后的多余空格的函数。 最后一个请求消息头也会携带一个换行符。叠加规范中CanonicalHeaders自身携带的换行符,因此会出现一个空行。 消息头名称要保持唯一性,出现多个相同消息头名称时,无法完成认证。 举例: GET/app1/a=1&b=2host:c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.comx-sdk-date:20191111T093443Z 规范消息头需要满足以下要求: 将消息头名称转换为小写形式,并删除前导空格和尾随空格。 按照字符代码对消息头名称进行升序排序。 例如原始消息头为: Host: c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com\nContent-Type: application/json;charset=utf8\nMy-header1: a b c \nX-Sdk-Date:20191111T093443Z\nMy-Header2: "a b c" \n 规范消息头为: content-type:application/json;charset=utf8\nhost:c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com\nmy-header1:a b c\nmy-header2:"a b c"\nx-sdk-date:20191111T093443Z\n 添加用于签名的消息头声明(SignedHeaders),以换行符结束。 释义: 用于签名的请求消息头列表。通过添加此消息头,向API网关告知请求中哪些消息头是签名过程的一部分,以及在验证请求时API网关可以忽略哪些消息头。X-Sdk-date必须作为已签名的消息头。 格式: SignedHeaders = Lowercase(HeaderName0) + ';' + Lowercase(HeaderName1) + ";" + ... 已签名的消息头需要满足以下要求:将已签名的消息头名称转换为小写形式,按照字符代码对消息头进行排序,并使用“;”来分隔多个消息头。 Lowercase表示将所有字符转换为小写字母。 举例: 以下表示有两个消息头参与签名:host、x-sdk-date GET/app1/a=1&b=2host:c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.comx-sdk-date:20191111T093443Zhost;x-sdk-date 基于HTTP或HTTPS请求正文中的body体(RequestPayload),使用SHA-256哈希函数创建哈希值。 释义: 请求消息体。消息体需要做两层转换:HexEncode(Hash(RequestPayload)),其中Hash表示生成消息摘要的函数,当前支持SHA-256算法。HexEncode表示以小写字母形式返回摘要的Base-16编码的函数。例如,HexEncode("m") 返回值为“6d”而不是“6D”。输入的每一个字节都表示为两个十六进制字符。 计算RequestPayload的哈希值时,对于“RequestPayload==null”的场景,直接使用空字符串""来计算。 举例: 本示例为GET方法,body体为空。经过哈希处理的body(空字符串)如下: GET/app1/a=1&b=2host:c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.comx-sdk-date:20191111T093443Zhost;x-sdk-datee3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 对构造好的规范请求进行哈希处理,算法与对RequestPayload哈希处理的算法相同。经过哈希处理的规范请求必须以小写十六进制字符串形式表示。 算法伪代码:Lowercase(HexEncode(Hash.SHA256(CanonicalRequest))) 经过哈希处理的规范请求示例: af71c5a7ef45310b8dc05ab15f7da50189ffa81a95cc284379ebaa5eb61155c0
  • 概述 使用APP认证调用API APP认证需要通过SDK访问。 使用 IAM 认证调用API 支持Token认证和AK/SK认证两种。 Token认证:通过Token认证调用请求。Token认证无需使用SDK签名,优先使用Token认证。 AK/SK认证:通过AK(Access Key ID)/SK(Secret Access Key)认证调用请求。其签名方式和APP认证相似。 使用自定义认证调用API 如果您希望使用自己的认证方式,可以在函数服务中编写一个函数,将其作为您的认证服务。 使用无认证调用API 对API请求不进行认证。 通过多种开发语言对后端服务进行签名 指导API开放者通过创建后端签名,确保后端服务的安全。
  • 认证前准备 APP认证方式调用API,需要提前获取如下信息: 访问服务前,首先需要得到API的请求方法和请求url。 在 API服务 详情中的“API运行”页面,查看对应API的请求方法和请求url。 图1 API基础定义 您必须将API发布到环境才能访问。 在API服务详情中的“API运行”页面,查看已发布的环境。 图2 运行环境信息 对于APP认证的API,您必须提供有效的AppKey、AppSecret才能够生成认证签名。 在凭据策略详情页面,查看“应用凭据”的Key和Secret,即为APP的AppKey和AppSecret。 图3 查看Key和Secret Key:APP访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 Secret:与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。 发送API请求时,需要将当前时间置于请求消息头的X-Sdk-Date,将签名信息置于请求消息头的Authorization。 客户端须注意本地时间与时钟服务器的同步,避免请求消息头X-Sdk-Date的值出现较大误差。 ROMA API除了校验时间格式外,还会校验该时间值与ROMA API收到请求的时间差,如果时间差超过15分钟,ROMA API将拒绝请求。 父主题: 使用APP认证调用API
  • 生成签名 生成签名的方式和APP认证相同,用AK代替APP认证中的AppKey,SK替换APP认证中的AppSecret,即可完成签名和请求。您可使用Java、Go、Python、C#、JavaScript、PHP、C++、C、Android进行签名和访问。 客户端须注意本地时间与时钟服务器的同步,避免请求消息头X-Sdk-Date的值出现较大误差。 API网关(即API管理)除了校验时间格式外,还会校验该时间值与网关收到请求的时间差,如果时间差大于15分钟,API网关将拒绝请求。
  • 准备环境 准备待用的签名密钥的Key和Secret。 已在控制台创建签名密钥,并绑定API,具体请参见创建并使用签名密钥。 下载SDK的最新版本。 获取并安装Python安装包(可使用2.7或3.X),如果未安装,请至Python官方下载页面下载。 获取并安装IntelliJ IDEA,如果未安装,请至IntelliJ IDEA官方网站下载。 已在IntelliJ IDEA中安装Python插件,如果未安装,请按照图1所示安装。 图1 安装Python插件
  • 调用API示例 把API信息替换到HttpClientDemo.java中对应位置。 本示例以AK和SK保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。以Linux系统为例在本地将已获取的AK/SK设置为环境变量。 打开终端,输入以下命令打开环境变量配置文件。 vi ~/.bashrc 设置环境变量,保存文件并退出编辑器。 export HUAWEICLOUD_SDK_AK="已获取AK值" export HUAWEICLOUD_SDK_SK="已获取SK值" 输入以下命令使配置文件生效。 source ~/.bashrc 把API信息和已设置的环境变量替换到HttpClientDemo.java中对应位置。 HttpClientDemo中引用以下类,可在“获取SDK”包中的“src”文件下查看: Constant:demo中用到的常量。 SSLCipherSuiteUtil:tls认证配置参数的工具类,比如配置客户端不校验证书。 UnsupportProtocolException:异常处理类。 public class HttpClientDemo { private static final Logger LOG GER = LoggerFactory.getLogger(HttpClientDemo.class); public static void main(String[] args) throws Exception { // Create a new request. Request httpClientRequest = new Request(); try { // Set the request parameters. // AppKey, AppSecrect, Method and Url are required parameters. // Directly writing AK/SK in code is risky. For security, encrypt your AK/SK and store them in the configuration file or environment variables. // In this example, the AK/SK are stored in environment variables for identity authentication. // Before running this example, set environment variables HUAWEICLOUD_SDK_AK and HUAWEICLOUD_SDK_SK. httpClientRequest.setKey(System.getenv("HUAWEICLOUD_SDK_AK")); httpClientRequest.setSecret(System.getenv("HUAWEICLOUD_SDK_SK")); httpClientRequest.setMethod("POST"); // Set a request URL in the format of https://{Endpoint}/{URI}. httpClientRequest.setUrl("put your request url here"); httpClientRequest.addHeader("Content-Type", "text/plain"); // Set a body for http request. httpClientRequest.setBody("put your request body here"); } catch (Exception e) { LOGGER.error(e.getMessage()); return; } CloseableHttpClient client = null; try { // Sign the request. HttpRequestBase signedRequest = Client.sign(httpClientRequest, Constant.SIGNATURE_ALGORITHM_SDK_HMAC_SHA256); if (Constant.DO_VERIFY) { // creat httpClient and verify ssl certificate HostName.setUrlHostName(httpClientRequest.getHost()); client = (CloseableHttpClient) SSLCipherSuiteUtil.createHttpClientWithVerify(Constant.INTERNATIONAL_PROTOCOL); } else { // creat httpClient and do not verify ssl certificate client = (CloseableHttpClient) SSLCipherSuiteUtil.createHttpClient(Constant.INTERNATIONAL_PROTOCOL); } HttpResponse response = client.execute(signedRequest); // Print the body of the response. HttpEntity resEntity = response.getEntity(); if (resEntity != null) { LOGGER.info("Processing Body with name: {} and value: {}", System.getProperty("line.separator"), EntityUtils.toString(resEntity, "UTF-8")); } } catch (Exception e) { LOGGER.error(e.getMessage()); } finally { if (client != null) { client.close(); } } }} 运行HttpClientDemo.java,对请求进行签名、访问API并打印结果。 示例结果如下: [main] INFO com.huawei.apig.sdk.demo.HttpClientDemo - Print the authorization: [Authorization: SDK-HMAC-SHA256 Access=3afe0280a6e1466e9cb6f23bcccdba29, SignedHeaders=host;x-sdk-date, Signature=26b2abfa40a4acf3c38b286cb6cbd9f07c2c22d1285bf0d4f6cf1f02d3bfdbf6][main] INFO com.huawei.apig.sdk.demo.HttpClientDemo - Print the status line of the response: HTTP/1.1 200 OK[main] INFO com.huawei.apig.sdk.demo.HttpClientDemo - Processing Header with name: Date and value: Fri, 26 Aug 2022 08:58:51 GMT[main] INFO com.huawei.apig.sdk.demo.HttpClientDemo - Processing Header with name: Content-Type and value: application/json[main] INFO com.huawei.apig.sdk.demo.HttpClientDemo - Processing Header with name: Transfer-Encoding and value: chunked[main] INFO com.huawei.apig.sdk.demo.HttpClientDemo - Processing Header with name: Connection and value: keep-alive[main] INFO com.huawei.apig.sdk.demo.HttpClientDemo - Processing Header with name: Server and value: api-gateway[main] INFO com.huawei.apig.sdk.demo.HttpClientDemo - Processing Header with name: X-Request-Id and value: 10955c5346b9512d23f3fd4c1bf2d181[main] INFO com.huawei.apig.sdk.demo.HttpClientDemo - Processing Body with name: and value: {"200": "sdk success"} 显示{"200": "sdk success"},表示签名成功,API成功请求到后端。 如果改变AK或SK的值,API网关将返回的错误信息error_msg。
  • 获取SDK 下载SDK的最新版本,获取“ApiGateway-java-sdk.zip”压缩包,解压后目录结构如下: 名称 说明 libs\java-sdk-core-x.x.x.jar 签名SDK pom.xml 构建Maven工程所需,定义其他依赖包 changelog 变更日志 src 验证签名SDK的demo代码: WebSocketDemo.java OkHttpDemo.java、 LargeFileUploadDemo.java HttpClientDemo.java 引用类: Constant.java SSLCipherSuiteUtil.java UnsupportProtocolException.java
  • 调用API示例 在Android工程中的“app/libs”目录下,加入SDK所需jar包。其中jar包必须包括: java-sdk-core-x.x.x.jar joda-time-2.10.jar 在“build.gradle”文件中加入okhttp库的依赖。 在“build.gradle”文件中的“dependencies”下加入“implementation 'com.squareup.okhttp3:okhttp:3.14.2'”。 dependencies { ... ... implementation 'com.squareup.okhttp3:okhttp:3.14.3'} 创建request,输入AppKey和AppSecret,并指定域名、方法名、请求uri和body。 Request request = new Request();try {request.setKey("4f5f626b-073f-402f-a1e0-e52171c6100c");request.setSecrect("******");request.setMethod("POST");request.setUrl("https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/app1");request.addQueryStringParam("name", "value");request.addHeader("Content-Type", "text/plain");request.setBody("demo");} catch (Exception e) {e.printStackTrace();return;} 对请求进行签名,生成okhttp3.Request对象来访问API。 okhttp3.Request signedRequest = Client.signOkhttp(request);OkHttpClient client = new OkHttpClient.Builder().build();Response response = client.newCall(signedRequest).execute();
  • 前提条件 准备待用的签名密钥的Key和Secret。 已在控制台创建签名密钥,并绑定API,具体请参见创建并使用签名密钥。 下载SDK的最新版本。 已获取apigateway-backend-signature-demo。 获取并安装IntelliJ IDEA,如果未安装,请至IntelliJ IDEA官方网站下载。 已安装Java Development Kit 1.8.111或以上版本,如果未安装,请至Oracle官方下载页面下载。
  • 域名添加失败怎么办? 添加域名失败的原因及解决方案见下表: 原因 解决方案 加速域名与源站域名相同 加速域名和源站域名不能是同一个,否则会进入死循环,CDN节点无法回源,请更换加速域名或者源站域名后重试。 加速域名已存在 加速域名已经在华为云CDN添加,不允许重复添加同一个加速域名,请使用其他域名作为加速域名。 账号未实名认证 国际站用户在没有实名认证的情况下,无法添加服务范围包含中国大陆的加速域名,请实名认证后重试。 加速域名受限 因加速域名违规导致账号被冻结,请提交工单解决。 欠费导致帐号被冻结,请缴清欠款后重新添加。 源站是加速域名的子域名 域名的源站不能是已经添加到华为云 CDN加速 的泛域名的子域名,这样会造成回源失败,请更换源站域名后重试。 父主题: 故障相关
  • CDN日志中的HEAD、HIT、MISS代表什么? HEAD:HEAD方法跟GET方法相同,只是服务器响应时不会返回消息体。一个HEAD请求的响应中,HTTP头中包含的元信息应该和一个GET请求的响应消息相同。这种方法可以用来获取请求中隐含的元信息,而不用传输实体本身。也经常用来测试超链接的有效性、可用性和最近的修改。 HIT:CDN日志中显示的hit表示命中缓存节点,在缓存节点即可请求数据,无需回源。 MISS:CDN日志中的miss代表未命中缓存节点,需要回源请求数据。 父主题: 统计日志
  • 为什么通过API接口方式下载CDN日志时,返回“细粒度鉴权不通过”错误码? 可能原因是没有查询到当前项目,可以在请求路径中传参数enterprise_project_id=ALL 例如: GET https://cdn.myhuaweicloud.com/v1.0/cdn/logs?query_date=1502380500000&domain_name=www.example.com&page_size=10&page_number=1&enterprise_project_id=ALL 父主题: 统计日志
  • 华为云CDN是否支持对中文域名的加速? CDN暂不支持加速中文域名,接入CDN的域名需要满足以下基本规范: 域名长度不能超过75个字符,支持大小写字母、数字、“-”、“.”。 每个账号最多支持加速100个域名。 加速域名不允许重复添加。 CDN不支持非法网站接入,对于已接入CDN的域名,会进行定期复审,如发现存在违规行为,将立即中止该域名的CDN加速,同时中止该用户名下所有域名的CDN服务。 父主题: 功能咨询
  • CDN如果被cc攻击是怎么处理的? CC攻击是攻击者借助代理服务器生成指向受害主机的合法请求,实现DDoS和伪装攻击。攻击者通过控制某些主机不停地发送大量数据包给对方服务器,造成服务器资源耗尽,直至宕机崩溃。当域名受攻击,CDN节点会承受攻击流量,不会造成源站被攻击瘫痪。 CDN预设了防护CC攻击的策略,如果您有相关业务场景需要关闭该策略,请提交工单申请。 如果攻击流量太大造成节点不能正常服务,CDN会封禁加速域名,最终域名状态调整为“停用”,停止CDN加速服务。域名停用后将无法正常访问,但域名配置信息仍会保留(仅限保留期内),待攻击停止后可联系客服申请解除封禁。 由于攻击时CDN节点产生流量,此部分流量CDN会收取费用。 当您的加速域名突发大流量时(新功能发布),可能会被认为是攻击,请提前联系技术人员,以免业务受损。 父主题: 安全相关
  • 缓存刷新和缓存预热提示用户权限不足 如果您在进行缓存刷新和缓存预热操作时提示权限不足,可参照以下方法排查: 如果您使用的是IAM子账号登录,请先确认您的IAM子账号是否具有刷新预热的操作权限:CDN RefreshAndPreheatAccess。子账号的操作权限可向主账号管理员申请开通。 如果您的账号具有刷新预热的操作权限但仍提示用户权限不足,请查看您的域名是否已停用,账户欠费会导致您的域名停用,请检查账户余额。 父主题: 刷新预热
  • 为什么流量包中的流量使用量与统计分析中的流量显示存在差别? 以下两种情况会导致流量包使用量和统计分析中不一致: 统计分析中展示的流量存在一个小时左右的延时。而账单扣费存在四小时左右的延时,因此,扣费时间晚于统计分析,从而导致统计分析中流量多于当前流量包扣除的流量。 示例:12:00-13:00产生CDN流量20M 流量包扣费时间:12:00-13:00产生流量将在17:00产生账单,扣除20M流量。 统计时间:12:00-13:00产生流量会在14:00的时候就会在统计页面增加20M流量。 所以在14:00的时候统计页面已经统计了这20M流量,可是流量包还未扣除,因此导致二者不一致。 按流量计费未购买流量包的用户同样存在已扣费用和统计分析中不一致的情况,也是因为扣费延迟导致。 统计分析页面展示的是加速域名日志中记录的流量数据,是应用层日志统计出的流量,但是实际产生的网络流量由于TCP/IP包头消耗和TCP重传消耗要比应用层统计到的流量高出7%~15%。因此按照业界标准,应用于账单的计费数据会在控制台监控数据的基础上上浮10%。所以会导致流量包中使用的流量高于统计分析中的流量显示。 父主题: 购买计费
  • CDN支持哪些协议? 域名服务范围为中国大陆境外或全球时: 支持HTTP、HTTPS协议;不支持其他协议,如FTP、TCP、UDP等协议。 全站加速(后台无特殊配置)支持配置WebSocket协议。 域名服务范围为中国大陆时: 业务类型为非全站加速时,支持HTTP、HTTPS协议。不支持其FTP、TCP、UDP、WebSocket等其他协议。 业务类型为全站加速时,支持HTTP、HTTPS、WebSocket协议,不支持FTP、TCP、UDP等其他协议。 私有TCP、UDP等四层协议加速功能处于内测阶段,公测时间及开通方式请关注服务公告。 WebSocket功能处于公测期,暂不收费。 父主题: 功能咨询
  • 服务器在中国大陆境外,网站访问人群在中国大陆,该如何选择服务范围? 建议您的服务范围选择中国大陆。 当您的源站在中国大陆境外,且您开通的CDN加速服务范围在中国大陆时: 当中国大陆用户访问您的加速域名时会就近访问到中国大陆节点上,加速效果明显。 当中国大陆境外用户访问您的加速域名时,因您未开通中国大陆境外加速服务,中国大陆境外用户也会访问到中国大陆节点上。对中国大陆境外用户来说加速效果不是很明显,受跨境网络的影响,甚至可能会无法访问。 父主题: 使用咨询
  • 国外IP地址访问加速域名时,会通过哪个节点加速? 国外IP地址访问加速域名时,会根据客户端访问的出口IP地址,分配相应的CDN节点服务,域名的服务范围不同,分配的节点也不同。 如果加速域名的服务范围为全球或中国大陆境外,境外IP地址访问域名时会转发到最近的节点。 如果域名的服务范围为中国大陆,境外IP地址访问域名时也会转发到中国大陆的节点,由于跨境的网络的影响,访问速度可能较慢或者无法访问。 CDN节点分布在全球各地,建议您根据业务特点合理选择服务范围。 父主题: 使用咨询
  • 源站静态文件更新后,能否自动刷新CDN缓存? 当站点资源更新时,CDN无法自动刷新缓存,您可以通过以下两种方式手动刷新CDN缓存: 登录华为云控制台,在服务列表中选择“CDN”,左侧菜单栏选择“预热刷新”,在缓存刷新页签完成刷新操作。 通过CDN服务所提供的缓存刷新、缓存预热API接口,主动调用CDN API接口来更新CDN缓存,详见API参考。 OBS侧提供的自动刷新功能如下: 如果加速域名的源站是OBS,并且是从OBS控制台绑定的CDN加速域名,OBS服务可以提供自动刷新缓存功能,配置详见配置CDN自动刷新。 父主题: 刷新预热
  • 加速静态和动态资源的原理是否一样? 加速静态和动态资源原理不一样: 静态资源缓存到CDN节点,用户就近获取资料。 动态(伪静态)请求会直接回源,通过智能路由、多线回源、协议优化等技术,达到加速目的。 如果您的网站含有较多的动态、伪静态资源,您可以使用全站加速。CDN全站加速有效提升动态页面的加载速度,避开网络拥堵路由,提高访问成功率,实现网站整体加速与实时优化。 全站加速的更多资讯移步到全站加速产品页面进行咨询。 父主题: 功能咨询
  • 开启HTTPS强制跳转后,为什么在浏览器内访问正常,但是通过api请求HTTP会导致post请求丢失参数? 开启HTTPS强制跳转后,302/301跳转只是将HTTP转换为HTTPS,如果客户端不继续推送请求那么就会丢失参数,导致没有响应,在浏览器内访问正常是因为浏览器会在收到302/301响应之后重新提交一次参数然后响应成功。这是客户端请求的行为,客户端收到301/302响应后,再次请求需要带上相应的参数才会有响应。 如果您需要在加速域名开放API接口,且开启强制跳转HTTPS,建议将API接口硬编码为https://endpoint/{url},防止出现通过API请求时301/302跳转丢失参数问题。 父主题: 域名配置
  • 配置CDN加速后,回源获取的资源不正确 可能是由于您的回源HOST配置不对导致回源获取资源失败,回源HOST是CDN节点在回源过程中,在源站访问的站点域名,即HTTP请求头中的HOST信息。配置回源HOST后,CDN在回源过程中会根据HOST信息去对应站点获取资源。具体回源HOST配置信息请参见回源HOST配置。 域名添加后,CDN默认回源HOST为您的加速域名。如果加速域名不是您期望CDN在回源时访问的站点域名时,您需要自定义回源HOST来指明站点域名。 如果使用华为云OBS桶作为源站时,默认使用OBS域名作为回源HOST,不可修改。 如果您以源站域名形式将华为云OBS桶或其他云厂商的对象存储桶接入CDN作为源站,请将回源HOST自定义为您的对象存储桶域名,否则会造成回源失败。 父主题: 故障相关
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全