При загрузке на двух отдельных веб-сайтах виджет iframe выдает ошибку CSP
Я занимаюсь разработкой виджета iframe, который можно добавить на несколько веб-сайтов. Я обслуживаю HTML виджета с необходимыми заголовками CSP следующим образом
let widget = (req, res, next) => {
if(!req.headers.referer){
return res.status(404).send(); //file is meant to be loaded as iframe only
}
let ancestor = Url.parse(req.headers.referer);
ancestor = ancestor.protocol+"//"+ancestor.host+(ancestor.port?":"+ancestor.port:"") + "/";
res.set("X-Frame-Options", "ALLOW-FROM " + ancestor );
res.set("Content-Security-Policy", "frame-ancestors "+ancestor);
res.sendFile(__dirname + "/widget.html");
};
Когда я загружаю два разных веб-сайта, которые содержат один и тот же iframe, второй веб-сайт показывает ошибку CSP
Refused to display 'https://my.website.com/widget' in a frame because an ancestor violates the following Content Security Policy directive: "frame-ancestors <first_loaded_website>".
Заголовок CSP предка фрейма второго загруженного веб-сайта интерпретируется браузером как первый веб-сайт. Но я проверил вкладку сети инструментов разработчика. Правильные заголовки получены на обоих сайтах, так как
X-Frame-Options: ALLOW-FROM https://<requesting_website>/
Это действительно сбивает с толку. Что я делаю неправильно? Я проверял это на Chrome и Firefox