【问题标题】:CORS headers present on /connect but not /negotiateCORS 标头存在于 /connect 但不存在于 /negotiate
【发布时间】:2021-09-07 14:03:29
【问题描述】:

我将 SignalR 与 websockets 一起使用,我在 Startup 类的 Configuration 方法中有此代码:

        appBuilder.Map("/signalr", map =>
        {
            map.UseCors(CorsOptions.AllowAll);                
            map.RunSignalR(signalRConfig);
        });

我注意到首先调用了/signalr/negotiate,并且响应没有任何Access-Control 标头:

但是,/signalr/connect 响应会:

为什么/signalr/negotiate 也没有这些标头?

我的网络应用在https://localhost:4200 下运行。

为什么Access-Control-Allow-Origin 设置为https://localhost:4200 而不是*

根据sourcecode,它应该允许任何来源,而不仅仅是发起对 SignalR 的调用的 web 应用程序。

【问题讨论】:

    标签: asp.net cors signalr


    【解决方案1】:

    CORS 不适用于 WebSocket 请求。 CORS 中间件可能会错误地将这些标头添加到 WebSocket 响应中(但它不会造成任何伤害,它只是标头)。

    对于协商请求,网络选项卡中应该有一个包含 CORS 标头的 OPTIONS 请求,您正在查看的网络请求是在成功的 OPTIONS 请求后发送的实际 GET。

    【讨论】:

    • Websocket 请求不是以 HTTP 请求开始的吗?
    • 当然,但它仍然不适用。如果您使用的是 ASP.NET Core(看起来您不是),您可以添加 WebSocket 源限制以使用 WebSocket 模拟 CORS:docs.microsoft.com/aspnet/core/fundamentals/…
    猜你喜欢
    • 2021-02-21
    • 2021-05-23
    • 2018-06-08
    • 2014-08-20
    • 2021-04-26
    • 1970-01-01
    • 2019-08-27
    • 2016-10-30
    • 1970-01-01
    相关资源
    最近更新 更多