使用HTTP Post浏览器上传时遇AccessDenied:Policy expired错误求助
你已经试过调整系统时间、设置各种跨度的过期时间,但还是卡在这个Policy过期的错误上,我来帮你排查几个容易被忽略的关键点:
严格遵循UTC时间格式:
Post Policy里的expiration字段必须是ISO 8601标准的UTC时间,也就是要以Z结尾,比如"2019-06-30T18:30:00Z"。很多人会误用本地时间(比如北京时间)且不加时区标识,服务器解析时会直接判定时间过期——哪怕你设了未来1年的时间,格式不对全白搭。检查签名生成的时间一致性:
如果是后端生成Policy和签名,别只改客户端时钟,要确保后端服务器的系统时间是准确的UTC时间。签名是基于Policy内容和服务器当前时间生成的,一旦服务器时间偏差过大,哪怕Policy过期时间没问题,签名也会不匹配,服务器大概率会返回AccessDenied,有时候就会被误提示成Policy过期。验证Policy的JSON格式完整性:
你给出的Policy内容是{ "expiration": "2019-06..." },明显不完整。要保证整个JSON没有语法错误:用英文双引号、所有字段闭合、逗号和括号配对正确。比如漏了结尾的}或者多打了逗号,服务器无法正确解析Policy,也会返回类似过期的错误提示。可以先找个JSON校验工具确认格式合法。清除浏览器缓存或强制刷新:
浏览器可能缓存了旧的Policy和签名参数,哪怕你生成了新的有效参数,页面还是在调用过期的旧数据。试试用Ctrl+Shift+R强制刷新页面,或者直接清除浏览器缓存后再测试上传。
如果还是解决不了,可以把脱敏后的完整Policy内容贴出来,能更精准定位问题。
内容的提问来源于stack exchange,提问作者Jui

