http协议状态码详解和用法完整版

http协议状态码详解

知兮丶青
阅读(1034) 2017-12-09
http协议状态码详解和用法完整版
http协议状态码详解和用法完整版

开发中常常遇到状态码,遇到了又被忘记而且翻阅资料。今天在此整理编辑这些状态码含义和用法。


状态码含义

HTTP状态码(HTTP Status Code)是当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。


下面是常见的和开发常遇到的HTTP状态码:

  • 200 - 请求成功

  • 301 - 永久移动

  • 400 - 错误请求

  • 404 - 未找到

  • 415 - 不支持的媒体类型

  • 500 - 服务器内部错误


1**信息,服务器收到请求,需要请求者继续执行操作

100    Continue(继续)    客户端应继续其请求

101    Switching Protocols(切换协议)    服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议


2**成功,操作被成功接收并处理

200    OK(请求成功)    一般用于GET与POST请求

201    Created(已创建)    成功请求并创建了新的资源

202    Accepted(已接受)    已经接受请求,但未处理完成

203    Non-Authoritative Information(非授权信息)    请求成功。但返回的meta信息不在原始的服务器,而是一个副本

204    No Content(无内容)    服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档

205    Reset Content(重置内容)    服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域

206    Partial Content(部分内容)    服务器成功处理了部分GET请求


3**重定向,需要进一步的操作以完成请求

300    Multiple Choices(多种选择)    请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择

301    Moved Permanently(永久移动)    请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替

302    Found(临时移动)    与301类似。但资源只是临时被移动。客户端应继续使用原有URI

303    See Other(查看其它地址)    与301类似。使用GET和POST请求查看

304    Not Modified(未修改)    所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源

305    Use Proxy(使用代理)    所请求的资源必须通过代理访问

306    Unused已经被废弃的HTTP状态码

307    Temporary Redirect(临时重定向)    与302类似。使用GET请求重定向


4**客户端错误,请求包含语法错误或无法完成请求

400    Bad Request(错误请求)    客户端请求的语法错误,服务器无法理解

401    Unauthorized(未授权)    请求要求用户的身份认证

402    Payment Required    保留,将来使用

403    Forbidden(已禁止)    服务器理解请求客户端的请求,但是拒绝执行此请求

404    Not Found(未找到)    服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面

405    Method Not Allowed(方法禁用)    客户端请求中的方法被禁止

406    Not Acceptable(不接受)    服务器无法根据客户端请求的内容特性完成请求

407    Proxy Authentication Required(需要代理授权)    请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权

408    Request Time-out(请求超时)    服务器等待客户端发送的请求时间过长,超时

409    Conflict(冲突)    服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突

410    Gone(已删除)    客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置

411    Length Required(需要有效长度)    服务器无法处理客户端发送的不带Content-Length的请求信息

412    Precondition Failed(未满足前提条件)    客户端请求信息的先决条件错误

413    Request Entity Too Large(请求实体过大)    由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息

414    Request-URI Too Large(请求的 URI 过长)    请求的URI过长(URI通常为网址),服务器无法处理

415    Unsupported Media Type(不支持的媒体类型)    服务器无法处理请求附带的媒体格式

416    Requested range not satisfiable(请求范围不符合要求)    客户端请求的范围无效

417    Expectation Failed(未满足期望值)    服务器无法满足Expect的请求头信息


5**服务器错误,服务器在处理请求的过程中发生了错误

500    Internal Server Error(服务器内部错误)    服务器内部错误,无法完成请求

501    Not Implemented(尚未支持)    服务器不支持请求的功能,无法完成请求

502    Bad Gateway(错误网关)    充当网关或代理的服务器,从远端服务器接收到了一个无效的请求

503    Service Unavailable(服务不可用)    由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中

504    Gateway Time-out(网关超时)    充当网关或代理的服务器,未及时从远端服务器获取请求

505    HTTP Version not supported(HTTP 版本不受支持)    服务器不支持请求的HTTP协议的版本,无法完成处理


php发送状态码

php发送状态码函数

/**
 * 定义Http协议状态码
 * HTTP Protocol defined status codes
 * @param int $code
 */
