Подтвердить что ты не робот

Отказано, чтобы получить небезопасный заголовок "Accept-Ranges" из pdf.js с URL-адресами amazon

Я пытаюсь использовать pdf.js с запросами диапазона (прогрессивная загрузка PDF-документа), но когда я пытаюсь загрузить pdf файлы с URL-адресов amazon s3, эта ошибка появляется в консоли:

-Убедитесь, чтобы получить небезопасный заголовок "Accept-Ranges"

и PDF не загружается через 206 частичное содержимое (запросы диапазона), но 200, а затем просматривается в средстве просмотра.

это пример pdf-url:

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

любая помощь

4b9b3361

Ответ 1

Настройка политики CORS на Amazon, похоже, помогает.

<?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, это не сработает. В любом случае, это кажется намного быстрее даже с 200 на CDN, тогда с 206 частичной загрузкой на S3.

Ответ 2

Поздний ответ, но с Azure blobs (я знаю, что вы спрашивали об AWS, но это сводило меня с ума, пытаясь понять, что так ответит), вам нужно установить Accept-Ranges специально как разрешенный заголовок, просто установив его на * не работает.

Для этого я использовал следующий код С#:

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);

Ответ 3

Вам нужно установить

Access-Control-Allow-Headers : Accept-Ranges