代码之家  ›  专栏  ›  技术社区  ›  Tyler Carter

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

  •  11
  • Tyler Carter  · 技术社区  · 15 年前

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

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

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

    6 回复  |  直到 15 年前
        1
  •  23
  •   John Feminella    15 年前

    其中许多在REST风格的API使用中本质上是有用的。例如:

    • 200(OK): 你要了一个资源。就在这里!

    • 201(创建): 你让我做一个新的资源。我做到了!这是你下次可以去问我的地方。

    • 202(接受): 你让我做点什么,但要花一段时间,所以别等了。在这里你可以去检查状态。

    • 300(多种选择): 你要求什么,但你不够具体。你指的是哪一个?

    • 301(永久移动): 你要的东西,但现在在别的地方。就在这里。

    • 302(发现): 你要了点什么,但现在在别的地方。在这里。

    • 304(未修改): 你在这之前要求过什么,但自从上次你问我以后就没变过。

    • 400(错误请求): 你让我做的事有点不对劲。修正你所说的,然后再试一次。

    • 401(未经授权): 在我完成这个请求之前,我需要你确认一下你的身份。[注意:这是一个更不幸的命名标题。它应该是真正的标题 未经认证的 ;403更像 未经授权的 ]

    • 403(禁止): 你要了一些你不允许拥有的东西。

    • 404(未找到): 您请求了一个资源,但没有一个符合您的描述。

    • 500(服务器错误): 出了点问题,所以我现在不能给你你想要的。很抱歉。

    • 501(未实施): 我现在不支持这种要求。

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

        2
  •  4
  •   Steven    15 年前

    更准确地说,这些只是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,因为毕竟它发现 索引文件 .但是很明显,仍然会有一些您想要通信的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状态和位置头放在一个页面上,而该页面是用来接收发布数据的。我以前在这方面遇到过一些麻烦。
    • 304 Not Modified 通常根据您的Apache设置自动发送。在正常情况下,大多数浏览器都包括在用户计算机上缓存请求项的日期/时间。ETags和其他头段用于此目的。如果Apache判断服务器的相应文件从那时起就没有更改过,那么Apache通常会发送一个304文件,不包含任何内容,它只告诉客户机使用缓存版本。
    • 401 Unauthorized 当用户试图访问网站上的受限分区时发送。有些旧的HTML功能和服务器技术支持本机用户名/密码提示,在取消或未授权提示时发送401状态代码。现在大多数人都为用户身份验证和权限管理编写自己的PHP实现,因此Apache通常不会自行发送401。您可以手动发送状态以指示访问该页需要更多权限。
    • 400 Bad Request 是由Apache发送的,如果它收到一个它无法理解的请求。您通常不必担心手动发送。
    • 403 Forbidden 当用户试图访问一个他们无法访问的区域时,即使有适当的身份验证(可能是由于地理、IP或禁止限制),也会被一些人使用。我不自己用,我只是用401和404来填。
    • 5xx . 500系列是您作为开发人员根本看不到的代码。这意味着您的代码或服务器做了一些坏的事情。如果您有一个足够口径的服务器或负载平衡系统,并且代码中没有错误,那么您将永远不会看到500系列。
        3
  •  1
  •   Quentin    15 年前

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

        4
  •  1
  •   Adam Hopkinson    15 年前

    我认为你所说的使用头文件服务或提供一个RESTfulWebService?

    你需要的是状态码,而不是标题。我常用的是:

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

    当然,对于RESTfulWebservices,您可以将文本更改为更具描述性的,并在正文中提供描述。

    然后有:

    418 I'm a teapot
    
        5
  •  1
  •   Pascal MARTIN    15 年前

    快速浏览该列表 (状态代码的) ,这是我经常用的 (我的工作是做PHP Web开发) :

    这是我能用的 (尤其是休息时) :

        6
  •  0
  •   Annie    15 年前

    我用得最多的是:

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