Web Notification推送在Chrome上从python中抛出400

时间:2018-04-24 07:25:40

标签: python google-chrome firefox web-notifications

我正在使用pywebpush 1.4.0库从Django后端推送Web Notifications。我使用的密钥是从https://web-push-codelab.glitch.me/获得的。订阅似乎工作正常。此外,我在Firefox上对此进行了测试,并且在那里工作正常。

我在推送Chrome时收到以下错误服务器端:

Push failed: <Response [400]>: <HTML>
<HEAD>
<TITLE>UnauthorizedRegistration</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>UnauthorizedRegistration</H1>
<H2>Error 400</H2>
</BODY>
</HTML>

奇怪的是,我的后端控制3个域名,推送工作正常,即使对于一个域上的Chrome而言也没有在其他域上工作。我排除了以下可能的问题:

我看到的唯一可能性是Chrome是否允许来自同一后端的不同域上的推送通知。是否有人知道这样的限制或者可以帮助我解决其他任何指针?

注意:我为所有三个域使用不同的密钥。

以下是我用来推送的代码:

from pywebpush import webpush
webpush(subscription_info,
                data,
                vapid_private_key=vapid_private_key,
                vapid_claims={"sub": "mailto:xyz@example.com"})

subscription_info是订阅用户时收到的json,vapid_private_key是相应的私钥。

1 个答案:

答案 0 :(得分:0)

FAQ列出了以下错误原因(引用):

  • 如果您未能在对FCM的请求中定义授权标头。
  • 用于订阅用户的应用程序密钥与用于签署授权标头的密钥不匹配。
  • 您的JWT中的到期时间无效,即到期时间超过24小时或JWT已过期。
  • JWT格式错误或值无效

它还说明了在请求中添加applicationServerKey的要求,并且这不是Firefox中的强制要求。您的问题可能在于:您确定vapid_private_key变量是否为每个域引用了正确的私钥?可能它始终是您工作领域的关键。

如果我们使用了更多代码,可能更容易找到一些潜在的错误。 Chrome每个服务器只需要一个密钥,但应该能够处理几个不同的服务器订阅。