【问题标题】:Using GET for a non-idempotent request将 GET 用于非幂等请求
【发布时间】:2011-12-28 14:37:10
【问题描述】:

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

根据RFC 2616,GET 请求应该是幂等的(实际上是无效的)。我希望用户能够做类似访问

http://example.com/<username>/add/?data=1

这将添加该数据。让 PUT 请求使用 REST 执行此操作是有意义的,但我不知道如何使用浏览器发出 PUT 请求,我非常怀疑大多数人会这样做或愿意费心去做。即使使用 POST 也是合适的,但这也有类似的问题。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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


    就无法从浏览器进行 PUT 而言,有针对 [1][2] 的解决方法,其中大部分使用 POST 但也传递某种 _method 请求被服务器拦截并路由到适当的服务器端操作的参数。

    【讨论】:

    • 换句话说,我根本不应该这样做?
    • @tandu - 规范(因此我)都会说你不应该。但是如果你不遵守规范,HTTP 警察不会来敲你的门(无论如何我认为他们不会)。请注意这样做的潜在后果。
    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    相关资源
    最近更新 更多