我的chrome扩展程序应该通过HTTP请求从第三方API获取一些远程资源。
public class Locking {
synchronized void methodA() {
System.out.println("inside A , " + Thread.currentThread().getName());
}
public static void main(String[] args) throws InterruptedException {
new Locking().execute();
}
private void execute() throws InterruptedException {
Thread t1 = new Thread(new MyThread());
t1.setName("t1");
Thread t2 = new Thread(new MyThread());
t2.setName("t2");
t1.start();
Thread.sleep(5000);
t2.start();
}
class MyThread implements Runnable {
@Override
public void run() {
while (true) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
methodA();
}
}
}
不幸的是,它引发了以下错误:
拒绝连接到“ https://gloapi.gitkraken.com/v1/glo/boards”,因为它违反了以下内容安全策略指令:“ default-src'self'”。请注意,未明确设置“ connect-src”,因此将“ default-src”用作后备。
经过一番研究,我发现chrome要求将网址包含在清单权限和CSP字符串中。
const getBoards = callback => {
fetch("https://gloapi.gitkraken.com/v1/glo/boards", {
credentials: "include"
})
.then(response => { ... })
.catch(err => { ... });
};
但是这些变化并没有解决第一个错误,而是导致了另一个错误。
在指令'default-src'中忽略了不安全的CSP值“ gloapi.gitkraken.com”。
我的CSP格式是否错误,或者我应该做一些其他事情才能使此GET HTTP请求正常工作。
答案 0 :(得分:1)
经过更多研究,我找到了解决方案。 GitKraken API的URL应该在connect-src
中,而不是default-src
中。所以我的清单现在看起来像这样:
permissions": [ ..., "https://gloapi.gitkraken.com/" ],
"content_security_policy": "default-src 'self'; script-src 'self' 'sha256-[...]'; style-src * 'unsafe-inline'; img-src 'self' data:; connect-src https://gloapi.gitkraken.com/;"
更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src#Syntax