HTTP状态码“无内容”的含义

4
如果服务器或网站想要向特定国家的访问者显示消息“您所在的地理位置没有可用内容”,应该返回哪个HTTP状态码?
常规的200状态码太平凡了,204状态码不允许发送响应正文;403状态码是禁止访问的意思,这将会是过于强烈和不正确的信息。
这里的关键是使用正确的HTTP状态码返回自定义的“无内容”消息,不能使用200状态码,因为在这种情况下,响应正文是内容而不是错误消息。

HTTP 状态码应该与实际内容无关(但可以描述其内容,例如 206 表示部分内容,204 表示没有内容)。200 表示请求可以被处理并且一些内容(如任何字节或字符数据)可以被提供。对于将由主要浏览器解释的网页,应发出 200,因为存在 一些 被提供的内容(客户端看到的错误消息也算)。此外,为什么这很重要呢?我没有看到不发送旧的 200 所获得的好处。 - initramfs
@CPUTerminator - 问题在于法律上当服务器响应状态码为 200 时,响应体是一个内容,所以 "无内容" 这个信息本身就是一个内容,而不是错误信息。明白吗? - Ωmega
那就是我的观点...再重申一遍,你从发出一个200状态码中获得了什么好处? - initramfs
@CPUTerminator - 所以我需要这样的响应体来作为错误消息,因此响应代码必须是错误代码,而不是 200 OK - Ωmega
@CPUTerminator - 一些响应代码是错误代码。代码“200”不是错误代码... - Ωmega
显示剩余8条评论
1个回答

3

如果你想向最终用户显示错误消息而不是计算机程序,则我认为你没有其他选择,只能使用200

如果你想响应程序,那么更改reason-phrase似乎是正确的方式。

GET /non-existing-location HTTP/1.1
Host: localhost

HTTP/1.1 204 There is no content available for your geographical location
Date: Sun, 10 Nov 2013 16:23:32 GMT

3
我认为当响应代码是 204 时,浏览器(客户端)不会显示任何消息,也不会更改当前视图/页面,甚至不会将此请求添加到浏览历史记录中。 - Ωmega
1
这就是为什么我写道,如果你想向用户发送任何消息,你应该坚持使用 200 - KARASZI István

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接