Введение
Мы проводим интеграционные тесты с Google Chrome.Некоторые тесты загружают документы, и эти тесты иногда случайно не работают.После расследования мы обнаружили, что Chrome блокирует нашу загрузку, и это приводит к сбою теста, поскольку он ожидает успешную загрузку файла:
При возникновении проблемы мы были сбиты с толку, потому что внаши тесты локальной среды были стабильны и никогда не давали результатов.
Минимальный воспроизводимый пример
Мы создаем минимальный воспроизводимый пример для этой проблемы.Он содержит простой Python HTTP-сервер, который обслуживает один пустой файл document.xml
и возвращает его со следующими заголовками:
Content-type: application/xml
Content-disposition: attachment; filename=document.xml
Когда мы запускаем Google Chrome и пытаемся загрузить этот файл, он просто блокирует процесс с уведомлением This type of file can harm your computer...
.
Если мы попытаемся снова щелкнуть ссылку, Chrome внезапно загрузит файл без каких-либо предупреждений (вы можете увидеть это на скриншоте).
Наши попытки решить проблему
Мы пытаемся отключить это поведение с помощью параметра командной строки --safebrowsing-disable-download-protection
, а также пытаемся установить --safebrowsing.enabled=false
, но ничего не меняется.
Кроме того, мы пытаемся вручную включить / отключить некоторые флаги из chrome://flags
:
#disallow-unsafe-http-downloads
- установить на Отключено #allow-insecure-localhost
- установить на Включено
Но ситуация все та же.
После этого мы смотрим журналы Chrome, о которых сообщалось со следующими параметрами командной строки: --enable-logging -v=2
, но прямой подсказки о решении проблемы нет.проблема:
network_delegate.cc(32) NetworkDelegate::NotifyBeforeURLRequest: http://localhost:8000/document.xml
network_delegate.cc(32) NetworkDelegate::NotifyBeforeURLRequest: http://localhost:8000/document.xml
network_delegate.cc(32) NetworkDelegate::NotifyBeforeURLRequest: http://localhost:8000/document.xml
network_delegate.cc(32) NetworkDelegate::NotifyBeforeURLRequest: http://localhost:8000/document.xml
network_delegate.cc(32) NetworkDelegate::NotifyBeforeURLRequest: http://localhost:8000/document.xml
prescient_networking_dispatcher.cc(19) Prefetch DNS: localhost
prescient_networking_dispatcher.cc(19) Prefetch DNS: localhost
prescient_networking_dispatcher.cc(19) Prefetch DNS: localhost
loader_util.cc(45) To buffer: http://localhost:8000/document.xml
navigator_impl.cc(140) Failed Provisional Load: http://localhost:8000/document.xml, error_code: -3, error_description: The webpage at <strong jscontent="failedUrl"></strong> might be temporarily down or it may have moved permanently to a new web address., showing_repost_interstitial: 0, frame_id: 4
prescient_networking_dispatcher.cc(19) Prefetch DNS:
network_delegate.cc(32) NetworkDelegate::NotifyBeforeURLRequest: https://sb-ssl.google.com/safebrowsing/clientreport/download?key=[some key]
network_delegate.cc(32) NetworkDelegate::NotifyBeforeURLRequest: https://sb-ssl.google.com/safebrowsing/clientreport/download?key=[some key]
network_delegate.cc(32) NetworkDelegate::NotifyBeforeURLRequest: https://sb-ssl.google.com/safebrowsing/clientreport/download?key=[some key]
network_delegate.cc(32) NetworkDelegate::NotifyBeforeURLRequest: https://sb-ssl.google.com/safebrowsing/clientreport/download?key=[some key]
Заключение
Наконец, у нас возникла проблема защиты загрузки с Google Chrome, который работает только при первой попытке загрузки.Такое поведение может быть воспроизведено после перезапуска Chrome (примечание: предпочтения пользовательских данных остаются без изменений после перезапуска, поэтому это странное поведение возникает только из-за внутреннего состояния Chrome).
Может кто-нибудь описать это странное поведение Chrome и предложить некоторыеРешение этой проблемы?
Наша конфигурация: Google Chrome 69.0.3497.92
, Windows Server 2012 R2, version 6.3