function send_http_status($code) {
    $_status = array(
        // Informational 1**
        100 => 'Continue',
        101 => 'Switching Protocols',

        // Success 2**
        200 => 'OK',
        201 => 'Created',
        202 => 'Accepted',
        203 => 'Non-Authoritative Information',
        204 => 'No Content',
        205 => 'Reset Content',
        206 => 'Partial Content',

        // Redirection 3**
        300 => 'Multiple Choices',
        301 => 'Moved Permanently',
        302 => 'Found',  // 1.1
        303 => 'See Other',
        304 => 'Not Modified',
        305 => 'Use Proxy',
        // 306 is deprecated but reserved
        307 => 'Temporary Redirect',

        // Client Error 4**
        400 => 'Bad Request',
        401 => 'Unauthorized',
        402 => 'Payment Required',
        403 => 'Forbidden',
        404 => 'Not Found',
        405 => 'Method Not Allowed',
        406 => 'Not Acceptable',
        407 => 'Proxy Authentication Required',
        408 => 'Request Timeout',
        409 => 'Conflict',
        410 => 'Gone',
        411 => 'Length Required',
        412 => 'Precondition Failed',
        413 => 'Request Entity Too Large',
        414 => 'Request-URI Too Long',
        415 => 'Unsupported Media Type',
        416 => 'Requested Range Not Satisfiable',
        417 => 'Expectation Failed',

        // Server Error 5**
        500 => 'Internal Server Error',
        501 => 'Not Implemented',
        502 => 'Bad Gateway',
        503 => 'Service Unavailable',
        504 => 'Gateway Timeout',
        505 => 'HTTP Version Not Supported',
        509 => 'Bandwidth Limit Exceeded'
    );
    if(isset($_status[$code])) {
        header('HTTP/1.1 '.$code.' '.$_status[$code]);
    }
}

如何使用

//发送404
send_http_status(404);
//发送500
send_http_status(500);

如下图返回:404 Not Found

404 Not Found.jpg


java发送状态码

java使用HttpServletResponse发送状态码

来看下java的HttpServletResponse接口源代码片段

public interface HttpServletResponse extends ServletResponse {
    int SC_CONTINUE = 100;
    int SC_SWITCHING_PROTOCOLS = 101;
    int SC_OK = 200;
    int SC_CREATED = 201;
    int SC_ACCEPTED = 202;
    int SC_NON_AUTHORITATIVE_INFORMATION = 203;
    int SC_NO_CONTENT = 204;
    int SC_RESET_CONTENT = 205;
    int SC_PARTIAL_CONTENT = 206;
    int SC_MULTIPLE_CHOICES = 300;
    int SC_MOVED_PERMANENTLY = 301;
    int SC_MOVED_TEMPORARILY = 302;
    int SC_FOUND = 302;
    int SC_SEE_OTHER = 303;
    int SC_NOT_MODIFIED = 304;
    int SC_USE_PROXY = 305;
    int SC_TEMPORARY_REDIRECT = 307;
    int SC_BAD_REQUEST = 400;
    int SC_UNAUTHORIZED = 401;
    int SC_PAYMENT_REQUIRED = 402;
    int SC_FORBIDDEN = 403;
    int SC_NOT_FOUND = 404;
    int SC_METHOD_NOT_ALLOWED = 405;
    int SC_NOT_ACCEPTABLE = 406;
    int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
    int SC_REQUEST_TIMEOUT = 408;
    int SC_CONFLICT = 409;
    int SC_GONE = 410;
    int SC_LENGTH_REQUIRED = 411;
    int SC_PRECONDITION_FAILED = 412;
    int SC_REQUEST_ENTITY_TOO_LARGE = 413;
    int SC_REQUEST_URI_TOO_LONG = 414;
    int SC_UNSUPPORTED_MEDIA_TYPE = 415;
    int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
    int SC_EXPECTATION_FAILED = 417;
    int SC_INTERNAL_SERVER_ERROR = 500;
    int SC_NOT_IMPLEMENTED = 501;
    int SC_BAD_GATEWAY = 502;
    int SC_SERVICE_UNAVAILABLE = 503;
    int SC_GATEWAY_TIMEOUT = 504;
    int SC_HTTP_VERSION_NOT_SUPPORTED = 505;

    ....

    void sendError(int var1, String var2) throws IOException;

    void sendError(int var1) throws IOException;

    ....

}

如何使用

//发送404(推荐)
response.sendError(HttpServletResponse.SC_NOT_FOUND);
//或者 - 发送404
response.sendError(404);
//或者 - 自定义显示错误
response.sendError(404,"自定义错误 - Not Found");

可以使用HttpServletResponse.SC_NOT_FOUND来获取404 code。如图输入也一样。

404请求.jpg

默认输出:HTTP Status 404 -

404 Not Found.jpg

使用第二个参数可以在默认404页面输出自定义错误,如图:HTTP Status 404 - 自定义错误 - Not Found

404 Not Found自定义错误.jpg




zip icon
php发送http协议状态码函数.zip a52bde63e89171743f68db831a5fb7b1

已下载:109

原创文章,转载请注明出处:https://www.weizhixi.com/article/25.html