使用直接表单上传至AWS S3时,单张图片为何触发OPTIONS与PUT两次请求?
为什么单张图片上传到S3会触发两次请求?
这其实是浏览器的CORS预检机制在搞事情,完全是正常的安全流程,我给你掰扯明白:
- OPTIONS请求是干啥的? 它就是浏览器发起的「提前探路」请求——在真正发PUT上传请求之前,浏览器会先问S3服务器:“我接下来要发个PUT请求传文件,你允许我这么操作不?”这个请求会带上你这次上传用的请求方法、自定义头部这些信息,用来确认S3的CORS规则是否放行这个跨域请求。
- 为啥非得搞这个预检? 因为PUT请求属于CORS规范里的「非简单请求」(简单请求一般是GET/HEAD/POST,而且头部都是Content-Type这类常见的)。浏览器出于安全考虑,必须先通过OPTIONS确认服务器同意接收这类请求,才会把真正的上传请求(也就是PUT)发出去。
- 和S3的CORS配置有啥关系? 你肯定已经给S3桶配置过CORS规则了(允许PUT方法、指定了允许的来源之类的),不然预检请求直接就失败了,后面的PUT根本发不出去。这个OPTIONS就是浏览器和S3之间的一次“安全握手”。
顺便提一句:这不光是S3的专属操作,任何支持跨域的服务,只要遇到非简单请求,浏览器都会走这个预检流程,是W3C规定的标准安全机制。
内容的提问来源于stack exchange,提问作者Kiow
相关产品推荐
相关产品推荐

