我在让 Signalr 支持 Azure 上的 CORS 时遇到问题。我创建了 MSDN Getting Started示例聊天程序,将其部署到 Azure 并确保其正常工作。然后我按照 SignalR Hubs API Guide - JavaScript Client 中有关如何启用 CORS 的说明进行操作。 ,即我将 Startup.cs 更改为使用 Microsoft.Owin.Cors 并设置
map.UseCors(CorsOptions.AllowAll);
并在Win8上使用IE11进行了尝试。
Signalr/IE 正在发送如下所示的 CORS 预检请求:
Request OPTIONS /signalr/signalr/negotiate?connectionData=%5B%7B%22name%22%3A%22ommhub%22%7D%5D&clientProtocol=1.3&_=1398784789992 HTTP/1.1
Accept */*
Origin https://my.devserver.com
Access-Control-Request-Method GET
Access-Control-Request-Headers content-type, accept, x-requested-with
Accept-Encoding gzip, deflate
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; LCJB; rv:11.0) like Gecko
Host mytestsite.azurewebsites.net
Content-Length 0
DNT 1
Connection Keep-Alive
Cache-Control no-cache
Azure 返回的内容几乎看起来正确:
Response HTTP/1.1 200 OK
Allow OPTIONS, TRACE, GET, HEAD, POST
Content-Length 0
Server Microsoft-IIS/8.0
Public OPTIONS, TRACE, GET, HEAD, POST
X-Powered-By ASP.NET
Set-Cookie ARRAffinity=6115ee2c8e2594676e68d4f0ee51035a2;Path=/;Domain=mytestsite.azurewebsites.net
Date Tue, 29 Apr 2014 15:23:43 GMT
但浏览器在此之后不会发送任何内容(它应该请求连接)。我怀疑这可能是因为预检响应不包含 Access-Control-Allow-Origin header 。
网络上有很多关于此的相互矛盾的信息。有人在 Azure 上成功获得了与 CORS 配合使用的 SignalR 集线器吗?如果您在那里,请告诉我们您是如何做到的。
最佳答案
我没有时间调试 Signalr 代码,但我找到了一个解决方法。
我通过加载另一个服务(正确处理 CORS)的同一域中的 URL 代理 Signalr 请求。一旦其他服务处理了 OPTIONS 预检请求,IE 就会允许所有进一步的请求发生,而无需预检。
关于azure - Azure 上具有 CORS 的 SignalR 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23375451/