使用GET进行非幂等请求

时间:2011-12-28 14:37:11

标签: http post get http-post http-get

简单地说,我有一个网站,您可以在其中注册用户并添加数据。目前只添加一次特定数据才有意义,因此添加应该是幂等的,但理论上您可以多次添加相同的数据。我不会在这里进入。

根据RFC 2616,GET请求应该是幂等的(真正无效)。我希望用户能够做一些像访问

这样的事情
http://example.com/<username>/add/?data=1

这会添加这些数据。让一个PUT请求用REST执行此操作是有意义的,但我不知道如何使用浏览器发出PUT请求,我非常怀疑大多数人做或想要打扰。即使使用POST也是合适的,但这有类似的问题。

是否有一些技术上正确的方法允许用户仅使用GET添加数据(例如,通过手动访问链接,或允许外部网站使用该链接)。当他们访问此页面时,我可以使用javascript或cURL创建自己的POST / PUT请求,但这似乎仍然违反了幂等GET请求的精神。

1 个答案:

答案 0 :(得分:4)

  

是否有一些技术上正确的方法允许用户使用添加数据   只有GET ......?

无论您如何让客户访问它,您最终都会违反RFC2616。这最终取决于你如何处理请求(没有什么会阻止你这样做),但请记住,如果你违反HTTP规范,你可能会对做<的客户和代理造成意外的副作用/ em>遵守它。

另见:Why shouldn't data be modified on an HTTP GET request?


至于无法从浏览器中进行PUT,有 [1][2] 的解决方法,其中大多数都使用POST但也通过某种方式_method请求参数,该参数由服务器拦截并路由到相应的服务器端操作。