15

我正在尝试将 pdf.js 与范围请求一起使用(渐进式加载 pdf 文档),但是当我尝试从 amazon s3 url 加载 pdf 时,此错误出现在控制台中:

-拒绝获得不安全的标题“Accept-Ranges”

并且 pdf 不是通过 206 部分内容(范围请求)加载,而是通过 200 加载,然后在查看器中查看。

这是 pdf 网址的示例:

https://kotob.s3.amazonaws.com/book.pdf?Signature=irgVfoAZuPPIp5kpCesni2MzpLo%3D&Expires=1366576877&AWSAccessKeyId=AKIAILBHXSTPUIBTRMSA

任何帮助

4

4 回答 4

17

像这样在亚马逊上设置 CORS 政策似乎有帮助。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <!-- this part is critical -->
        <AllowedHeader>*</AllowedHeader>
        <ExposeHeader>Accept-Ranges</ExposeHeader>
        <ExposeHeader>Content-Encoding</ExposeHeader>
        <ExposeHeader>Content-Length </ExposeHeader>
        <ExposeHeader>Content-Range</ExposeHeader>
     </CORSRule>
</CORSConfiguration>

但是在我将资源放在 CDN 上之后,这不起作用。无论如何,即使在 CDN 上使用 200,在 S3 上使用 206 部分下载,它似乎也快得多。

于 2013-07-16T07:11:14.663 回答
8

迟到的答案,但是使用 Azure blobs(我知道你问过 AWS,但这让我发疯了想弄清楚所以无论如何都要回答)你必须将 Accept-Ranges 专门设置为允许的标头,只是将其设置为*不起作用。

我使用以下 C# 代码来执行此操作:

var url = new Uri(String.Format("https://yourblob.blob.core.windows.net"));
var credentials = new StorageCredentials("accountname", "key");
var client = new CloudBlobClient(url, credentials);

var corsRule = new CorsRule();

corsRule.ExposedHeaders.Add("Accept-Ranges");
corsRule.ExposedHeaders.Add("Content-Encoding");
corsRule.ExposedHeaders.Add("Content-Length");
corsRule.ExposedHeaders.Add("Content-Type");

corsRule.AllowedHeaders.Add("Accept-Ranges");
corsRule.AllowedHeaders.Add("Content-Encoding");
corsRule.AllowedHeaders.Add("Content-Length");
corsRule.AllowedHeaders.Add("Content-Type");

var serviceProperties = CloudBlobClient.GetServiceProperties();
serviceProperties.Cors.CorsRules.Clear();
serviceProperties.Cors.CorsRules.Add(corsRule);
client.SetServiceProperties(serviceProperties);
于 2014-11-12T15:02:22.717 回答
3

你需要设置

Access-Control-Allow-Headers : Accept-Ranges
于 2013-06-27T20:32:36.067 回答
0

我也有同样的问题。我没有直接传递 url,而是使用 url ="url" 和 withCredentials = true 传递对象。

传递直接 url 时 Cookie 未通过

查看以下内容以了解如何形成 PDF.JS 的对象:使用 ArrayBuffer 或 Blob 而不是 URL 渲染 PDF

于 2017-10-14T05:20:29.567 回答