2016-08-11 31 views
0

我正在构建一项服务,将资源分为多个类别,例如, example.com/category/foo将代表“foo”(认为:与SO标签类似)。“永远不会存在”的HTTP状态码

可以随时添加新类别,当试图查看尚不存在的类别时,用户将能够建议添加它。

但是,我想彻底禁止一些类别名称(例如NSFW条款)。这意味着(假设“酒吧”就是这样一个名字)example.com/category/bar不仅不存在,而且保证将来永远不会存在。

哪种HTTP状态码适合这种情况?

一些想法浮现在脑海中:

  1. 410飘 - 而这清楚地资源不会在将来可用,我不知道这是否是合适的,因为它也似乎暗示它曾经存在于过去。

  2. 400错误请求 - 请求在技术上不是格式错误,所以这可能不是错误的方法。

  3. 404未找到最初似乎是逻辑的选择,但不传达禁令的持久性,尤其是因为我打算使用404对于尚不存在的类别,但可以建议。

  4. 301永久移动并重定向到另一个页面,主页或其他页面,解释某些类别名称被禁止。

+0

只有404.没有关于它说“永久”。它只是意味着“现在不存在”。 –

+0

这就是为什么我有点不情愿使用404,所做的请求被服务器识别,但响应保证不会包含任何有用的东西。 – fstanis

+0

401 /禁止? http状态代码并不打算映射到每个可能的现实世界的情况。有时你只需要塞住你的鼻子并进入它。 –

回答

1

我不认为有这样的事情在HTTP规范中“永远不会存在”。让我们稍微想一想:

  • 该资源是通过您的网站(并通过您的网站)创建的。如果创建了资源,那意味着无论您进行的验证是否成功。

所以为了保持它简单愚蠢,你应该坚持使用HTTP语义。如果有人点击了URL:example.com/category/{cat},或者您知道{猫}(它在您的数据库中,并且有一个有效的名称,对吗?)并处理请求safley,或者您之前从未见过{cat},并且您只返回404.

毕竟有一个可以用于{cat}的可能值的无穷大,并且它们都是有效的URLS。

希望它可以帮助

+0

感谢您的回复 - 我知道这没有“完美契合”,但我仍然不确定410(或其他)是否更合适。最值得注意的是,404请求没有被缓存,并且其未来可能存在的暗示(因此可能使搜索引擎试图重新抓取它)显然是错误的(与可以建议的类别不同 - 那里404是完美的)。在更高的层面上,如果“酒吧”是完全不合适的,我不希望为“酒吧”*显示“建议此类别”页面。 – fstanis

0

我会建议一个410飘是一个适当的反应,假设你的Web客户端是常见的,实现HTTP规范正确的(最流行的做)。

在这个网页上寻找位置:Status Code Definitions

约410消失的部分说:

10.4.11 410飘

请求的资源不再可用在服务器上,并没有 转发地址是已知的。预计这种情况将被认为是永久性的,即 。具有链接编辑功能的客户端应在用户批准后删除对Request-URI的引用。如果 服务器不知道或无法确定 条件是否是永久性的,则代替使用状态码404(未找到) 。除非另有说明,否则此响应可缓存。

的410响应的主要目的是通过通知收件人,资源是故意 不可用,服务器业主的愿望是 到资源远程链接被删除,以协助网络 维护任务。 限制时间的促销服务和属于 的个人不再在服务器的网站上工作,这种情况很常见。将所有永久不可用的资源标记为“不存在”或 以将该标记保留任意时间长度,这不是 --这是由服务器所有者决定的 决定的。

我认为这意味着资源绝对不存在,将来不会存在,给予您想要的永久性,除非另有说明,它也是可以缓存的。

通常我不需要知道它“从来没有存在过”,我只知道它现在不存在,当我请求关于它的信息时,它不会在将来存在如果我再次请求它。如果我确实需要知道某些类别过去从未存在过(例如类别黑名单),我可能需要一个单独的明确请求,我可以使用它来获取所有这些类别,而不必检查每个类别在运行时间。