Closed sxbupt closed 6 years ago
在设置bucket的cors时,有设置缓存时间选项,会设置Access-Control-Max-Age来确定响应有效时间,可以自行设置下。
试了下,貌似还是不行~ bucket的跨域设置中,缓存时间(秒)设置为300. 然后用STS返回的临时token去链接,1分钟内连续上传2次,每次上传2个文件,这4次执行put方法都会获取options(fetch)再上传图片(text/plain)
还是说bucket的跨域设置需要一段时间才会生效?
接上面的内容,附上2次上传(2分钟内)时,request method为OPTIONS的response:
第一次
HTTP/1.1 200 OK Server: AliyunOSS Date: Fri, 03 Nov 2017 09:41:07 GMT Content-Length: 0 Connection: keep-alive x-oss-request-id: 59FC39B360097C23595D170B Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, PUT, DELETE, HEAD Access-Control-Allow-Headers: authorization, content-md5, content-type, x-oss-date, x-oss-security-token, x-oss-user-agent Access-Control-Expose-Headers: ETag Access-Control-Max-Age: 300 x-oss-server-time: 19
第二次
HTTP/1.1 200 OK Server: AliyunOSS Date: Fri, 03 Nov 2017 09:41:39 GMT Content-Length: 0 Connection: keep-alive x-oss-request-id: 59FC39D360097C23595E5341 Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, PUT, DELETE, HEAD Access-Control-Allow-Headers: authorization, content-md5, content-type, x-oss-date, x-oss-security-token, x-oss-user-agent Access-Control-Expose-Headers: ETag Access-Control-Max-Age: 300 x-oss-server-time: 0
查阅了下相关资料 https://www.w3.org/TR/cors/#preflight-result-cache-0 https://stackoverflow.com/questions/12013216/how-to-apply-cors-preflight-cache-to-an-entire-domain 这个预检是和url相关的,但是分片上传的话每片的url都不一样,所以每次都会发送options请求。我试了下如果不使用分片上传(上传文件大小小于1m),相当于每次的url都一样,就能触发这个preflight result cache。
多谢回复~ 调用的是上传单个文件的方法put(),并非分片方法multipartUpload()~ 我看了下,上传的时候put*(name, file[, options])中的name参数是放到url中传递的,因而造成了url每次都不相同。。这个不知道能否换到body中传递呢?否则对本方法而言,Access-Control-Max-Age 就是个无效设置。。
确实有这个问题,后面需要我在和 OSS 服务端确认下这个问题, 有进展在这里同步下。
oss后台接口是restful api http put 是针对幂等性原则, put 方式 请求url 代表的是资源,所以这个是不会做修改的。 如果需要避免这个问题你可以使用 PostObject 表单直传方式 https://help.aliyun.com/document_detail/31988.html
对于普通的需要传一次OPTIONS预检的跨域调用,一旦服务器通过了”预检”请求,以后每次浏览器正常的CORS请求,就都跟简单请求一样,不会再预检了。。 但是对于alioss.put*(name, file[, options])这个方法来说,同时调用多次(一次上传多个文件)的话,每上传1个图片都要预检一次再进行上传,也就是说每个图片需要连2次服务器才能传上去,这个是不是有问题呢?