uniapp - 支付宝 错误400,referer 过长

297 阅读1分钟

解决方案1:

uniapp 的请求 不支持 referrerStrategy: 'index', 可以使用uniapp差异化编译处理(不是最优解)

支付宝官方:

Q:request 请求头过大导致 HTTP 请求返回 400 状态码,如何处理?

A:

如果是 referer 过长导致,可以使用 referrerStrategy 参数来对 referer 格式进行控制(设置为 'index' 或 'page');如需兼容低版本的客户端(10.3.50 以下不支持 referrerStrategy 参数),可以通过配置服务器参数解决,例如 nginx 服务器可以通过调整 client_header_buffer_size 和 large_client_header_buffers 参数来控制尺寸限制;如果无法更改服务器配置,还可以通过尝试判断当前客户端版本号提醒用户进行升级。

my.request({
  url: 'https://xxxxx.com',
  method: 'POST',
  referrerStrategy: 'index', // 可选 'index' | 'page' | 'none'(部分版本支持)
  data: {},
  headers: {
    'content-type': 'application/json', //默认值
  },
  dataType: 'json',
  success: function (res) {
    my.alert({ content: 'success' });
  }
});

参数说明

效果示例 Referer
'index'只保留小程序首页https://miniapp.alipay.com
'page'保留完整页面路径(默认)https://miniapp.alipay.com/pages/long/path/...
'none'尝试不发送 Referer(部分版本支持)

解决方案2

后台解决、配置nginx, 增大请求头缓冲区,允许更长的 Referer (最优解)

client_header_buffer_size 8k;      # 默认 1k-4k
large_client_header_buffers 4 16k; # 默认 4 8k

重启nginx即可,400错误,可以看看nginx的日志错误,从而定位问题,后台接口是接受不到,nginx是可以接受到的。