Я пытаюсь использовать pdf.js с запросами диапазона (прогрессивная загрузка pdf-документа), но когда я пытаюсь загрузить pdf-файлы с URL-адресов amazon s3, в консоли появляется эта ошибка:
Отказался получать небезопасный заголовок "Accept-Ranges"
и pdf загружается не через частичное содержимое 206 (запросы диапазона), а 200 и после завершения загрузки pdf просматривается в средстве просмотра.
это пример URL-адреса pdf:
https://kotob.s3.amazonaws.com/book.pdf?Signature=irgVfoAZuPPIp5kpCesni2MzpLo%3D&Expires=1366576877&AWSAccessKeyId=AKIAILBHXSTPUIBTRMSA
любая помощь
Вы видите это с помощью viewer.html или расширения Firefox?
с помощью viewer.html
Я чувствую, что это не удается, потому что вы делаете запрос из разных источников.
Если у вас Chrome, проверьте, работает ли это:
Запустите Chrome с --disable-web-security
(http://stackoverflow.com/questions/3102819/chrome-disable-same-origin-policy). При загрузке файла также добавьте #disableWorker=true
.
Закрытие. Пожалуйста, снова откройте, если это все еще проблема.
Спасибо @mduan за ваш ответ,
но та же ошибка все еще появляется у меня, и чтобы лучше объяснить это, я помещаю средство просмотра в дропбокс, и это общедоступные ссылки, которые вы можете попробовать:
https://dl.dropboxusercontent.com/u/37262502/PDF.js_mduan/pdf.js/web/viewer.html
этот просмотрщик выдает ошибку:
но когда я изменил путь pdf с
DEFAULT_URL=' https://kotob.s3.amazonaws.com/neo.pdf '
к :
DEFAULT_URL='нео.pdf'
поместив файл в тот же каталог средства просмотра, он отлично работает с запросами диапазона:
https://dl.dropboxusercontent.com/u/37262502/PDF.js_mduan/pdf.js/web/viewer2.html
и обратите внимание, что мы делаем политику CORS доступной из любого другого источника для запросов на получение.
Я надеюсь, что это может помочь в объяснении проблемы.
и я прошу прощения за мой поздний ответ,
любая помощь ?
Я смог воспроизвести проблему на локальном сервере. Я заставил его работать, когда сервер, на котором размещен удаленный PDF-файл, возвращает следующие заголовки HTTP:
Access-Control-Allow-Headers: Range
Access-Control-Expose-Headers: Accept-Ranges, Content-Encoding, Content-Length, Content-Range
спасибо @mduan за вашу помощь, теперь это работает.
@mahmoudfelfel : не могли бы вы закрыть эту проблему, если ваша проблема решена? Спасибо! :)
Прокси-файл на языке сценариев (PHP, RoR, Python или другом) — очень простое решение.
Я наткнулся на ту же ошибку. И на мой взгляд это можно/нужно исправить внутри pdf.js.
При загрузке pdf с другого домена, то наш. Предварительные запросы являются обязательными не только для AWS, но и для документов Mozilla , это рекомендуется для каждого запроса CORS.
Тогда вы можете избежать дополнительного экземпляра прокси или чего-то подобного. В качестве быстрого обходного пути я попытаюсь получить запрос pdf (с предварительной проверкой) для себя и просто передать ByteArray в pdf.js.
При загрузке pdf с другого домена, то наш. Предварительные запросы являются обязательными не только для AWS, но и для документов Mozilla, это рекомендуется для каждого запроса CORS.
Запросы предварительной проверки CORS генерируются XHR автоматически без вмешательства пользователя JS.
В качестве быстрого обходного пути я попытаюсь получить запрос pdf (с предварительной проверкой) для себя и просто передать ByteArray в pdf.js.
Звучит как идеальный обходной путь: все нестандартные средства связи (кроме простого HTTP/HTTPS без необходимости CORS) должны обрабатываться пользователем. Если вы уверены, что XHR сможет получить ваш URL-адрес (файл, большой двоичный объект, с CORS, с заголовком аутентификации и т. д.), настройте его правильно.
Закрытие как не исправит.
Я застрял с v0.8.180
, и я знаю, что это старая проблема, хотя, если это поможет кому-то еще, следующая конфигурация CORS корзины S3 исправила ее для меня:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
<ExposeHeader>Accept-Ranges</ExposeHeader>
<ExposeHeader>Content-Range</ExposeHeader>
<ExposeHeader>Content-Encoding</ExposeHeader>
<ExposeHeader>Content-Length</ExposeHeader>
</CORSRule>
</CORSConfiguration>
@jpillora Я пробовал ту же конфигурацию в нашей конфигурации CORS корзины S3. Приложение работает во всех браузерах, а в FireFox ошибок нет. Webkit (Chrome/Safari) по-прежнему выбрасывает Refused to get unsafe header "Accept-Ranges"
.
Я заметил, что Accept-Ranges: bytes
присутствует в http-запросе pdf-файла, но я не вижу, чтобы Content-Range
или Content-Encoding
сохранялись из конфигурации в http-запросе.
Может быть, ему нужно выставить Range в дополнение к Content-Range?
Я дал ему выстрел без везения. Решил поковыряться в этом вопросе.
Рабочую конфигурацию CORS можно найти здесь: https://github.com/mozilla/pdf.js/issues/4530#issuecomment -188059771.
Ключом к выполнению этой работы является «диапазон» Access-Control-Allow-Headers.
В моем случае, кроме потокового аудиоконтента, эти заголовки все равно не работали.
@simoncpu спасибо за ваши выводы!
У меня очень похожая проблема, но для аудиоконтента. В моем случае эти заголовки не будут работать кстати
{ 'Content-Length': 5751405,
'Content-Type': 'audio/mpeg',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
'Access-Control-Allow-Headers': 'Range',
Expires: 0,
Pragma: 'no-cache',
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Accept-Ranges': 'bytes',
'Content-Range': 'bytes 120429-240237/5751405' }
спросил на SF , а также.
Самый полезный комментарий
Я смог воспроизвести проблему на локальном сервере. Я заставил его работать, когда сервер, на котором размещен удаленный PDF-файл, возвращает следующие заголовки HTTP: