Дополнение Firefox: та же политика Origin запрещает чтение удаленного ресурса (причина: невозможно добавить заголовок CORS ‘Origin’)

#asp.net-core #cors #firefox-addon #cross-domain #firefox-addon-webextensions

#asp.net-core #cors #firefox-дополнение #междоменный #firefox-addon-webextensions

Вопрос:

У меня есть расширение, которое я разрабатываю для Chrome, а также загружаю в магазин дополнений Firefox. Недавно я добавил функцию, при которой расширение отправляет междоменный запрос на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 заголовок, поскольку ошибка гласит, что он «не может быть добавлен»:

 $.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 , который я изначально добавил для обработки CORs, когда мне впервые понадобилась поддержка функции для Chrome:

 public void ConfigureServices(IServiceCollection services)
{
    services.AddCors();
    ...
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...
    app.UseCors(_ => _.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
    ...
}
  

Почему мое расширение Chrome разрешает вызов, а Firefox нет? Что еще я мог бы попытаться исправить ошибку, связанную с Firefox?

Ответ №1:

Я неправильно понял, что нужно добавить в раздел manifest.json ‘s permissions . Мне нужно включить шаблон соответствия URL, который я хочу вызвать, а не URL источника.

 "permissions": [
  "https://tf2metrics.azurewebsites.net/*",
  ...
],
  

Я обновил только для https вызовов на моем сайте (не на вызывающем сайте), и теперь он работает в Firefox.