用户的浏览器似乎一天触发多次请求

User's browser seems to trigger requests multiple times a day

我们有一个触发电子邮件的 HTTP GET URL。 URL 是通过邮件发送的,因此不可能在没有进一步后果的情况下将其设为 POST URL.

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

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

是否有可能 "tell" 浏览器不自动加载这样的 URL?

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

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

编辑:URL 基本上是 public,但它有一个用户识别令牌。我知道浏览器要求确认 rePOST 数据,但我不要求在 GET URL 上进行此类确认。 我知道这个事实,GET URLs 不应该引起任何更多的动作,但在这种特定情况下,我们在电子邮件的按钮中有 URL 并希望直接引起动作。

所以我的问题更像是:"can I tell the browser that this URL is dangerous to call twice, i.e. to behave like it was a POST URL, for example by a specific header"

浏览器通常不允许从特定域执行此类代码片段,因为从最终用户浏览器的角度来看,这些被视为安全漏洞。你的理论对我来说似乎是正确的,因为当我断开我的笔记本电脑并重新连接到互联网时,通常所有 chrome 浏览器的标签只需点击它们就会刷新。您可以从负载平衡器或 web/app 服务器日志中获取用户计算机的 IP 以确认一次。

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

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

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

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