开发者问题收集

PDF.JS跨域

2017-05-09
2307

我尝试使用 PDF.JS 在浏览器中呈现用户的 PDF。

我们将 PDF 文件存储在 Azure Blob 存储中,并且我们有 CORS 和 SAS 来允许我们的前端直接与 Blob 交互以进行上传/下载。

我已经使用 Chrome、Firefox 和 Safari 测试了我们的设置, Chrome 是唯一无法检索文件的浏览器。我收到的错误与不安全的标头有关,我知道下面的异常是由于无法读取 Content-Range 标头而导致的。

拒绝获取不安全的标头“Content-Encoding”

拒绝获取不安全的标头“Content-Range”

未捕获的 TypeError:无法读取 NetworkManager_onStateChange [as onStateChange] 处的 null 属性“1”

来自 Azure 的响应标头如下所示:

Accept-Ranges:字节 Access-Control-Allow-Origin:* Access-Control-Expose-Headers:Accept-Ranges、Content-Range、Content-Encoding、Content-Length Cache-Control:max-age=1209600 Content-Disposition:附件; filename=tracemonkey.pdf 内容长度:65536 内容范围:字节 0-65535/1016315 内容类型:application/pdf 日期:2017 年 5 月 9 日星期二 15:31:33 GMT Etag:“0x8D49632DD6406EC” 上次修改时间:2017 年 5 月 8 日星期一 16:54:17 GMT 服务器:Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 x-ms-blob-type:BlockBlob x-ms-lease-state:可用 x-ms-lease-status:已解锁 x-ms-request-id:56258985-0001-0062-15d9-c8130c000000 x-ms-server-encrypted: false x-ms-version: 2015-12-11

这是我们的 Blob Storage 设置

有人能帮我找出我需要向 Azure Blob Storage 提供哪些额外配置才能使其在 Chrome 中运行吗?

2个回答

设置此规则,解决同一问题

<Cors>      
      <CorsRule>  
            <AllowedOrigins>http://www.contoso.com, http://www.fabrikam.com</AllowedOrigins>  
            <AllowedMethods>PUT,GET,POST</AllowedMethods>  
            <AllowedHeaders>x-ms-meta-abc,x-ms-meta-data*,x-ms-meta-target*</AllowedHeaders>  
            <ExposedHeaders>x-ms-meta-customheader,x-ms-meta-data*</ExposedHeaders>  
            <MaxAgeInSeconds>200</MaxAgeInSeconds>  
    </CorsRule>  
<Cors>  
Arun Solanki
2018-01-10

所以这有点像 PEBKAC。我会将我的设置留在这里,供其他人使用。我们有一个正在运行的应用程序,每次我们 新建 blob 服务类时,它都会设置 ExposedHeaders=*AllowedHeaders=* 。因此,每次我进入我们的门户更新配置时,应用程序都会跟在我后面将其改回来。

有效的设置如下:

{
    Cors: {
        CorsRule: [
            {
                AllowedOrigins: [‘*’],
                AllowedMethods: [‘GET’, ‘PUT’, ‘DELETE’],
                AllowedHeaders: [‘Accept-Ranges’, ‘Content-Encoding’, ‘Content-Length’, ‘Content-Type’, ‘Range’, ‘Authorization’,'x-ms-blob-content-type', 'x-ms-blob-type', 'x-ms-version'], // x-ms headers for upload
                ExposedHeaders: [‘Accept-Ranges’, ‘Content-Range’, ‘Content-Encoding’, ‘Content-Length’, ‘Content-Type’],
                MaxAgeInSeconds: Constants.timeout,
            },
        ],
    },
}

感谢 @async5 的帮助。

abramz
2017-05-10