Существует три версии CSP (https://content-security-policy.com). За исключением Inte rnet Explorer, все современные браузеры поддерживают как минимум версию 2. Браузеры, которые реализуют только до версии 2 (Firefox и Safari - примеры), используют report-uri. Браузеры, поддерживающие уровень 3 (например, Chrome), используют функцию report-to. Если браузер поддерживает уровень 3, он будет использовать report-to и игнорировать report-uri. Если браузер поддерживает только уровень 2, report-to, вероятно, вызовет предупреждение в консоли (Firefox отображает предупреждение «Политика безопасности содержимого: не удалось обработать неизвестную директиву report-to»), но не вызовет ошибка.
Имея это в виду, вы должны в настоящее время включить и report-uri, и report-to и позволить браузеру разобраться в этом.
Начиная с уровня 3, отчетность реализуется с помощью API отчетности ( https://w3c.github.io/reporting). В настоящее время это черновик, поэтому браузеры могут реализовать его по-другому. Старое объяснение того, как Chrome реализует этот API, можно найти здесь: https://developers.google.com/web/updates/2018/09/reportingapi (я не смог найти более новую версию, и некоторые примеры больше не работают, потому что Chrome был изменен с момента написания этого документа). Одна особенная информация из этого документа была очень полезной: «Отчеты доставляются из вашего приложения вне диапазона, то есть браузер контролирует отправку отчетов на ваши серверы». На уровне 2 CSP отчеты отправляются немедленно, а на уровне 3 CSP отчеты отправляются на усмотрение браузера. Это означает, что вы можете не сразу увидеть отчет. Когда я впервые внедрил CSP, я попытался проверить и предположил, что отчет будет отправлен немедленно. Поэтому, когда я использовал Firefox, я видел отчет, а когда я использовал Chrome, я этого не делал (мне приходилось ждать в среднем 30 - 60 секунд).
В качестве инструмента тестирования в chrome Вы можете go до chrome: / /net -экспорт и https://netlog-viewer.appspot.com для отслеживания отчетов. Go до net -экспорт и выберите «Начать запись на диск» (я просто оставляю параметры по умолчанию). Выберите место для сохранения файла журнала. Затем go на ваш веб-сайт, который должен отправить отчет в случае нарушения CSP. После того, как вы это сделали (и проверили консоль, чтобы убедиться в нарушении), go back и net -export и выберите «Stop Logging». На этом этапе вы можете просмотреть содержимое файла журнала, перейдя по второй предоставленной мной ссылке (netlog-viewer). Откройте файл, и тогда у вас будет много вариантов в меню слева. Тебя интересует «Отчетность». В правой части экрана вы увидите «Отчеты в очереди». Предполагая, что отчет еще не был отправлен, вы увидите здесь нарушение csp (если отчет уже был отправлен, вы не будете).
Я сказал все это, чтобы сказать это, я полагаю, что ваш Код в порядке. Я использовал его на одном из своих сайтов, и он работал (я изменил URL конечной точки, но все остальное было таким же). Я считаю, что ваша проблема пытается получить отчет при использовании localhost. Я не смог найти никакой документации, чтобы подтвердить это утверждение (если кто-то еще, пожалуйста, добавьте комментарий), но я также не смог получить отчет при использовании localhost. Я подумал, что это может быть проблема с сертификатом безопасности (на основании этой статьи API отчетов доступен только в безопасном контексте: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts/features_restricted_to_secure_contexts), но я настроил локальный хост для использования https, а отчет все еще не был послал. Я вижу отчет в инструменте отчетности Chrome, но он никогда не отправляется.
Надеюсь, это поможет и что кто-то еще может добавить к этому ответу.