суббота, 29 мая 2021 г.

Failed to find a valid digest in the 'integrity' attribute for resource

Сбросили проблему с нерабочим поиском на статическом сайте. В консоли браузера несколько раз появляется ошибка "Failed to find a valid digest in the 'integrity' attribute for resource". В коде страницы для ресурсов используется механизм integrity и если хеш не сходится, то браузер не дает использовать "поддельный" ресурс. Осталось определить где его "подделали"...

Для начала проверяю один из проблемных файлов, используя подход который описан тут.

$ curl -fsSL https://domain/path/to/suspicios.js | openssl dgst -sha384 -binary | openssl base64 -A

Результат действительно отличается от того, что указано в HTML. Сайт статический и после сборки контент хранится в Google Cloud Storage бакете и очень маловероятно, что там что-то может поменяться после сборки проекта. Но на всякий случай проверяю

$ gsutil cat gs://site-bucket-name/path/to/suspicios.js | openssl dgst -sha384 -binary | openssl base64 -A

Хеш правильный, что как бы не удивительно. Сайт использует Cloudflare и следовательно содержимое файла поменялось где-то внутри CDN. Немного покопался в настройках Cloudflare и нашел включенный Auto Minify

После выключения минификации ошибки в консоли пропали и поиск заработал.

На мой взгляд польза от минификации "на лету" довольно сомнительная (при условии использования сжатия при передаче) и часто приводит к поломанным скриптам. Если очень нужно использовать минификацию, то стоит это делать на этапе сборки проекта и обязательно с регрессионным тестированием. Не стоит полагаться на работу "магиии" у третьей стороны, поведение которой может поменяться со временем.

Комментариев нет:

Отправить комментарий