因此,如果您查看HTTP 状态代码列表,可能其中有一些在编程时会很有用。服务器可能会处理一些事情,比如协议,但其中很多代码可能有助于告诉浏览器页面的实际状态。
所以,我的问题是我们应该关注这些状态代码中的哪一个?我们应该检查哪些要发送,哪些很可能永远不会在常规应用程序编程中使用。
如果您好奇,这属于 PHP 编程的范围,但它可能也适用于其他语言。
因此,如果您查看HTTP 状态代码列表,可能其中有一些在编程时会很有用。服务器可能会处理一些事情,比如协议,但其中很多代码可能有助于告诉浏览器页面的实际状态。
所以,我的问题是我们应该关注这些状态代码中的哪一个?我们应该检查哪些要发送,哪些很可能永远不会在常规应用程序编程中使用。
如果您好奇,这属于 PHP 编程的范围,但它可能也适用于其他语言。
其中许多在本质上对 REST 风格的 API 使用很有用。例如:
200(OK):您请求资源。这里是!
201(已创建):您要求我制作新资源。我做到了!下次你可以去这里问我。
202(接受):你让我做某事,但需要一段时间,所以不要等。您可以在此处查看状态。
300(多选):你要求的东西,但你不够具体。你说的是哪一个?
301(永久移动):你要求的东西,但它现在在别的地方。这就是它的去向。
302(找到):你要求的东西,但它目前在其他地方。这里是。
304(未修改):您在此之前要求过一些东西,但自从您上次问我以来,它没有改变。
400(错误请求):您要求我执行的操作有问题。修正你所说的,然后再试一次。
401(未经授权):我需要您先表明身份,然后才能完成此请求。[注意:这是更不幸的命名标题之一。它真的应该被命名为Unauthenticated;403 更像是Unauthorized。]
403(禁止):你要求你不被允许拥有的东西。
404(未找到):您要求提供资源,但没有与您的描述相符的资源。
500(服务器错误):出了点问题,所以我现在不能给你你要求的东西。对于那个很抱歉。
501(未实现):我现在不支持这种请求。
503(服务不可用):我现在无法响应请求。
更准确地说,这些只是 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 状态代码。例如,如果您在index.php
使用 .htaccess 或您的 Apache 设置路由所有请求时通过一个中央执行脚本,则 Apache 几乎不会自行返回 404,因为毕竟它已经找到index.php
. 但很明显,仍然会有一些你想要传达的 URI 不会通向任何地方,你需要为此发送自己的 404 状态标头。301 Moved Permanently
和302 Found
(通常称为“临时移动”)。这两个指示浏览器查找Location
标题并将用户重定向到那里指定的 URL。大多数 PHP 框架都有自己的 HTTP 重定向函数,这些函数也处理标头。原生 PHP 重定向header('Location: http://www.google.com');
会自动将 HTTP 状态更改为 302。我从未真正深入了解 302 和 301 之间的区别,但我读过 301 对搜索引擎优化要好得多,所以我尝试始终使用 301。也许其他人可以启发确切的区别是什么。需要注意的一件事是避免将 301/302 状态和 Location 标头放在旨在接收 POST 数据的页面上。过去我遇到了一些麻烦。304 Not Modified
通常根据您的 Apache 设置自动发送。正常情况下的大多数浏览器都包含请求的项目在用户计算机上缓存的日期/时间。ETag 和其他标头用于此目的。如果 Apache 判断服务器对应的文件从那时起没有变化,Apache 经常会发送一个没有内容的 304,这只是告诉客户端使用缓存的版本。401 Unauthorized
当用户尝试访问网站上的受限部分时发送。有一些旧的 HTML 功能和服务器技术支持本机用户名/密码提示,当提示被取消或未授权时会发送 401 状态代码。现在大多数人都为用户身份验证和权限管理编写自己的 PHP 实现,因此 Apache 并不经常自行发送 401。您可以手动发送状态以指示需要更多权限才能访问该页面。400 Bad Request
如果 Apache 收到它无法理解的请求,则它会发送。您通常不必担心手动发送它。403 Forbidden
当用户试图访问他们无法访问的区域时,某些人会使用它,即使由于地理、IP 或禁令限制而进行了适当的身份验证。我自己不使用,只是用401和404填写。5xx
. 500 系列是您作为开发人员真正看不到的代码。这意味着您的代码或服务器做了坏事。如果您有足够口径的服务器或负载平衡系统,并且代码中没有错误,那么您将永远看不到 500 系列。好吧,这些是状态代码,而不是标题,但它们中的任何一个都可能有用(尽管 5xx 系列不太可能)。
快速浏览该列表(状态代码),这是我经常使用的那些(我正在做 PHP Web 开发作为我的工作):
200 OK
: 几乎总是由 Apache 发送301 Moved Permanently
:通常由我发送(或 Apache,使用重写规则时)302 Found
:通常由我发送(或 Apache,使用重写规则时)304 Not Modified
:一般由Apache发送(或者前面的反向代理)401 Unauthorized
: 一般由 Apache 发送403 Forbidden
: 一般由 Apache 发送404 Not Found
: 由 Apache 和我发送——视情况而定410 Gone
: 一般是我发的500 Internal Server Error
: 由 Apache 和我发送;这是我通常在出现“技术”错误时使用的那个——即使它永远不应该发生^^以下是我可以使用的(尤其是在做 REST 时):
我认为您在谈论使用标头来提供文件或提供 RESTful Web 服务?
你会关注状态代码,而不是标题。我常用的有:
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
我用得最多的是: