【问题标题】:Is it okay to set a cookie with a HTTP GET request?可以使用 HTTP GET 请求设置 cookie 吗?
【发布时间】:2012-01-16 02:11:59
【问题描述】:

这可能是一个道德问题,但我在办公室就以下问题进行了相当多的讨论:

可以通过 HTTP GET 请求设置 cookie 吗?因为每当 HTTP 请求更改应用程序中的某些内容时,您都应该使用 POST 请求。 HTTP GET 只能用于检索由 Request-URI 标识的数据。

在这种情况下,应用程序并没有改变,但是由于 cookie 被改变了,当页面再次加载时用户可能会得到不同的体验,这意味着 HTTP GET 请求改变了应用程序的行为(服务器端没有改变不过)。

Get request reference

讨论开始是因为我们想使用一个普通的锚元素来设置一个cookie。

【问题讨论】:

  • 几年后...但我认为问题在于基于 cookie 更改响应内容时,而不是设置 cookie 本身

标签: http cookies get httpwebrequest request


【解决方案1】:

GET 的问题,尤其是当它们在 a 标签上时,是当它们被 Google 之类的爬取时。

在您的情况下,您将不必要地创建很可能永远不会被使用的 cookie。

我还认为 GET 规则实际上并不是关于更改应用程序,而是关于更改数据。我很欣赏 cookie 的细微差别(即您没有更改系统上的数据),但一般来说,这是一个很好的规则,并且无论数据存储在哪里,GET 都不应该真正用于更改它。

【讨论】:

  • 当网站被 Google 抓取时,我没有意识到副作用。另一方面,这不是他们的问题吗?
  • 是的,但是该怎么办?您可以使用 robots.txt 拒绝他们进行爬虫,但最终您的网站(部分)没有被索引。最简单的方法是将更改保留为 POST,因此建议。
【解决方案2】:

当用户发出另一个 GET 请求时,他总是可以有不同的体验 - 你不希望总是为(想象的)时间服务返回相同的数据集:“GET /time/current” .

此外,并不是说您不允许更改服务器端状态以响应 GET 请求 - 例如,增加页面命中计数器是完全“合法的”,即使您将其存储在数据库中也是如此。

考虑9.1.1 Safe Methods部分

自然不能保证服务器不 由于执行 GET 请求而产生副作用;在 事实上,一些动态资源认为这是一个特性。重要的 这里的区别是用户没有请求副作用,所以 因此不能对他们负责。

我还要说,更改或设置 cookie 以响应 GET 请求是完全可以接受的,因为您只是 返回一些数据

【讨论】:

  • 我不完全同意,因为用户确实要求副作用。用户单击一个链接来专门设置我们保存在 cookie 中的设置。
猜你喜欢
  • 2012-03-13
  • 2017-03-10
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 2014-04-30
  • 1970-01-01
  • 2017-12-22
相关资源
最近更新 更多