【问题标题】:web-push unknown issue, WebPushError "Received unexpected response code" 400web-push 未知问题,WebPushError“收到意外响应代码”400
【发布时间】:2016-08-29 20:21:02
【问题描述】:

web-push 开发过程中使用 GCM 和 chrome。我最近遇到了这个问题(几个小时前一切仍然正常)

我不确定这是否是由于 GCM 的一些变化或云的停机时间...任何信息将不胜感激。

我的代码

var payload = JSON.stringify({
    title: 'notification title',
    body: 'message body'
});
webPush.sendNotification(params.endpoint, {
    userPublicKey: params.userPublicKey,
    userAuth: params.userAuth,
    payload: payload
}).then(function (res) { 
    // console.log of stuff
})
.catch(function(error){
    console.log(error);
    process.exit(1);
});

追踪:

{
  WebPushError: Received unexpected response code
  at IncomingMessage.<anonymous> (/var/www/***/pwa/node_modules/web-push /index.js:264:20)
  at emitNone (events.js:91:20)
  at IncomingMessage.emit (events.js:185:7)
  at endReadableNT (_stream_readable.js:926:12)
  at _combinedTickCallback (internal/process/next_tick.js:74:11)
  at process._tickCallback (internal/process/next_tick.js:98:9)
  name: 'WebPushError',
  message: 'Received unexpected response code',
  statusCode: 400,
  headers: {
    'content-type': 'text/plain; charset=UTF-8',
     date: 'Wed, 04 May 2016 11:35:13 GMT',
     expires: 'Wed, 04 May 2016 11:35:13 GMT',
    'cache-control': 'private, max-age=0',
    'x-content-type-options': 'nosniff',
    'x-frame-options': 'SAMEORIGIN',
    'x-xss-protection': '1; mode=block',
     server: 'GSE',
    'alternate-protocol': '443:quic',
    'alt-svc': 'quic=":443"; ma=2592000; v="33,32,31,30,29,28,27,26,25"',
    'accept-ranges': 'none',
     vary: 'Accept-Encoding',
     connection: 'close'
  },
  body: 'JSON_PARSING_ERROR: Unexpected token END OF FILE at position 467.\n' 
}

【问题讨论】:

  • 如果您不想弄乱低级细节,我建议使用pushpad-node 之类的服务
  • 你能给我们看一个你的有效载荷的例子吗?
  • @collimarco 您的建议对我来说似乎很有趣。但遗憾的是,要求为该项目制作一个专用的推送模块......第三次服务将立即被拒绝:(
  • @Marco,我添加了用于生成有效负载的脚本。它是一个字符串化的 JSON。
  • 您确定您正确设置了 GCM 密钥吗?您设置的 GCM 键中是否有换行符?

标签: node.js google-chrome google-cloud-messaging service-worker web-push


【解决方案1】:

如果您尝试使用 web-push 发送推送通知,请尝试使用 #npm run web-push generate-vapid-keys 重新生成公钥和私钥。通过更换这些键再试一次。祝你好运。

【讨论】:

  • 这将使我认为的所有订阅无效
【解决方案2】:

@Lihn,将您的有效负载粘贴到此处。从错误消息来看,您似乎正在发送格式错误的 json 消息。

您可以使用this service 检查您的 json 中的语法问题。

GCM docs 声明状态码 400 表示无法解析 json 消息。

【讨论】:

  • 嗨!我的有效负载不是 JSON。它要么是字符串化的 JSON,要么只是一个字符串。像"notification message" 之类的东西 --- 正如关于 FireFox 和 Chrome 的问题中所提到的,直到最近它在 Chrome 上的 GCM 都被破坏了。 --- 仍然感谢您的时间和答案! :)
  • 尝试将 headers 设置为 'Content-type': 'application/json' ?
  • 已经做过'Content-type': 'application/json',我也试过没有payloaduserPublicKeyuserAuth它们都不起作用。
  • GCM 清楚 [documents][1] 错误状态 400 作为无法解析的 json,所以我的建议是调试 json 字符串。 [1]:developers.google.com/cloud-messaging/…
  • 再次感谢文档的 url,遗憾的是它提到错误仅适用于 JSON 请求。对于web-push,我只使用文本作为有效负载。 --- 但我想我可以检查其他字段,如 enpoint... 等... --- 请编辑您的答案并提供 GCM 文档的链接,我会支持它(因为它对我有用) .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 2017-12-13
  • 1970-01-01
相关资源
最近更新 更多