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