请求头修复说明
问题描述
在签名生成功能中,出现了以下错误:
Refused to set unsafe header "User-Agent"(env: macOS,mp,1.06.2504010; lib: 3.8.9)
问题原因
微信小程序出于安全考虑,不允许开发者设置某些不安全的请求头,包括:
User-AgentRefererCookieHostOriginAccept-EncodingAccept-LanguageAcceptConnectionContent-Length
解决方案
修复前
javascript
wx.request({
url: url,
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' // ❌ 不安全的请求头
},
// ...
})
修复后
javascript
wx.request({
url: url,
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded' // ✅ 只保留安全的请求头
},
// ...
})
影响分析
移除 User-Agent 的影响
- 服务器识别:服务器可能无法识别客户端类型
- 兼容性:某些服务器可能依赖 User-Agent 进行功能判断
- 功能影响:如果服务器严格依赖 User-Agent,可能需要其他解决方案
替代方案
如果服务器确实需要识别客户端类型,可以考虑:
- 自定义请求头:使用自定义的请求头来传递客户端信息
- 请求参数:在请求体中添加客户端标识参数
- 服务器适配:让服务器适配微信小程序的默认 User-Agent
微信小程序允许的请求头
微信小程序允许设置以下请求头:
Content-TypeAcceptAuthorizationX-Requested-With- 自定义请求头(以
X-开头)
最佳实践
- 只设置必要的请求头:避免设置不必要的请求头
- 使用自定义请求头:如果需要传递额外信息,使用自定义请求头
- 测试兼容性:确保移除请求头后功能仍然正常
- 文档记录:记录所有请求头的用途和必要性
相关文件
pages/onesign/onesign.js- 修复后的签名生成逻辑utils/ad-config.js- 广告配置文件(不涉及请求头)
验证步骤
- 重新测试签名生成功能
- 确认不再出现 "Refused to set unsafe header" 错误
- 验证签名生成功能正常工作
- 检查网络请求是否成功发送和接收