我正在尝试将 pdf.js 与范围请求一起使用(渐进式加载 pdf 文档),但是当我尝试从 amazon s3 url 加载 pdf 时,此错误出现在控制台中:
-拒绝获得不安全的标题“Accept-Ranges”
并且 pdf 不是通过 206 部分内容(范围请求)加载,而是通过 200 加载,然后在查看器中查看。
这是 pdf 网址的示例:
任何帮助
我正在尝试将 pdf.js 与范围请求一起使用(渐进式加载 pdf 文档),但是当我尝试从 amazon s3 url 加载 pdf 时,此错误出现在控制台中:
-拒绝获得不安全的标题“Accept-Ranges”
并且 pdf 不是通过 206 部分内容(范围请求)加载,而是通过 200 加载,然后在查看器中查看。
这是 pdf 网址的示例:
任何帮助
像这样在亚马逊上设置 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 部分下载,它似乎也快得多。
迟到的答案,但是使用 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);
你需要设置
Access-Control-Allow-Headers : Accept-Ranges
我也有同样的问题。我没有直接传递 url,而是使用 url ="url" 和 withCredentials = true 传递对象。
传递直接 url 时 Cookie 未通过
查看以下内容以了解如何形成 PDF.JS 的对象:使用 ArrayBuffer 或 Blob 而不是 URL 渲染 PDF