【问题标题】:Get range of bytes from s3 without OPTIONS request在没有 OPTIONS 请求的情况下从 s3 获取字节范围
【发布时间】:2015-12-06 06:12:19
【问题描述】:

我使用Amazon S3 作为我的文件的存储,它作为子域连接。

例如:基域是site.com,s3存储是s3.site.com。有时我想通过 ajax GET 请求获取文件的一部分(字节范围):

$.ajax({
   type: 'GET', 
   url: "//s3.site.com/1.py", 
   headers: {"Range": "bytes=50-100"}
}).done(function( data ) {
  alert(data);
});

它工作正常,我得到响应...但是浏览器会生成一些带有 OPTIONS 类型的寄生请求。据我所知,它是根据CORS policy 发生的。我可以避免吗?

【问题讨论】:

    标签: amazon-web-services amazon-s3 cors


    【解决方案1】:

    不,你无法避免。这是标准和正确的行为。

    添加Range: 标头会更改GET 请求,从而触发CORS 飞行前检查,从而发送OPTIONS 请求。

    该请求不再符合“简单”的条件,并且需要进行预检,因为该请求是跨域的。

    同源(非跨源)请求必须具有完全相同的方案、主机和端口。子域也不例外。

    当且仅当它们相同时,两个起源是“相同的”。

    https://www.rfc-editor.org/rfc/rfc6454#page-11

    【讨论】:

    • 对子域的请求也是跨域的吗?例如:从 site.com 到 s3.site.com。
    • @TyVik 是正确的。起源没有等级权威的概念。使用 RFC 引用更新了答案。
    猜你喜欢
    • 2012-11-20
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 2020-12-12
    相关资源
    最近更新 更多