iis - Azure 网站上的 ARR 反向代理删除了 WebSockets 响应 header 'Sec-WebSocket-Accept'

标签 iis azure reverse-proxy arr

我正在尝试在 Azure 网站内设置 ARR。我在 Azure VM 上有一个有效的实现,但希望迁移到网站,这样我就不必主动管理 VM。

我遇到的问题特定于通过我的 ARR 反向代理传递的 SignalR WebSockets 连接请求和响应。

通过 IIS 请求跟踪通过 ARR 之前服务器上的响应:

Upgrade: Websocket
Server: Microsoft-IIS/8.0
X-Content-Type-Options: nosniff
X-Powered-By: ASP.NET
X-Powered-By: ARR/3.0
Sec-WebSocket-Accept: IVoaaOhRLbaSxQzHV1TRkwHbtFc=**
Connection: Upgrade
X-FE-DATA: AppId:Unknown-StatusCode
X-Powered-By: ASP.NET
DWAS-Handler-Name: EXECUTE|101|0|0x0|CONFIG_SUCCESS|ApplicationRequestRoutingHandler|::1|\\100.68.100.59\volume-21-default\be0a77feeba577989612\3323291baecf417bb67a391f58af8a90\

客户看到的响应:

HTTP/1.1 101 Switching Protocols
Upgrade: Websocket
Server: Microsoft-IIS/8.0
X-Powered-By: ASP.NET
X-Powered-By: ARR/3.0
X-Powered-By: ASP.NET
Connection: Upgrade

如您所见,Sec-WebSocket-Accept header 已从响应中删除。这意味着客户端连接失败并默认使用长轮询而不是 websockets 协议(protocol)。

知道为什么这个 header 被删除吗?正在使用 ARR 3.0,它具有 native websockets 支持,并且在 Azure 网站配置面板中启用了 websockets。

最佳答案

您是否在代理配置中指定了 keepHostHeaders="true"标志?

 <proxy xdt:Transform="InsertIfMissing" enabled="true" preserveHostHeader="true" reverseRewriteHostInResponseHeaders="true" /> 

关于iis - Azure 网站上的 ARR 反向代理删除了 WebSockets 响应 header 'Sec-WebSocket-Accept',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27991832/

相关文章:

powershell - Azure VM/应用服务的空闲时间 – PowerShell

c# - Azure:如何在 Azure 中的 ASP.NET Core 应用程序中写入和读取自定义日志消息?

node.js - Nginx gunzip POST 请求到后端

python - 需要 CGI(或与 IIS 7 兼容的其他解决方案)来处理*大量*上传

asp.net - Microsoft EDGE - 访问此资源所需的安全证书无效

c# - Google 和 Facebook 如何先于其他用户向某些用户发布功能?

c# - 如何配置空 ASP .NET 应用程序以将其发布到 IIS

azure - 如何从 S3 或 Azure Blob 提供 HTTP 状态 503 的静态网站?

ruby-on-rails - 代理后面的 Rails3 应用程序

iis - 使用反向代理的客户端证书身份验证