javascript - chrome扩展中的CORS
问题描述
我正在制作 chrome 扩展,我需要向另一个域发出跨域 POST 请求。Content Script
代码在有一些限制的 Chrome 环境中运行。
我将我的代码注入到特定站点中的域看起来像service.site.com
,我必须向域发出请求api.site.com
来自的响应标头api.site.com
看起来像
access-control-allow-credentials: true
access-control-allow-headers: Authorization, Content-Type, X-Requested-With, Accept
access-control-allow-methods: GET, POST, PUT, DELETE, OPTIONS
access-control-allow-origin: https://service.site.com
如您所见,另一个域允许来自service.site.com
. 这意味着我的请求标头的Origin标头应包含该 Origin。
但是 chrome 扩展为我添加了一个 Origin 标头!
现在它发送一个api.site.com
带有标头的请求
Origin: chrome-extension://oeminagccdkclchnelmkbkcpcfnjgofj
并api.site.com
可能阻止它?我没有收到任何回复。请求崩溃,我看不到任何错误,也没有响应数据。
当然我在清单文件中添加了权限:
"permissions": [
"*://service.site.com/*",
"*://api.site.com/*"
],
它仍然不起作用。Chrome 扩展程序继续更改 Origin 标头并且服务器没有响应。或者它有响应但我的浏览器阻止了它?我查不出来。如果我在 WEB 脚本环境中运行该请求,它运行良好,我会看到来自服务器的响应。但我仍然必须在内容脚本环境中运行它。
我什至尝试在 web 脚本环境中注入带有 post 请求的函数并从内容脚本环境中调用它,但如果我这样做,它会添加 Origin 标头并且它不起作用。
我还尝试使用 Chrome 扩展功能更改响应标头,希望这会有所帮助
const responseListener = function(details){
const out = [];
details.responseHeaders.forEach(item => {
if (item.name.toLowerCase() !== 'access-control-allow-origin') {
out.push(item);
}
});
out.push({name: 'access-control-allow-origin', value: '*'});
return {responseHeaders: out};
};
chrome.webRequest.onHeadersReceived.addListener(responseListener, {urls: ["*://*/*"]},
["blocking", "responseHeaders"]);
现在它显示api.site.com
返回我的标题,但它仍然没有帮助。
解决方案
推荐阅读
- java - 如何使用 Javax.mail 读取邮件正文中的 HTML 文本
- excel - 在 Excel 中创建唯一标识符,链接不同交货的相同记录
- python - 在谷歌 colab 中安装 python .egg
- python - 提取数组中的向上/向下趋势
- swift - 为什么 Swift Enum 生成对象,内部变量不能更改?
- python - 如何通过python字典中的值过滤sqlalchemy表
- javascript - JS嵌套reduce
- javascript - Javascript 自定义元素的 oninput 函数问题
- c++ - C ++无法弄清楚为什么它会给出误报(新手)
- azure-cosmosdb - 在没有完整投影的情况下查询 cosmos db 的嵌套值时是否需要维护文档层次结构