Отказано, чтобы получить небезопасный заголовок "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
любая помощь
Ответы
Ответ 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
Ответ 4
У меня тоже такая же проблема. Вместо того, чтобы напрямую передавать URL-адрес, я передал объект с url = "url" и withCredentials = true.
Cookie не передавался при передаче прямого URL
chk ниже, как сформировать объект, который он
PDF.JS: рендеринг PDF с использованием ArrayBuffer или Blob вместо URL