如果照片#123不存在,我应该向像/photo.php?id=123这样的请求抛出404吗?

时间:2010-08-27 17:53:37

标签: html http http-status-code-404

该脚本将从example.com/photo.php?id=123example.com/photos/123等网址调用,具体取决于是否启用了漂亮的网址。

如果照片#123不存在,对example.com/photos/123的请求应该抛出404错误。但是,example.com/photo.php?id=123呢?

5 个答案:

答案 0 :(得分:3)

您应该同时处理...?id=123.../123个网址,因为它们相同 - 它们只是形式有点不同。

是的,您应该抛出 404 - Not Found 错误导致给定资源不存在。但是,404页面看起来不应该像:

  

404找不到 - 你是@#$ @#$ @!

...photo.php这样的网址

404 应包含建议资源列表(用户可能想要访问的不同照片),某种搜索表单 - 换句话说:它应该是一个页面,允许我做一些事情而不是只是抛出错误信息。

答案 1 :(得分:3)

相关RFC为2616,特别是status codesrequestsURIs上的部分。具体来说,查询字符串被视为URI的部分,因此404是正确的响应,因为它意味着:

  

服务器找不到任何东西   匹配Request-URI。

如果您知道照片已被永久删除,则可以返回410

我不会返回200并说“找不到结果。”

答案 2 :(得分:1)

这取决于我想。

如果photo.php?id=123是一个显示id为123的照片的页面,那么是的,它应该抛出404. 404意味着在预期找到资源时找不到资源 - 这在语义上是正确的

然而,由于photo.php?id=123的语义意图很可能是一个页面正在搜索以获取ID为123的照片,那么返回200的完全正确并附上一条消息,说明没有返回任何结果。

最终,它并没有产生太大的差异。我不太熟悉HTTP响应代码如何影响搜索引擎索引页面的方式,但我怀疑404不会以相同的方式编入索引。如果没有任何内容可以显示,您可能不希望页面被编入索引。

TL; DR我会抛出404。

答案 3 :(得分:0)

是的,如果它从未存在过,你应该抛出404:

  

服务器未找到与Request-URI匹配的任何内容。没有说明该病症是暂时的还是永久性的。

但如果以前存在过,你应该回答410:

  

服务器上不再提供所请求的资源,并且不知道转发地址

来自Status Code Definitions

答案 4 :(得分:0)

我认为你应该抛出404.这可以很容易地使用.htaccess文件,

希望有所帮助,