Chrome отправляет два запроса при загрузке PDF (и отменяет один из них)

Я заметил, что всякий раз, когда вы загружаете PDF файл в хром, он последовательно выполняет два запроса, а ncancels - один из них. Это приводит к тому, что запрос регистрируется дважды в моем веб-приложении, которое не требуется. Есть ли способ заставить Chrome сделать только один запрос для PDF файлов?

Я изучил эту тему совсем немного, и я не нашел достаточного ответа. Близкие ответы указывают на то, что проблема заключается в том, что Chrome ищет значок, но вкладка в сети показывает, что он делает один и тот же запрос дважды, а затем отменяет второй запрос.

Есть ли способ предотвратить выполнение Chrome второго запроса?

Ниже приведена ссылка случайного файла PDF, который я нашел через Google, который при нажатии должен демонстрировать поведение. Я бы опубликовал изображение моей сетевой вкладки в devtools, но это мой первый пост в stackoverflow, и сайт запрещает мне загружать картинку.

https://www.adobe.com/enterprise/accessibility/pdfs/acro6_pg_ue.pdf

Ответ 1

Похоже на ошибку в Chrome: https://bugs.chromium.org/p/chromium/issues/detail?id=587709

Проблема заключается в том, что Chrome, когда он загружает iframe, который возвращает поток PDF, записывает тег "embed" внутри этого iframe, который снова содержит тот же URL-адрес, что и iframe. Это снова вызывает запрос для этого URL-адреса, но Chrome немедленно отменяет его. (см. вкладку сети) Но к тому времени урон будет сделан.

Здесь у нас такая же проблема, и это не происходит в Firefox или IE.

Мы все еще ищем хорошее решение этой проблемы.

Ответ 2

Я все еще пытаюсь найти правильное решение, но в качестве частичного "исправления" на данный момент у вас могут быть две опции

1) установите размещение содержимого в "вложение" в заголовок

что для "inline" заставляет chrome запускать второй отмененный вызов

так, например, вы можете сделать что-то подобное (пример nodejs соответственно)

res.writeHead(200, {
    'Content-Type' : 'application/pdf',
    'Access-Control-Allow-Origin' : '*',
    'Content-Disposition' : 'attachment; filename=print.pdf'
});

К сожалению, это решение заставит браузер сразу загрузить PDF файл вместо того, чтобы сделать его встроенным и что, возможно, не возможно

2) добавление "истекает" в заголовках это решение всегда будет запускать второй отмененный вызов, но он игнорируется сервером

так, например, вы можете сделать что-то подобное (пример nodejs соответственно)

res.writeHead(200, {
    'Content-Type' : 'application/pdf',
    'Access-Control-Allow-Origin' : '*',
    'Content-Disposition' : 'inline; filename=print.pdf',
    'Expires' : new Date(new Date().getTime() + (60000))
});

Ответ 3

У меня была такая же проблема в iframe. Я обернулся расширением PDF Viewer, и проблема исчезла. Я думаю, что расширение загружает файл дважды. В первый раз, чтобы получить размер, второй раз для загрузки с индикатором выполнения (используя размер, собранный в первом запросе)