我正在实施一个网络应用,让用户可以订阅“简报”。用户只需提供自己的电子邮件地址,就没有注册页面。要确认电子邮件地址,系统会向指定地址发送电子邮件,并要求用户通过单击链接验证电子邮件地址。该链接向服务器发出GET请求,并修改模型中的一个标志,该标志代表来自confirm =>的用户简报。 false to confirmed =>真正。问题是我正在使用GET请求来修改内部服务器状态,这很糟糕。问题是所有需要电子邮件确认的系统都遵循这种模式。
有更好的方法吗?当用户在浏览器中输入确认页面时,我应该使用Javascript来触发Ajax POST请求吗?
同样适用于取消订阅。
谢谢!
答案 0 :(得分:0)
您不应该对非幂等的任何内容使用GET请求。使用POST首次订阅并更改现有订阅记录。从技术上讲,你可以使用PUT来改变现有的记录,但是你需要知道记录已经存在,所以总是使用POST更容易。
严格来说,您可以使用GET链接预填充表格,您可以使用JS或用户可以在页面上按下的确认提交按钮来触发对您服务的POST请求。
答案 1 :(得分:0)
StackOverflow(以及StackExchange)在其订阅确认电子邮件中使用HTTP GET。这不是一件坏事。实际上,我在我的收件箱/存档中找不到任何相反的网站实例。
http://stackexchange.com/filters/email-confirm/999999
不要担心。
答案 2 :(得分:0)
我发现了一个关于此问题的 interesting article。
它的主要内容是:
这听起来仍然有点粗略,因为 POST/PUT 请求不是来自用户的直接操作。但实际上,我们在 Javascript 中请求了所有类型的东西,而且其中大部分都是间接影响用户行为的。