为了给您带来更好的AWS S3 兼容性体验,KS3计划于2026年7月15日完成全部地域AWS S3 兼容性优化升级。
本次升级涉及存储桶 CORS 规则未配置、存在 CORS 配置但预检条件不符合 CORS 配置的错误响应优化,请您检查并确保存储桶 CORS 配置正确,给您带来的不便敬请谅解。
优化内容:
1. 预检请求(Options Object)相关
1.1 当存储桶未配置CORS 规则,options请求修正为403
优化前:规则未配置所有预检请求返回200,不符合options 预检请求规范
优化后:存储桶未配置CORS 规则,options 请求修正为报403
详细对比说明:
优化前 | 优化后 |
问题 | http code | http code | 错误码 | Message |
存储桶未配置cors 规则,options 请求响应200 | 200 | 403 | AccessForbidden | CORSResponse: CORS is not enabled for this bucket. |
| 响应示例: <Error>
<Code>AccessForbidden</Code>
<Message>CORSResponse: CORS is not enabled for this bucket.</Message>
<Method>OPTIONS</Method>
<ResourceType>BUCKET</ResourceType>
<RequestId>FM39VPJ0A4A****C2H1</RequestId>
</Error>
|
1.2 当存储桶配置CORS 规则,options请求修正为403
若因请求Origin、Access-Control-Request-Method、Access-Control-Request-Headers 请求header未通过存储桶CORS 规则校验,则返回如下优化处理
优化前 | | 优化后 |
问题 | http code | http code | 错误码 | 报错示例 |
Origin相关 | options 的请求头中未配置Origin,报错不清晰,http code不规范 | 403 | 400 | BadRequest | <Error>
<Code>BadRequest</Code>
<Message>Insufficient information. Origin request header needed.</Message>
<RequestId>T4SFGBGK***WZVZ6T6C</RequestId>
</Error>
|
未设置Origin,Origin必填项未验证 | 200 | 400 | BadRequest | <Error>
<Code>BadRequest</Code>
<Message>Insufficient information. Origin request header needed.</Message>
<RequestId>T4SFGBGK***WZVZ6T6C</RequestId>
</Error>
|
Origin配置但不符合CORS规则,Origin未验证 | 200 | 403 | AccessForbidden | 报错信息详细:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>AccessForbidden</Code>
<Message>CORSResponse: This CORS request is not allowed. This is usually because the evalution of Origin, request method / Access-Control-Request-Method or Access-Control-Request-Headers are not whitelisted by the resource's CORS spec.</Message>
<Method>OPTIONS</Method>
<ResourceType>OBJECT</ResourceType>
<RequestId>TC6SM3MV***JW1GYG5C</RequestId>
</Error>
|
Access-Control-Request-Method相关 | 未配置Access-Control-Request-Method,报错不详细 | 403 | 403 | AccessForbidden | 示例: <Error>
<Code>AccessForbidden</Code>
<Message>CORSResponse: This CORS request is not allowed. This is usually because the evalution of Origin, request method / Access-Control-Request-Method or Access-Control-Request-Headers are not whitelisted by the resource's CORS spec.</Message>
<Method>PUT</Method>
<ResourceType>OBJECT</ResourceType>
<RequestId>A3P7H16NW***JXRPHXY</RequestId>
</Error>
|
配置不符合有效参数范围,响应信息不明确 http code:403 错误码:AccessForbidden 错误信息:无 | 403 | 400 | BadRequest | Invalid Access-Control-Request-Method: xxx 说明:反馈用户输入非法,可明确提示错误原因 响应示例: <Error>
<Code>BadRequest</Code>
<Message>Invalid Access-Control-Request-Method: GETxxx</Message>
<RequestId>GMK2WB***SKVZRC4TR1</RequestId>
</Error>
注意: Access-Control-Request-Method 大小写不敏感 |
Access-Control-Request-Headers | 配置但不符合CORS规则,Headers未验证则 | 200 | 403 | AccessForbidden | <Error>
<Code>AccessForbidden</Code>
<Message>CORSResponse: This CORS request is not allowed. This is usually because the evalution of Origin, request method / Access-Control-Request-Method or Access-Control-Request-Headers are not whitelisted by the resource's CORS spec.</Message>
<Method>GET</Method>
<ResourceType>OBJECT</ResourceType>
<RequestId>M6BQWDGZ7YKYG2JE</RequestId>
</Error>
|
2 存储桶跨域访问(Bucket CORS) 相关
如果指定存储桶存在 CORS 配置且预检条件符合存储桶的 CORS 配置,则新增响应:Access-Control-Allow-Credentials:true
若CORS 规则中 Allowed Origin配置为 * ,不返回Access-Control-Allow-Credentials 响应头
优化前 | 优化后 |
请求 OPTIONS /my-image.jpg HTTP/1.1
Host: ks3-example.ks3-cn-beijing.ksyun.com
Date: Thu, 09 Jul 2025 14:49:22 GMT
Origin: https://example.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: content-md5,content-type
响应 HTTP/1.1 200 OK
Content-Length: 0
Access-Control-Allow-Headers: content-md5,content-type
Access-Control-Allow-Methods: PUT,GET,POST,DELETE,HEAD
Access-Control-Allow-Origin: https://example.com
Access-Control-Expose-Headers: Content-Length,ETag
Access-Control-Max-Age: 600
Date: Thu, 09 Jul 2020 14:49:22 GMT
Server: KS3
| 请求 OPTIONS /my-image.jpg HTTP/1.1
Host: ks3-example.ks3-cn-beijing.ksyun.com
Date: Thu, 09 Jul 2025 14:49:22 GMT
Origin: https://example.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: content-md5,content-type
响应 HTTP/1.1 200 OK
Content-Length: 0
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-md5,content-type
Access-Control-Allow-Methods: PUT,GET,POST,DELETE,HEAD
Access-Control-Allow-Origin: https://example.com
Access-Control-Expose-Headers: Content-Length,ETag
Access-Control-Max-Age: 600
Date: Thu, 09 Jul 2025 14:49:22 GMT
Server: KS3
|
3.分片上传相关
3.1分片上传单个分片的大小支持0字节
3.2 分片上传错误提示精细
优化前 | 优化后 |
<Error>
<Code>EntityTooSmall</Code>
<Message>Your proposed upload is smaller than the minimum allowed object size.</Message>
<Resource>/syh-test/test?uploadId=612ada722c7c4cf98a883860ad676d41</Resource>
<RequestId>fie1e020kcmoa85cstmbnhθnlmcvnkh9</RequestId>
/Error>
| HTTP/1.1 400 Bad Request
Content-Type: application/xml
<Error>
<Code>EntityTooSmall</Code>
<Message>Your proposed upload is smaller than the minimum allowed size</Message>
<ProposedSize>0</ProposedSize>
<MinSizeAllowed>102400</MinSizeAllowed>
<PartNumber>1</PartNumber>
<ETag>"d41d8cd98f00b204e9800998ecf8427e"</ETag>
<RequestId>"1d********8427e" <RequestId>
</Error>
|