程序员应关注哪些HTTP状态代码?

时间:2010-01-04 22:40:31

标签: php httprequest http-status-codes

所以,如果你看一下List of HTTP Status Codes,可能有很多在编程时会很有用。服务器可能会处理一些事情,比如协议,但是很多这些代码可以用来告诉浏览器页面的实际状态。

所以,我的问题是我们应该关注哪些状态代码?我们应该检查哪一个,以及哪些最有可能永远不会用于常规应用程序编程。

如果您感到好奇,这属于PHP编程的范围,但它也可能适用于其他语言。

6 个答案:

答案 0 :(得分:23)

其中许多对于REST风格的API使用具有内在的用处。例如:

  • 200(OK):您要求提供资源。在这里!

  • 201(已创建):您要我创建新资源。我做到了!这是你下次可以去找我的地方。

  • 202(接受):你让我做某事,但这需要一段时间,所以不要等。您可以在这里查看状态。

  • 300(多种选择):您要求提供一些内容,但您不够具体。你的意思是哪一个?

  • 301(永久移动):你问了什么,但现在却在其他地方。这是它去的地方。

  • 302(找到):你问了什么,但目前还在其他地方。在这里。

  • 304(未修改):您之前曾要求过一些内容,但自您上次询问我以来没有变更。

  • 400(错误请求):您要求我做的事情有问题。修复你说的话,然后再试一次。

  • 401(未经授权):我需要您在完成此请求之前表明身份。 [注意:这是一个更不幸的命名标题。它应该名为 Unauthenticated ; 403更像是未经授权。]

  • 403(禁止):您要求提供您不允许的内容。

  • 404(未找到):您要求提供资源,但没有符合您说明的资源。

  • 500(服务器错误):出了点问题,所以我现在无法告诉你你的要求。对此感到抱歉。

  • 501(未实施):我目前不支持此类请求。

  • 503(服务不可用):我现在无法回复请求。

答案 1 :(得分:4)

更确切地说,这些只是HTTP状态代码,而不是HTTP标头。标题传达了很多东西,并由客户端和服务器发送,超出了这个答案的范围。

其中一个HTTP标头,即服务器发送给客户端的第一个标头,如下所示:

HTTP/1.x 200 OK

或:

HTTP/1.x 404 Not Found

协议标识符HTTP/1.x之后出现的数字是所谓的状态代码,并在其后发送相应的状态消息。以下是我在PHP编程日中必须使用的状态代码:

  • 200 OK是迄今为止最常见的。这意味着一切都运行良好,你正在回应内容。
  • 404 Not Found由服务器在特定条件下自动发送,特别是当请求导致在服务器上找不到执行脚本时。有时,特别是如果您正在编写以特殊方式处理URI的框架,您将需要手动设置404状态代码。例如,如果您在使用.htaccess或Apache设置路由所有请求时有一个中央执行脚本index.php,那么Apache几乎永远不会自行返回404,因为毕竟它已找到{{ 1}}。但显然,仍然会有一些您想要通信的URI不会导致任何地方,您可能希望发送自己的404状态标题。
  • 301 Moved Permanently302 Found(更常见的是“暂时移动”)。这两个指示浏览器查找index.php标头并将用户重定向到其中指定的URL。大多数PHP框架都有自己的HTTP重定向功能,它们也可以处理标头。本机PHP重定向Location自动将HTTP状态更改为302.我从未真正深入理解302和301之间的区别,但我读过301对于搜索引擎优化来说要好得多,所以我试试总是使用301.也许其他人可以启发确切的区别是什么。需要注意的一件事是避免在打算接收POST数据的页面上放置301/302状态和Location标头。我过去遇到过一些麻烦。
  • 304 Not Modified通常会根据您的Apache设置自动发送。大多数浏览器在正常情况下包括在用户计算机上缓存所请求项目的日期/时间。 ETag和其他标头用于此目的。如果Apache判断服务器的相应文件从那时起没有改变,那么Apache通常会发送一个没有内容的304,这只会告诉客户端使用缓存版本。
  • 当用户尝试访问网站上的受限制部分时,会发送
  • 401 Unauthorized。有一些旧的HTML功能和服务器技术支持本机用户名/密码提示,当提示被取消或未经授权时,它会发送401状态代码。这些天大多数人都编写自己的PHP实现来进行用户身份验证和权限管理,因此Apache并不经常自行发送401。您可以手动发送状态,以指示访问该页面需要更多权限。
  • 如果Apache收到无法理解的请求,则会发送
  • 400 Bad Request。您通常不必担心手动发送它。
  • 当用户试图访问他们无法访问的区域时,某些人会使用
  • 403 Forbidden,即使由于地理,IP​​或禁止限制而进行了正确的身份验证。我自己不使用它,我只使用401和404填写。
  • 5xx。 500系列是您真正不想看到的开发人员代码。这意味着您的代码或服务器做了坏事。如果您有一个服务器或负载均衡系统,并且您的代码中没有错误,那么您将永远不会看到500系列。

答案 2 :(得分:1)

嗯,那些是状态代码,而不是标题,但它们中的任何一个都可能有用(尽管5xx系列不太可能)。

答案 3 :(得分:1)

快速浏览列表(状态代码),以下是我经常使用的(我正在做PHP web开发作为我的工作)

以下是我可以使用的(特别是在执行REST时)

答案 4 :(得分:1)

我是在谈论使用标头来提供文件服务还是提供RESTful网络服务?

您将关注状态代码,而不是标题。我经常使用的是:

200 OK
301 Moved Permanently
302 Found (temporary redirect)
400 Bad Request
403 Forbidden
404 Not found
500 Internal Server Error

当然,对于RESTful Web服务,您可以将文本更改为更具描述性,并在正文中提供说明。

然后是:

418 I'm a teapot

答案 5 :(得分:0)

我最常用的是:

  • 301 - 永久移动 - 如果资源永久移动到新网址,请使用此项。
  • 302 - 暂时移动 - 当您无法进行永久重定向时,使用此选项进行重定向。
  • 404 - 未找到。您的服务器应配置为针对无效网址提供此服务。你应该在你的日志中监控这些 - 太多的404s是一个不好推动的迹象。
  • 500 - 内部服务器错误。您的服务器应配置为在出现错误时正确发送这些服务器。您应该在日志中监控5xx错误。