Мы заранее не знаем, с какого сайта может загружаться контент?
Знаем, но не всегда. У сайта может быть множество поддоменов, в том числе и динамических.
host-source VS 'self'
Вместо 'self' браузер подставляет протокол, хост(домен) и номер порта от источника происхождения (текущего URL) страницы.
Если у вас сайт доступен как: http://
domain.com, https://
domain.com, http://
www.domain.com, https://
www.domain.com, http://
www.domain.com:8081 - 'self' всё это покроет:
зайдёте на http://
www.domain.com:8080/page.html - 'self' будет равен http://
www.domain.com:8080, и тп.
Иначе вместо 'self' вам придётся перечислять все варианты имён хостов(включая поддомены) со схемами/протоколами и номерами портов.
почему ни host-source, ни 'self' в качестве источника не включают «подмножество» 'unsafe-inline', т.е. контент, встроенный в загружаемую страницу?
Потому, что такой встроенный скрипт может появиться на странице без ведома вебмастера. Его может вставить вредоносный браузерный плагин, другой скрипт (например, виджет погоды), его может вставить интернет-провайдер. Такой инлайн-скрипт может появиться на странице в результате XSS-уязвимости.
Content Security Policy от этого и защищает.