Firefox add-on: 同源策略不允许读取远程资源(原因:无法添加 CORS header ‘Origin’)
Firefox add-on: The Same Origin Policy disallows reading the remote resource (Reason: CORS header ‘Origin’ cannot be added)
我有一个为 Chrome and also upload to Firefox's add-on store. I recently added a feature where the extension makes a cross-domain request to https://tf2metrics.azurewebsites.net 开发的扩展,可以下载一些 json 数据。
来自分机的示例调用:
https://tf2metrics.azurewebsites.net/api/users/76561198142328193,76561198200094518,76561198090551717
相同的源代码在 Chrome 上运行良好,但不适用于 Firefox 用户。
在 Firefox 浏览器控制台中,此调用导致:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://tf2metrics.azurewebsites.net/api/users/76561198142328193,76561198200094518,76561198090551717. (Reason: CORS header ‘Origin’ cannot be added).
我的内容脚本在 https://tf2center.com/lobbies/* 上运行,只有一行 jQuery:
$.get(url, function (data) {
// do stuff
});
我尝试添加 Origin
header,因为错误提示它“无法添加”:
$.ajaxSetup({
headers: {
'Origin': "https://tf2center.com"
}
});
此扩展在 Firefox 上仍然不起作用,并且在 Chrome 上此调用也失败。错误是:
Refused to set unsafe header "Origin"
所以我删除了它。我浏览了一下,看到添加
"permissions": [
"*://*.tf2center.com/*",
...
],
我的 manifest.json
可能会解决问题,但这也不起作用。
此处供参考的是 ASP.NET Core 3.1 Startup.cs
代码,当我第一次需要支持 Chrome:
的功能时,我最初添加该代码来处理 COR
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseCors(_ => _.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
...
}
为什么我的 Chrome 扩展允许调用而 Firefox 不允许?我还能尝试什么来修复 Firefox-specific 错误?
我误解了需要添加到 manifest.json
的 permissions
部分的内容。我需要包含我希望调用的 URL 匹配模式,而不是来源的 URL.
"permissions": [
"https://tf2metrics.azurewebsites.net/*",
...
],
我专门更新为仅 https
调用我的站点(不是调用站点),它现在可以在 Firefox 上运行。
我有一个为 Chrome and also upload to Firefox's add-on store. I recently added a feature where the extension makes a cross-domain request to https://tf2metrics.azurewebsites.net 开发的扩展,可以下载一些 json 数据。
来自分机的示例调用:
https://tf2metrics.azurewebsites.net/api/users/76561198142328193,76561198200094518,76561198090551717
相同的源代码在 Chrome 上运行良好,但不适用于 Firefox 用户。
在 Firefox 浏览器控制台中,此调用导致:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://tf2metrics.azurewebsites.net/api/users/76561198142328193,76561198200094518,76561198090551717. (Reason: CORS header ‘Origin’ cannot be added).
我的内容脚本在 https://tf2center.com/lobbies/* 上运行,只有一行 jQuery:
$.get(url, function (data) {
// do stuff
});
我尝试添加 Origin
header,因为错误提示它“无法添加”:
$.ajaxSetup({
headers: {
'Origin': "https://tf2center.com"
}
});
此扩展在 Firefox 上仍然不起作用,并且在 Chrome 上此调用也失败。错误是:
Refused to set unsafe header "Origin"
所以我删除了它。我浏览了一下,看到添加
"permissions": [
"*://*.tf2center.com/*",
...
],
我的 manifest.json
可能会解决问题,但这也不起作用。
此处供参考的是 ASP.NET Core 3.1 Startup.cs
代码,当我第一次需要支持 Chrome:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseCors(_ => _.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
...
}
为什么我的 Chrome 扩展允许调用而 Firefox 不允许?我还能尝试什么来修复 Firefox-specific 错误?
我误解了需要添加到 manifest.json
的 permissions
部分的内容。我需要包含我希望调用的 URL 匹配模式,而不是来源的 URL.
"permissions": [
"https://tf2metrics.azurewebsites.net/*",
...
],
我专门更新为仅 https
调用我的站点(不是调用站点),它现在可以在 Firefox 上运行。