0006-00000220

问题描述

Post Policycontent-length-range参数取值有误。

问题原因

您在发起PostObject请求上传文件时,可能会遇到与content-length-range相关的报错。这通常由以下两种原因导致:

  1. content-length-range参数本身配置错误:在Post Policyconditions中,content-length-range用于指定允许上传文件的最小和最大值。它的格式为 ["content-length-range", min-len, max-len]。其中,min-len(最小大小)和max-len(最大大小)都必须是正整数,并且max-len必须大于或等于min-len。如果格式或数值不正确,请求将会失败。

  2. 请求时间与服务器时间差异过大:Post请求中包含一个与时间相关的字段(例如x-oss-datePolicy中的expiration)。OSS服务器会校验收到的请求时间与服务器当前时间的差异。如果这个时间差超出了预设的阈值(通常是15分钟),服务器会拒绝该请求,并可能返回与策略(Policy)相关的错误,因为策略中定义了请求的有效时间范围。

问题示例

示例一:content-length-range参数配置错误

以下Post Policycontent-length-rangemax-len被错误地指定为字符串"test",导致取值不合法。

{
    "expiration": "2023-02-19T13:19:00.000Z",
    "conditions": [
      	["content-length-range", "test", 10]
    ]
}

示例二:客户端时间与服务器时间不一致

虽然Policy本身是正确的,但如果发起请求的客户端本地时间与OSS服务器时间相差很大(例如,相差数小时),请求头中的日期或Policy中的expiration字段可能已经失效或尚未生效,从而导致请求被拒绝。例如,客户端时间是上午8点,而服务器时间是下午3点,这可能导致Policy校验失败。

解决方案

针对不同的原因,请采取相应的解决方案:

  1. 修正content-length-range参数
    确保content-length-range中指定的max-lenmin-len必须为正整数,且max-len必须大于或者等于min-len。

    {
        "expiration": "2023-02-19T13:19:00.000Z",
    		"conditions": [    
            ["content-length-range", 1, 1024]
      ]
    }
  2. 同步客户端时间
    确保发起PostObject请求的客户端(无论是服务器还是Web浏览器)的系统时间与标准网络时间(NTP)同步。保持客户端与服务器端的时间一致,可以避免因时间差过大导致的请求签名或Policy过期错误。

相关文档