React Native调用HTTP/2接口无法获取响应体问题求助
React Native fetch调用AWS Lambda HTTP/2接口无法获取响应体的解决思路
第一步:确认是否未正确解析响应体
你当前的代码只是打印了fetch返回的Response对象,这个对象本身并不直接包含响应体内容,需要调用json()、text()等方法解析后才能拿到数据。修改代码如下:
try { const response = await fetch(`${API_URL}/stripe_payment`, { method: 'POST', headers: { 'x-api-key': API_KEY, }, }); // 解析JSON格式的响应体 const responseData = await response.json(); console.log('API响应内容:', responseData); } catch (error) { console.error('请求错误:', error); }
如果解析后能正常拿到{"errorCode": "OK", "client_secret": "zzzz"},说明问题只是未正确处理响应体,而非HTTP/2兼容性问题。
第二步:针对HTTP/2兼容性问题的解决方案
如果解析后仍无法获取响应体,再排查HTTP/2相关的问题:
- 降级API Gateway协议版本:在AWS控制台进入你的API Gateway,找到对应API的「Settings」页面,将「Endpoint Configuration」中的协议改为HTTP/1.1,重新部署后测试请求。
- 替换fetch为axios:axios在React Native环境中对HTTP/2的兼容性表现更稳定,安装axios后尝试以下代码:
import axios from 'axios'; try { const result = await axios.post(`${API_URL}/stripe_payment`, {}, { headers: { 'x-api-key': API_KEY, }, }); console.log('API响应内容:', result.data); } catch (error) { console.error('请求错误:', error); } - 升级React Native版本:旧版本React Native(如0.60及以下)对HTTP/2的支持存在缺陷,升级到0.70+的稳定版本可以解决部分兼容性问题。
- 明确Lambda响应的Content-Type:确保Lambda返回的响应头包含完整的
Content-Type值,避免因编码问题导致解析失败。示例Lambda代码(Node.js):exports.handler = async (event) => { return { statusCode: 200, headers: { 'Content-Type': 'application/json; charset=utf-8', }, body: JSON.stringify({ errorCode: "OK", client_secret: "zzzz" }), }; };
内容的提问来源于stack exchange,提问作者user2913139
相关产品推荐
相关产品推荐

