云服务器内容精选

  • 跨域请求被拦截 Access to XMLHttpRequest at 'xxx' from origin 'xxx' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
  • 请求成功但返回结果缺少某些字段 此类错误一般有两种原因: 在桶的CORS配置中ExposeHeader配置不完整,例如未配置ETag(导致上传对象成功后无法获取ETag值)、未配置x-obs-request-id(导致请求完成后无法获取OBS服务端请求ID)等,解决方法:请参考配置桶的CORS章节重新配置桶的CORS; 使用了旧版本的SDK,解决方法:升级到最新版本的SDK,可以从这里下载最新版本。
  • 无法获取上传后的ETag值 使用ObsClient.putObject和ObsClient.uploadPart上传文件成功后返回结果中无ETag值,此类错误一般有两种原因: 桶的CORS配置中ExposeHeader不包含ETag头域,解决方法:按照文档配置桶的CORS为桶配置完整的CORS配置; 桶的CORS配置中ExposeHeader包含ETag头域,但浏览器的返回结果屏蔽了ETag头域(一般发生在低版本的浏览器),解决方法:升级到高版本且完全支持HTML5的浏览器。
  • 报错SSL peer shut down incorrectly 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 javax.net.ssl.SSLException: SSL peer shut down incorrectly at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:596) at sun.security.ssl.InputRecord.read(InputRecord.java:532) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975) at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:933) at sun.security.ssl.AppInputStream.read(AppInputStream.java:105) at obs.shaded.okio.Okio$2.read(Okio.java:140) at obs.shaded.okio.AsyncTimeout$2.read(AsyncTimeout.java:237) at obs.shaded.okio.RealBufferedSource.read(RealBufferedSource.java:51) at obs.shaded.okhttp3.internal.http1.Http1ExchangeCodec$AbstractSource.read(Http1ExchangeCodec.java:389) at obs.shaded.okhttp3.internal.http1.Http1ExchangeCodec$FixedLengthSource.read(Http1ExchangeCodec.java:427) at obs.shaded.okhttp3.internal.connection.Exchange$ResponseBodySource.read(Exchange.java:286) at obs.shaded.okio.RealBufferedSource$1.read(RealBufferedSource.java:447) at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:238) at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158) at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:117) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) at java.io.InputStreamReader.read(InputStreamReader.java:184) at java.io.BufferedReader.fill(BufferedReader.java:161) at java.io.BufferedReader.readLine(BufferedReader.java:324) at java.io.BufferedReader.readLine(BufferedReader.java:389)
  • 连接超时 1 2 3 4 HTTP Code: 408 Caused by: java.net.ConnectException: Connection timed out: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) 此类错误一般有三种原因: 初始化ObsClient时传入的Endpoint有误,解决方法:检查Endpoint,确保正确; 客户端到OBS服务端的网络异常,导致无法访问,解决方法:检查客户端到OBS服务端的网络健康状况; DNS解析出的OBS服务 域名 无法访问,解决方法:联系OBS运维团队。
  • ObsException中无法获取错误码 此类错误一般有两种原因: 调用ObsClient.getBucketMetadata或ObsClient.getObjectMetadata报错,此种场景下由于后台使用的是HEAD请求,服务端不会返回错误码,解决方法:使用ObsException.getResponseCode获取HTTP状态码,根据状态码分析可能原因,如403一般代表无权限访问,404一般代表桶或对象不存在;如无法定位原因,可从ObsException中获取OBS服务端请求ID后联系OBS运维团队; 初始化ObsClient时传入的Endpoint通过DNS解析后的IP不是有效的OBS服务端,解决方法:检查Endpoint配置是否正确,如Endpoint确认无误,联系OBS运维团队。
  • 读写超时 1 2 3 4 5 6 HTTP Code: 408 Error Code:RequestTimeOut Caused by: java.net.SocketTimeoutException: timeout at okio.Okio$4.newTimeoutException(Okio.java:232) at okio.AsyncTimeout.exit(AsyncTimeout.java:285) at okio.AsyncTimeout$2.read(AsyncTimeout.java:241) 此类错误一般有两种原因: 客户端到OBS服务端的网络时延过大,解决方法:检查客户端到OBS服务端的网络健康状况; 客户端到OBS服务端的网络异常,导致无法访问,解决方法:检查客户端到OBS服务端的网络健康状况。
  • UnknownHostException域名无法解析异常 1 2 3 4 Caused by: java.net.UnknownHostException: bucketname.unknowndomain.com at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901) at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293) 此类错误一般有两种原因: 初始化ObsClient时传入的Endpoint有误,解决方法:检查Endpoint,确保正确; DNS无法解析OBS服务域名,解决方法:联系OBS运维团队。
  • 升级SDK后okhttp报错问题 1 2 3 4 5 6 Exception in thread "main" java.lang.NoSuchMethodError: 'okhttp3.RequestBody okhttp3.RequestBody.create(java.lang.String, okhttp3.MediaType)' at com.obs.services.internal.RestConnectionService.createRequestBuilder(RestConnectionService.java:157) at com.obs.services.internal.RestConnectionService.setupConnection(RestConnectionService.java:148) at com.obs.services.internal.RestConnectionService.setupConnection(RestConnectionService.java:124) at com.obs.services.internal.RestStorageService.performRequest(RestStorageService.java:395) at com.obs.services.internal.RestStorageService.performRequest(RestStorageService.java:388)
  • NullPointException空指针异常 1 2 3 Exception in thread "main" java.lang.NullPointerException at com.obs.services.internal.RestStorageService.isCname(RestStorageService.java:1213) at com.obs.services.ObsClient.doActionWithResult(ObsClient.java:2805)
  • 升级SDK后报错StackOverflowError问题 1 2 3 4 5 6 7 8 9 Caused by: java.lang.StackOverflowError at sun.misc.URLClassPath.getResource(URLClassPath.java:211) ~[?:1.8.0_91] at java.net.URLClassLoader$1.run(URLClassLoader.java:365) ~[?:1.8.0_91] at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[?:1.8.0_91] at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_91] at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[?:1.8.0_91] at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_91] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_91] at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1806)
  • SignatureDoesNotMatch签名不匹配 1 2 HTTP Code: 403 Error Code: SignatureDoesNotMatch 此类错误一般有三种原因: 初始化ObsClient时传入的SK有误,解决方法:检查SK,确保正确; 旧版本OBS Java SDK的BUG,解决方法:升级SDK到最新版本; OBS Java SDK 2.1.x版本与其依赖库Apache HttpClient的兼容性问题,解决方法:使用固定版本的依赖库,httpcore-4.4.4和httpclient-4.5.3。
  • 返回码 通过进程等方式调用obsutil时,无法实时查看回显信息。obsutil支持在进程运行结束后,根据不同的运行结果生成不同的返回码,具体的返回码及其含义如表1所示。您可以通过以下方式获取最近一次运行结果的返回码,然后根据返回码分析并处理问题。 macOS/Linux操作系统,执行以下命令获取最近一次运行结果的返回码: echo $? Windows操作系统,执行以下命令获取最近一次运行结果的返回码: echo %errorlevel% 表1 返回码 返回码 含义 常见场景举例 0 执行成功 上传对象成功。 1 文件不存在 执行cp上传文件,输入的文件路径不存在。 2 任务不存在 执行cp恢复失败的上传任务,指定的Task Id不存在。 3 参数错误 执行cp上传文件,输入不支持的附加选项; 执行cp下载文件,输入的cloud_url不合法。 说明: cloud_url为桶路径或对象路径,当下载桶中的所有对象时,cloud_url的格式必须为obs://bucketname;当下载指定对象时,cloud_url的格式必须为obs://bucketname/key。 4 检查桶状态错误 执行cp上传文件夹,待上传的桶不存在。 5 命令初始化错误 加载配置文件出错; 执行cp上传文件夹,并指定了-o参数,但无法成功创建保存结果清单文件的文件夹。 6 执行错误 执行ls查询桶列表,因为网络超时而失败。 7 操作不支持 执行chattri修改对象属性,但桶不是3.0版本的桶。 8 批量任务执行不完全成功 执行cp批量下载对象,部分对象下载失败。 9 中断错误 执行命令过程中用户手动Ctrl+C中断任务执行。 -1 其他未知错误 - 父主题: 问题定位
  • 认证不通过 认证不通过的请求会被API网关拒绝,得到类似如下的返回,返回以APIGW开头的错误码。 比如使用Token认证请求没有带Token,返回如下。 { "error_msg": "Incorrect IAM authentication information: x-auth-token not found", "error_code": "APIGW.0301", "request_id": "7775eaa6b4bbe5934e565349bd27c298"} 使用了错误的Token,返回如下。 { "error_msg": "Incorrect IAM authentication information: decrypt token fail", "error_code": "APIGW.0301", "request_id": "0e812a89eee650de8e1f55cdae28b2c9"} 使用了错误的AK,会返回如下错误。 Traceback (most recent call last): File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/http/http_client.py", line 119, in response_hook resp.raise_for_status() File "/home/user/.local/lib/python3.7/site-packages/requests/models.py", line 953, in raise_for_status raise HTTPError(http_error_msg, response=self)requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://iam.myhuaweicloud.com/v3/projects?name=cn-north-4During handling of the above exception, another exception occurred:Traceback (most recent call last): File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/auth/credentials.py", line 93, in process_auth_params self.project_id = keystone_list_projects(http_client, request) File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/auth/iam_service.py", line 49, in keystone_list_projects raise e File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/auth/iam_service.py", line 47, in keystone_list_projects http_response = http_client.do_request_sync(request) File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/http/http_client.py", line 93, in do_request_sync self.response_error_hook_factory()(response) File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/http/http_client.py", line 130, in response_hook raise exceptions.ClientRequestException(response_status_code, sdk_error)huaweicloudsdkcore.exceptions.exceptions.ClientRequestException: ClientRequestException - {status_code:401,request_id:3f979354fbec41b3cc0bd28ce7865e20,error_code:APIGW.0301,error_msg:Incorrect IAM authentication information: ak xxxxxx not exist } 使用了错误的SK,返回如下。 huaweicloudsdkcore.exceptions.exceptions.ApiValueError: Failed to get project id, Incorrect IAM authentication information: verify aksk signature fail, canonicalRequest:GET|/v3/projects/|name=cn-north-4|host:iam.myhuaweicloud.com|x-sdk-date:20210902T011700Z||host;x-sdk-date|e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
  • Token的权限范围问题 在使用Token认证时,需要先申请Token,申请Token时需要填写Token是全局级别的还是项目级别的,如下申请Token接口的请求Body体中scope所示。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "xxxxxxxx" } } }} 区域级服务需要获取项目级别的Token(区域默认对应一个项目,这个项目由系统预置),此时请求body中auth.scope的取值为project。 全局级服务需要获取全局级别的Token,此时请求body中auth.scope的取值为domain。 对于区域级服务,如果获取全局级别的Token,虽能使用该Token通过认证,但无法在后端通过鉴权,会导致请求失败。 例如获取一个全局Token,如下所示。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "domainname" }, "name": "username", "password": "********" } } }, "scope": { "domain": { "id": "0503dda878000fed0f75c0096d70a960" } } }} 然后调用E CS 服务的查询ECS服务器列表的API,则会得到如下响应。表示Token与URL中项目不匹配,返回错误。 { "error": { "message": "tenantId in token is not the same with in URL.", "code": "Common.0018" }} 此种情况下,如果调用全局级服务的API,如TMS的API,则会正确调用。