HTTP状态码表示客户端请求的请求结果、标记服务器是否发生异常、给出错误原因。
1. 状态码分类
状态码由3位数字和原因短语组成。
数字的第一位指定响应类别,后两位无指定意义。
标准的状态码总共有60多种。实际上经常使用的大概有14种。
2. 2xx成功
2xx的响应结果表示请求被成功处理了。
2.1 200 OK
在响应报文中,随状态码一起返回的信息会随着请求方法的不同而发生变化。比如,GET
方法会使得对应资源的资源实体作为响应返回;而HEAD
方法只产生携带首部信息的响应。
2.2 204 No Content
该状态码表示请求已经被成功执行,但是没有合适的资源返回,主体实体部分为空。当浏览器收到204
状态码时,页面不发生更新。
一般在只需要从客户端往服务器发送信息,而不需要服务器响应新内容时使用。
2.3 206 Partial Content
该状态码表示客户端进行范围请求(Range Request),而服务器成功执行了这部分的请求。响应报文中的Content-Range
字段指定了范围实体的内容。
这一状态在断点续传时常用。
3. 3xx重定向
3xx响应表示浏览器需要执行某种特殊的处理以正确处理请求。
3.1 301 Moved Permanently
永久性重定向。该状态码表示该资源已经被重新分配了新的URI(URL包含了URL)。后面对该资源的请求应该指向新的URL
3.2 302 Found
临时性重定向。该状态码表示请求的资源已经被分配了新的URI。希望用户本次能访问到新的URI。
和301 永久重定向相似。但302代表资源不是永久性移动,而是临时性的。也就是说,后面还有可能变化。
3.3 303 See Other
该状态码表示由于请求的对应资源存在另一个URI,应使用GET
方法定向获取那个资源。
303 和 302 功能类似。区别在于 303 明确要求浏览器使用GET方法获取新的URI。
当301、302、303响应状态码返回时,几乎所有浏览器会把POST改成GET,并删除请求报文内的主体,然后用GET发送新的请求。
3.4 304 Not Modified
该状态码发生在用户发送了携带Last-Modified-Since
首部字段的请求报文,且服务器对应的资源更新时间小于该字段指定的时间时,服务器返回304 Not Modified。
当浏览器有资源缓存和缓存时间(Last-Modified),但客户端将这个时间赋给Last-Modified-Since字段发给服务器,若服务器返回 304 表示没有更新的内容,浏览器上的缓存还可以用。注意,304和重定向没有关系,虽然它被划在3xx系。
3.5 307 Tempoary Redirect
临时重定向。该状态码和302有相同的含义。
4. 4xx客户端错误
4xx响应结果表明客户端发生了错误。
4.1 400 Bad Request
该状态码表示请求存在语法错误,比如URI写错了。
4.2 401 Unauthorized
该状态码表示发送的请求需要通过HTTP的认证。如果之前发送过一次请求,说明上次的认证失败了。当浏览器第一次收到401时,会弹出认证窗口。
4.3 403 Forbidden
该状态码代表对请求资源的访问被拒绝了。可能是发送方的IP没有被服务端允许,也有可能是对特定文件没有访问权限。
4.4 404 Not Found
一种人民群众喜闻乐见的状态码。它表示服务器上找不到请求的资源实体。不过当服务器不想提供响应时,也可以用这个状态。
5. 5xx服务器错误
5xx表明服务器本身发生错误。
5.1 500 Internal Server Error
该状态码表明在服务端执行请求时发生错误,可能是应用程序的bug。
5.2 503 Service Unavailable
该状态码表明服务器现在很忙或正在停机维护。如果能预计恢复服务的时间,应当在响应报文中捎上Retry-After
字段给浏览器。
最后要提醒的是,许多响应状态码和实际情况会不一致,比如发生服务器内部错误,但用户察觉不到,仍返回200
网友评论