【问题标题】:User's browser seems to trigger requests multiple times a day用户的浏览器似乎每天多次触发请求
【发布时间】:2018-10-26 04:14:14
【问题描述】:

我们有一个触发电子邮件的 HTTP GET URL。该 URL 是通过邮件发送的,因此不可能将其设置为 POST URL。

目前我们面临用户每天多次收到此类确认邮件的问题。

我的理论是,URL 是在某个选项卡中打开的,或者是在每次用户打开浏览器时都被预取的,因此会触发电子邮件。

是否有可能“告诉”浏览器不自动加载这样的 URL?

或者是制作需要额外点击按钮的确认页面的唯一选项?

用户代理是 ""Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0"

编辑:该 URL 基本上是公开的,但其中有一个用户标识令牌。我知道浏览器会要求确认重新发布数据,但我不会要求对 GET URL 进行此类确认。 我知道这样一个事实,GET URL 不应导致任何更多操作,但在这种特定情况下,我们在电子邮件中的按钮中包含 URL,并希望直接导致操作。

所以我的问题更像是:“我可以告诉浏览器这个 URL 是 危险 调用两次,即表现得像一个 POST URL,例如通过特定的标头”

【问题讨论】:

    标签: http opera


    【解决方案1】:

    浏览器通常不允许从特定域执行此类代码 sn-p,因为从最终用户浏览器的角度来看,这些被视为安全漏洞。您的理论对我来说似乎是正确的,因为当我断开笔记本电脑并将其重新连接到互联网时,通常所有 chrome 浏览器的选项卡都会在单击它们时刷新。您可以从负载均衡器或网络/应用服务器日志中获取用户计算机的 IP 以确认一次。

    但是,即使您找到了“告诉”浏览器的解决方案,我相信并非所有浏览器都允许。拥有一个确认页面和/或使其成为一个 POST 调用肯定会使它变得健壮(考虑到搜索引擎也可能偶尔调用公开暴露的 GET URL,以刷新其索引)。

    GET、HEAD、OPTIONS 和 TRACE 方法被定义为安全的,这意味着它们仅用于检索数据。这也使它们具有幂等性,因为多个相同的请求将表现相同,但是这里的 GET 看起来有点不同:D

    如果这不能改变,另一种方法可能是限制特定用户在特定时间间隔内的电子邮件数量,所有这些都从服务器端完成。

    在此处查看相关讨论:Can I disable browser refresh in my webapp?

    【讨论】:

    • 我没有要求破解 :-D 我会澄清一下我的问题
    • 哦,这是我脑海中浮现的第一个词。我已经编辑了我的帖子:)
    • 有趣的是它们是幂等的,因为它们都触发了相同的邮件。这不是故意的。据我了解,不总是发送电子邮件会使它们在理论上不那么幂等
    • 我的“另一种方法”只是一种技巧:D,感谢您接受这篇文章作为答案。如果我们将电子邮件队列视为服务器端资源,那么它的状态正在发生变化,不是吗?
    猜你喜欢
    • 2011-12-22
    • 2011-10-28
    • 2013-02-08
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    相关资源
    最近更新 更多