You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

因CSP(内容安全策略)无法连接WebSocket,求问题排查方案

解决CSP导致的WebSocket连接被拒问题

我来帮你搞定这个问题!你的错误日志已经说得很清楚了——浏览器的内容安全策略(CSP)里只允许连接同源地址(connect-src 'self'),但你要连的WebSocket地址wss://hostname.domain:port/jsonWebSocket不在这个范围内,所以被拦截了。

问题根源拆解

CSP的connect-src指令专门管控浏览器能发起的各类网络请求,包括WebSocket、AJAX这些。只有在这个指令里明确列出的源,浏览器才会允许建立连接。你的当前配置只开放了同源('self')权限,自然会拦掉外部的WebSocket地址。

具体修复步骤(修改IIS的web.config)

你需要在web.config的自定义HTTP头配置中,把目标WebSocket地址加到CSP的connect-src规则里:

  1. 打开你的web.config,找到<customHeaders>节点
  2. 如果已经存在Content-Security-Policy这个头,就修改它的connect-src部分;如果没有,就新增这个头
  3. 在'self'后面加上你的WebSocket地址,用空格隔开即可

修改后的web.config示例

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <!-- 保留你原有的Cache-Control等头配置 -->
        <add name="Cache-Control" value="no-cache" />
        <!-- 重点修改这行的CSP配置 -->
        <add name="Content-Security-Policy" value="connect-src 'self' wss://hostname.domain:port/jsonWebSocket; 其他你需要的CSP指令..." />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

几个要注意的细节

  • 要是需要允许多个WebSocket源,直接用空格分隔添加就行,比如connect-src 'self' wss://site1.com wss://site2.com:8080
  • 别图省事用通配符(比如wss://*),这会大幅削弱CSP的安全防护能力,只添加你实际需要的源就好
  • 修改完配置记得重启一下IIS站点,确保新配置生效
  • 修复后可以打开浏览器开发者工具的Console面板,确认是不是还有CSP相关的报错

内容的提问来源于stack exchange,提问作者Antonio Pipinic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:07:46