拒绝使用amazon网址从pdf.js获取不安全标题"Accept-Ranges"错误

Mah*_*fel 14 javascript pdf amazon-ec2 pdf.js

我正在尝试使用带有范围请求的pdf.js(逐步加载pdf文档),但是当我尝试从amazon s3 urls加载pdf时,控制台中会出现此错误:

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

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

这是pdf url的一个例子:

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

任何帮助

drK*_*eso 16

像这样在亚马逊上设置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>
Run Code Online (Sandbox Code Playgroud)

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

  • 我在Webkit中尝试过这种配置和许多类似的配置而没有运气.Safari和Chrome仍然希望抛出不安全的"Accept-Ranges"错误. (2认同)

JMK*_*JMK 7

迟到的答案,但是使用Azure blob(我知道你问过AWS,但是这让我疯狂地试图弄清楚如此回答)你必须将Accept-Ranges专门设置为Allowed Header,只是将其设置为*不起作用.

我使用以下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);
Run Code Online (Sandbox Code Playgroud)


top*_*ara 3

你需要设置

Access-Control-Allow-Headers : Accept-Ranges
Run Code Online (Sandbox Code Playgroud)