Web通知推送从python的Chrom抛出400个

2024-09-28 22:14:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pywebpush1.4.0库从Django后端推送Web通知。我使用的密钥是从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不允许在同一后端的不同域上推送通知。有没有人意识到这种局限性,或者可以在这里帮助我解决其他问题?在

注意:我对这三个域使用了不同的键。在

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

^{pr2}$

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


Tags: pywebtitlehtmlbodyh2chromefirefox
1条回答
网友
1楼 · 发布于 2024-09-28 22:14:33

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

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

它还说明了在请求中添加applicationServerKey的要求,而这在Firefox中不是强制要求的。您的问题可能就在这里:您确定vapid_private_key变量引用了每个域的正确私钥吗?这可能是因为它实际上一直是你工作领域的关键。在

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

相关问题 更多 >