Skip to content
On this page

请求头修复说明

问题描述

在签名生成功能中,出现了以下错误:

Refused to set unsafe header "User-Agent"(env: macOS,mp,1.06.2504010; lib: 3.8.9)

问题原因

微信小程序出于安全考虑,不允许开发者设置某些不安全的请求头,包括:

  • User-Agent
  • Referer
  • Cookie
  • Host
  • Origin
  • Accept-Encoding
  • Accept-Language
  • Accept
  • Connection
  • Content-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 的影响

  1. 服务器识别:服务器可能无法识别客户端类型
  2. 兼容性:某些服务器可能依赖 User-Agent 进行功能判断
  3. 功能影响:如果服务器严格依赖 User-Agent,可能需要其他解决方案

替代方案

如果服务器确实需要识别客户端类型,可以考虑:

  1. 自定义请求头:使用自定义的请求头来传递客户端信息
  2. 请求参数:在请求体中添加客户端标识参数
  3. 服务器适配:让服务器适配微信小程序的默认 User-Agent

微信小程序允许的请求头

微信小程序允许设置以下请求头:

  • Content-Type
  • Accept
  • Authorization
  • X-Requested-With
  • 自定义请求头(以 X- 开头)

最佳实践

  1. 只设置必要的请求头:避免设置不必要的请求头
  2. 使用自定义请求头:如果需要传递额外信息,使用自定义请求头
  3. 测试兼容性:确保移除请求头后功能仍然正常
  4. 文档记录:记录所有请求头的用途和必要性

相关文件

  • pages/onesign/onesign.js - 修复后的签名生成逻辑
  • utils/ad-config.js - 广告配置文件(不涉及请求头)

验证步骤

  1. 重新测试签名生成功能
  2. 确认不再出现 "Refused to set unsafe header" 错误
  3. 验证签名生成功能正常工作
  4. 检查网络请求是否成功发送和接收

Released under the MIT License.