You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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支持的配置,推荐用现成的适配器简化操作:

解决方案步骤

  1. 安装依赖包
    安装Axios和HTTP/2适配插件:

    npm install axios axios-http2-adapter
    
  2. 配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:57:08