"永远不存在的HTTP状态代码"

时间:2016-08-11 21:26:48

标签: http http-status-codes http-response-codes

我正在构建一项资源被分为类别的服务,例如: example.com/category/foo代表" foo" (想想:类似于SO标签)。

可以随时添加新类别,并且在尝试查看尚未存在的类别时,用户可以建议添加该类别。

但是,我想直接禁止某些类别名称(例如NSFW条款)。这意味着(假设" bar"就是这样一个名字)example.com/category/bar不仅从未存在过,而且保证将来永远不会存在。

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

想到了几个想法:

  1. 410 Gone - 虽然这表明资源将来无法使用,但我不确定它是否合适,因为它似乎也是合适的意味着它曾经存在于过去。

  2. 400错误请求 - 请求在技术上没有格式错误,因此这可能不是可行的方法。

  3. 404 Not Found 最初似乎是合乎逻辑的选择,但并没有传达禁令的永久性,特别是因为我计划将404用于不使用的类别。但仍然存在,但可以建议。

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

2 个答案:

答案 0 :(得分:1)

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

  • 资源是通过您的网站创建的(并且只能通过您的网站)。如果创建了资源,那意味着您放置的任何验证都会成功。

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

毕竟有一个无限的可能值,可以用于{cat},所有这些值都是有效的URL。

希望有所帮助

答案 1 :(得分:0)

我建议 410 Gone 是一个合适的回复,假设您的网络客户端很常见且正确实施了http规范(最受欢迎的那些)。

在此处查看此页面时:Status Code Definitions

关于410的消息说:

  

10.4.11 410 Gone

     

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

     

410响应主要用于协助网络任务   通过通知收件人资源是维护   故意不可用,服务器所有者希望如此   将删除该资源的远程链接。这样的事件很常见   限时,促销服务和属于的资源   个人不再在服务器的网站上工作。它不是   必须将所有永久不可用的资源标记为"已消失"要么   保持标记任何时间长度 - 留给   服务器所有者的自由裁量权。

我认为这意味着资源现在肯定不存在,并且将来不会存在,给出你想要的永久性,除非另有说明,否则它也是可缓存的。

通常情况下,我不需要知道它之前就已经存在过了#34;我只是知道它现在并不存在,当我要求提供有关它的信息时,它如果我再次请求,将来不会存在。如果我确实需要了解某些类别在过去从未存在过(例如类别的黑名单),我可能想要一个单独的显式请求,我可以使用它来获取所有这些类别,而不是必须检查每个类别在运行时间。