Blazor WASM通过域名访问时出现integrity校验失败问题求助
你遇到的错误核心是:域名访问时加载的资源内容为空(计算出的SHA-256哈希是空字符串的哈希值47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=),导致Blazor的资源完整性校验失败,被浏览器拦截。结合IP访问正常、API域名可访问的情况,问题大概率出在Nginx的域名配置上,以下是针对性解决方案:
核对Nginx域名配置的根目录
确保域名对应的server块中root路径和IP访问时的配置完全一致。如果域名配置的根目录错误,Nginx会返回空内容或404页面,触发校验失败。示例正确配置片段:server { listen 80; server_name your-domain.com; root /var/www/blazorapp/wwwroot; # 和IP访问的root路径保持一致 index index.html; location / { try_files $uri $uri/ /index.html; } # API代理配置(按需调整端口和路径) location /api { proxy_pass http://localhost:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }修改配置后执行
sudo nginx -s reload生效。强制清除浏览器缓存
Blazor WASM会缓存静态资源,域名访问时可能加载了旧的缓存记录,导致和当前服务器资源不匹配。按Ctrl+Shift+R强制刷新页面,或直接清空浏览器缓存后重试。检查Nginx的路由重写规则
确保域名配置中的try_files规则正确,Blazor作为单页应用,所有非API的请求都应重定向到index.html。如果规则错误,静态资源(如.dll.js、.css)会被错误路由到HTML页面,返回内容不符合预期,触发校验失败。验证服务器资源的权限与完整性
登录Ubuntu服务器,检查wwwroot目录下的静态资源是否存在、内容完整,且Nginx进程(通常是www-data用户)有读取权限:# 递归设置所有者为www-data sudo chown -R www-data:www-data /var/www/blazorapp/wwwroot # 递归设置可读权限 sudo chmod -R 755 /var/www/blazorapp/wwwroot排查Nginx的gzip压缩配置
如果Nginx开启了gzip压缩,可能压缩过程中修改了资源内容,导致integrity校验不通过。可以临时在域名server块中添加gzip off;,重启Nginx后测试。如果问题解决,要么保持gzip关闭,要么调整Blazor发布配置,禁用资源压缩,让Nginx统一处理压缩(需确保Nginx压缩后的资源能和Blazor生成的integrity哈希匹配)。
内容的提问来源于stack exchange,提问作者Nowayout

