在Chrome中,当我尝试访问下面错误中显示的xml链接时,我收到此错误。
不安全尝试从包含网址http://build:8080/view/application/job/Project/Report/SourceMonitor.xslt的网址加载网址http://build:8080/view/application/job/Project/Report/SourceMonitor-details.xml。域,协议和端口必须匹配。
我可以看到,域名,协议和端口是相同的 这些文件都托管在Jenkins CI Web服务器上,因此它不是因为它是本地文件 当我在Internet Explorer中打开xml文件时,它可以正常工作 xml文件使用下面显示的xml标记链接到xslt。
<?xml-stylesheet type="text/xsl" href="SourceMonitor.xslt"?>
我在这里缺少什么?
答案 0 :(得分:3)
我偶然发现了内部Jenkins基础架构存在同样的问题,但是根据其文档运行Jenkins Docker镜像,并通过管道作业生成XSLT文件和引用该XSLT文件的XML文件,可以轻松地重现它。通过节点分配节点中的工作区文件夹打开XML:开始将失败,Chrome将按照问题所述输出错误。
这不仅限于Chrome,因为Firefox也会报告错误,如下所示:
加载样式表时出错:加载XSLT样式表
时发生网络错误http://build:8080/view/application/job/Project/Report/SourceMonitor.xslt
解决这个问题是配置Jenkins使用的内容安全策略(CSP)。内容安全策略的工作原理如下所述:Stackoverflow: How does Content Security Policy work?。
Jenkins的默认CSP配置非常严格,不允许从引用它的文档加载XSL文件。 Jenkins wiki页面上记录了默认的CSP配置以及如何更改它。
根据CSP文档(CR-CSP-20121115第4.2章script-src),XSL样式表被视为脚本,我必须将script-src 'self';
和sandbox allow-same-origin;
添加到默认配置中以简化XSL样式表工作。我是通过运行:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","sandbox allow-same-origin; default-src 'none'; img-src 'self'; style-src 'self'; script-src 'self';")
使用System.setProperty
暂时更改CSP,直到下次重新启动,它都记录在Jenkins wiki页面上。
查看Chrome或其他浏览器报告的任何其他错误,因为XSLT文件中的内容可能还要求您放宽其他CSP规则,例如允许解释样式标记。