Заголовок Access-Control-Allow-Origin полностью игнорируется FireFox - PullRequest
0 голосов
/ 27 мая 2020

Я настроил свой веб-сайт (под управлением IIS8.5) для отправки заголовка ответа для CORS на поддомен за пределами моего основного домена, и ответ заголовка получает Firefox нормально. Все плагины, блокировщики рекламы и т. Д. c отключены, и я вижу заголовок в инспекторе DOM. Я пробовал:

Access-Control-Allow-Origin: * 
Access-Control-Allow-Origin: https://services.mywebsite.com
Access-Control-Allow-Origin: http://services.mywebsite.com
Access-Control-Allow-Origin: null
Access-Control-Allow-Origin: "null"

Я подтвердил, что сертификат SSL работает нормально (это сертификат с подстановочным знаком для * .mywebsite.com от Secti go, и я проверил, что весь сертификат path работает правильно)

Нет других заголовков ответа, кроме: X-Frame-Options: SAMEORIGIN, однако я удалил его с тем же результатом. Сайт предшествует CORS на несколько лет (ASP. NET Webforms), и я не могу найти других настроек, которые помешали бы Firefox подтверждать этот заголовок ответа.

Я прочитал десятки сообщений здесь (обычно у кого-то был самоподписанный сертификат или кто-то что-то забыл), но я не понимаю, что не так?

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://services.mywebsite.com/api/geodata/. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

Это абсолютно НЕ ПРОПУСТИТЕ! WTF Firefox?

Выдергивание волос здесь. Кто-нибудь?

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8
Expires: -1
Server: Microsoft-IIS/8.5
X-Content-Type-Options: nosniff
Access-Control-Allow-Origin: https://services.mywebsite.com
X-Frame-Options: SAMEORIGIN
Date: Wed, 27 May 2020 08:28:05 GMT

Кто-то еще предложил добавить модуль CORS в IIS. Я сделал, а затем добавил в свой файл web.config следующее (в разделе system.webserver):

<cors enabled="true">
    <add origin="*" allowed="true" >
        <allowHeaders allowAllRequestedHeaders="true" />
    </add>
</cors>

No Joy! Такое же сообщение от Firefox (и Chrome) - оба браузера полностью игнорируют эту директиву. Может ли это быть ошибкой в ​​Mozilla?

-------------------- подробнее -------------- -------------------

Я думаю, проблема в следующем jquery скрипте с моим ЧАТОМ (который выполняет вызов API) . Он работал 12 лет (и все еще работает в старых версиях), поэтому я хочу посмотреть, что было устаревшим. Я подозреваю, что SignalR может быть проблемой и сбивать с толку браузер (ы) - поскольку SignalR делает запрос (не уверен, хотя - просто догадываюсь). Извините, что не упомянул об этом раньше.

        $.connection.hub.start()
        .done(function () {
            var existingChatId = getExistingChatId(chatKey);
            $.get("https://services.mywebsite.com/api/geodata/", function (response) {
                myHub.server.logVisit(document.location.href, document.referrer, response.city_name, response.region_name, response.country_name, existingChatId);
            }, "json");
        })
        .fail(function () { chatRefreshState(false); });

------------------- после использования подстановочных знаков для заголовков CORS --------------

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8
Expires: -1
Server: Microsoft-IIS/10.0
X-Content-Type-Options: nosniff
X-SourceFiles: =?UTF-8?B?RDpcU2l0ZXNcaWNhcnBldGlsZXMyXFdlYlxzaWduYWxyXHN0YXJ0?=
X-Powered-By: ASP.NET
X-Frame-Options: SAMEORIGIN
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
Access-Control-Allow-Headers: *
Date: Sun, 07 Jun 2020 10:31:35 GMT

Все равно радости нет - заголовки есть. Должна быть ошибка в веб-формах ASP. NET, IIS, SignalR (обратите внимание, что это НЕ MVC). Пора обновить этот сайт для этого клиента. В любом случае, никто больше не поддерживает веб-формы - он мертв.

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Невозможно выполнять междоменные запросы с помощью SignalR и быть совместимым с CORS. Нет никакого способа обойти эту проблему. Просто переместите свою услугу на свой www.yourwebsite.com и сохраните волосы!

0 голосов
/ 07 июня 2020

Вы можете установить cors зависимость:

«Microsoft.As pNet .Cors»: «6.0.0-rc1-final»

Добавьте службы CORS в Startup. cs:

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

И включить его для указанного c домена:

public void Configure(IApplicationBuilder app)
{
    app.UseCors(builder =>
        builder.WithOrigins("http://example.com"));
}

Другой вариант - включить cors для указанного c метода:

public class HomeController : Controller
{
    [EnableCors("AllowSpecificOrigin")] 
    public IActionResult Index()
    {
        return View();
    }
}

Или включите его для определенного c контроллера:

[EnableCors("AllowSpecificOrigin")]
public class HomeController : Controller
{
}

Если вы используете MVC 3, и у вас есть файл Global.asax, вы можете использовать метод:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", allowedOrigin); 
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET,POST");
}

Если вы используете WebApi, вы можете использовать:

Install-Package Microsoft.AspNet.WebApi.Cors

И зарегистрируйте cors, используя:

public static void Register(HttpConfiguration config)
{
    // New code
    config.EnableCors();
}

И:

[EnableCors(origins: "http://example.com", headers: "*", methods: "*")]
public class TestController : ApiController
{
    // My methods...
}

Или включить его для всего проекта:

public static void Register(HttpConfiguration config)
{
    var corsAttr = new EnableCorsAttribute("http://example.com", "*", "*");
    config.EnableCors(corsAttr);
}

ASP. Net веб-формы

Response.AppendHeader("Access-Control-Allow-Origin", "*"); 

Также попробуйте:

Response.AppendHeader("Access-Control-Allow-Methods","*");

Попробуйте добавить прямо в веб-конфигурацию:

<system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Methods" value="*" />
       <add name="Access-Control-Allow-Headers" value="Content-Type" />
     </customHeaders>
   </httpProtocol>
</system.webServer>
0 голосов
/ 01 июня 2020

У вас есть app.UseCors() в конвейере промежуточного программного обеспечения до app.MapSignalR()?

Вы можете начать с app.UseCors(CorsOptions.AllowAll), чтобы проверить, будет ли он работать, а затем добавьте свой собственный домен.

app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
...