这可能是一个道德问题,但我正在办公室讨论以下问题:
使用HTTP GET请求设置cookie是否可以?因为每当HTTP请求更改应用程序中的某些内容时,您应该使用POST请求。 HTTP GET只应用于检索Request-URI标识的数据。
在这种情况下,应用程序不会更改,但由于cookie被更改,用户可能会在页面再次加载时获得不同的体验,这意味着HTTP GET请求更改了应用程序行为(服务器端没有任何更改)虽然)。
讨论开始是因为我们想使用普通的锚元素来设置cookie。
答案 0 :(得分:2)
GET的问题,特别是如果它们出现在标签上,就是当它们被Google等人抓住时。
在你的情况下,你不必要地创建很可能永远不会被使用的cookie。
我还认为,GET规则并不是关于改变应用程序,而是关于更改数据的更多信息。我很欣赏与cookie的微妙区别(即你没有改变你的系统上的数据),但一般来说,这是一个很好的规则,无论数据存储在何处,GET都不应该用来改变它。
答案 1 :(得分:2)
当用户发出另一个GET请求时,用户总能拥有不同的体验 - 您不希望为(想象的)时间服务返回相同的数据集:“GET / time / current”
此外,并不是说不允许您更改服务器端状态以响应GET请求 - 例如,即使您将其存储在数据库中,增加页面点击计数器也是完全“合法的”。 / p>
部分当然,无法确保服务器不能 由于执行GET请求而产生副作用;在 事实上,一些动态资源考虑了一个功能。重要的 区别在于用户没有请求副作用,所以 因此不能对他们负责。
另外我会说更改或设置cookie以响应GET请求是完全可以接受的,因为你只是返回一些数据。