http - 使用 GET 进行非幂等请求

标签 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 请求的精神。

最佳答案

Is there some technically correct way to allow users to add data using only GET ... ?

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

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


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

关于http - 使用 GET 进行非幂等请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8657212/

相关文章:

javascript - IE8 中的 jQuery 动态表单创建无法处理大量数据

java - 在 java 中解析 HTTP JSONObject 响应

php - 清理所有已发布字段的正确方法?

php - 通过引用使用 __get()

c - SOCK_STREAM 上的 Http 服务器 - 何时结束连接?

javascript - 从 Angular 中的 HTTP 请求错误响应中识别 HTTP 动词

http - 在 go net/http 中获取 http body

performance - 带有 .htaccess 的选择性 SSL 强制 http ://or https://

javascript - 未收到来自 Express 服务器的 GET 响应

javascript - 在javascript中获取自定义属性的值