使用Axios请求Apple推送沙箱API出现Parse Error: Expected HTTP/问题
解决Axios调用苹果APNs沙箱API时的"Parse Error: Expected HTTP/"问题
这个报错的核心原因是苹果的APNs推送API(包括沙箱环境)强制要求使用HTTP/2协议,而默认配置的Axios依赖Node.js的http/https模块,这些模块原生只支持HTTP/1.x协议,无法解析HTTP/2格式的响应,因此抛出Parse Error: Expected HTTP/错误。你用http2包能正常工作,正是因为它原生支持HTTP/2协议。
要让Axios正常调用该API,只需要给它添加HTTP/2支持的配置,推荐用现成的适配器简化操作:
解决方案步骤
安装依赖包
安装Axios和HTTP/2适配插件:npm install axios axios-http2-adapter配置Axios实例并发起请求
创建支持HTTP/2的Axios实例,补充APNs要求的必要配置后发起请求:const axios = require('axios'); const http2Adapter = require('axios-http2-adapter'); // 创建支持HTTP/2的Axios实例 const apnsAxios = axios.create({ baseURL: 'https://api.sandbox.push.apple.com', adapter: http2Adapter, // 补充APNs要求的请求头 headers: { 'Authorization': 'Bearer <你的APNs令牌>', 'apns-topic': '<你的APP Bundle ID>' } }); // 发起POST请求 apnsAxios.post('/messages/send/3/device/<设备TOKEN>') .then(res => console.log('推送成功:', res.data)) .catch(err => console.error('请求失败:', err));
其他说明
如果不想引入第三方适配器,也可以手动基于Node.js的http2模块封装Axios适配器,但这种方式需要自己处理连接池、请求/响应格式转换等逻辑,维护成本较高,远不如直接使用axios-http2-adapter高效。
内容的提问来源于stack exchange,提问作者GGirotto
相关产品推荐
相关产品推荐

