解决方案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是可以接受到的。