1. HTTP 状态码 —— 用于返回结果
HTTP 状态码可以表示 HTTP 请求的返回结果、标记服务器端的处理是否异常、通知出现的错误等。但是也可能会出现状态码和状况的不一致的情况,不少返回的状态码响应都是错误的,但是用户可能察觉不到这点。比如 Web 应用程序内部发生错误,状态码依然返回 200 OK,这种情况也经常出现。
1.1 表示请求结果
状态码用来描述服务器返回的请求结果,用户可通过状态码,判断服务器是否正常处理了请求
1. 状态码类别:
状态码一般由三位组成,第一位指定了响应类别,共有以下 5 种:
状态码 | 类别 | 原因短语 |
---|---|---|
1xx | Informational (信息类状态码) | 接收的请求正在处理 |
2xx | Success(成功状态码) | 请求正常处理完毕 |
3xx | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4xx | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5xx | Server Error(服务器错误状态码) | 服务器处理请求出错 |
遵守状态码类别定义,服务器端可自行定义状态码。状态码共 60 余种,但常用的只有14种,将在下文介绍
1.2 2XX —— 成功状态码
1.2.1 —— 200 OK
表示客户端发送的请求被服务器端正常处理。随状态码一起返回的内容因请求方法的不同而改变(如GET方法——请求的资源实体作为响应返回,HEAD方法——请求资源实体的首部作为响应返回 )
1.2.2 —— 204 No Content
表示服务器接收的请求已成功处理,但是返回的响应报文中不含实体的主体部分。(不容许访问任何实体的主体)
使用情况: 只需要客户端向服务器发信息,客户端不需要收到新响应信息的情况
1.2.3 —— 206 Partial Content
表示客户端进行范围请求,服务器成功执行了这部分的 GET 请求。响应报文中包含 Content-Range 指定范围的实体内容
1.3 3XX —— 重定向
该状态码表示浏览器需要执行某些特殊处理以正确处理请求
1.3.1 —— 301 Moved Permanently
永久性重定向,表示请求的资源已被分配了新的 URI ,以后应使用新的 URI。即提示浏览器用新的 URI 替换旧的 URI 书签,即重新保存新的 URI。
1.3.2 —— 302 Found
临时性重定向,表示请求资源被临时分配了新的 URI,希望用户本次用新的 URI 访问
1.3.3 —— 303 See Other
表示请求对应的资源存在另一个 URI,应该使用 GET 方法定向获取请求的资源
与302区别: 与 302 相似,但是明确要求使用 GET 方法获取资源
实际使用时,当 301、302、303 状态码返回时,浏览器会把 POST 方法改为 GET 方法,并删除请求报文中的主体,再重新发送请求 (301、302 标准是禁止改变的,但是大家还是这么做)
1.3.4 ——304 Not Modified
该状态码表示客户端发送附带条件的请求时,服务器容许访问该资源,但是未满足附带条件。
附带条件的请求是指采用 GET 方法的请求报文中包含 If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since 中任一首部。
1.3.5 —— 307 Temporary Redirect
临时重定向,与 302 Found 含义相同。307 会遵守浏览器标准,不将 POST 变为 GET,但是每种浏览器都可能出现不同的情况。
1.4 4XX —— 客户端错误
1.4.1 —— 400 Bad Request
表示报文中存在语法错误,需要修改请求的内容再重新发放请求。
1.4.2 —— 401 Unauthorized
表示发送的请求需要包含通过 HTTP 认证(BASIC认证、DIGEST认证)的认证信息。返回 401状态码的响需要包含一个适用于被请求资源的 WWW-Authenticate 首部用以质询用户信息。浏览器首次接收到 401 响应,会弹出认证用的对话窗口。
1.4.3 —— 403 Forbidden
表示请求资源被服务器拒绝,服务器不必给出拒绝的详细理由。若想说明,可在实体的主体部分对原因进行描述。
出现403的可能原因: 未获得文件系统授权、访问权限出现问题等
1.4.4 —— 404 Not Found
表示服务器上无法找到请求的资源,也可能是服务器拒绝请求但是不想说明理由
5XX —— 服务器错误
1.5.1 —— 500 Internal Server Error
表示服务器在执行请求时发送错误,可能是 Web 应用存在 bug 或 某些临时的故障
1.5.2 —— 503 Service Unavailable
表示服务器暂时处于超负载或者真正进行停机维护,目前无法处理请求。若事先知道解除上述状况的时间,最好写入 RetryAfter首部 再返回给客户端。