http请求状态码
简介
HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。让我们通过本章的学习,好好了解一下状态码的工作机制。
1xx代表请求已接收,等待进一步处理
- 101 Switching Protocols。HTTP 升级 WebSocket,如果服务器同意变更,就会发送状态码 101。
2xx代表请求已处理并返回
- 200,ok,表示从客户端发来的请求在服务器端被正常处理了
- 204,no content,请求成功被处理不过没有返回信息,多用于客户端不需要更新的时候。常用语跨域时 Options 请求的试探。
- 206,partial content,表示客户端对服务器端资源的某一部分进行请求,响应报文由Content-Range指定范围的实体内容。常用语 HTTP 分块下载和断点续传。
3xx代表请求被转发
- 301,Moved Permanently,永久重定向,告诉客户端以后应从新地址访问. 比如你的网站从 HTTP 升级到了 HTTPS 了,以前的站点再也不用了,应当返回301,这个时候浏览器默认会做缓存优化,在第二次访问的时候自动访问重定向的那个地址。
- 302,Found,临时性重定向,302表示资源只是被临时移动了,已移动资源的URI将来仍可能被改动位置,PHP的默认Location重定向用的就是302。但是HTTP 1.1 有303 和307作为详细的补充,其实是对302的细化
- 303,See Other,303与302的功能相同,只是303状态码明确表示客户端应当采用GET方法获取资源。
- 304,Not Modified。该状态码表示客户端发送附带条件(附带条件的请求是指采用GET方法的请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一首部)的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3XX类别中,但是和重定向没有关系。
- 307,Temporary redirect,临时重定向,与302功能相同。307遵照浏览器标准不会从post换成get,但是对于处理响应时的行为,每种浏览器可能出现不同情况。
4xx代表客户端请求有语法错误或者无法实现
- 400,Bad Request,请求报文有语法错误。
- 401,Unauthorized,客户端请求没有经过授权,用户认证失败。
- 403,Forbidden,服务器端受到了请求但是拒绝提供服务,可能是未获得文件系统访问授权。
- 404,Not Found,该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
- 406 Not Acceptable: 资源无法满足客户端的条件。
- 405 Method Not Allowed: 请求方法不被服务器端允许。
- 408 Request Timeout: 服务器等待了太长时间。
- 409 Conflict: 多个请求发生了冲突。
- 413 Request Entity Too Large: 请求体的数据过大。
- 414 Request-URI Too Long: 请求行里的 URI 太大。
- 429 Too Many Request: 客户端发送的请求过多。
- 431 Request Header Fields Too Large请求头的字段内容太大。
5xx代表服务器端的错误
- 500,Internal Server Error,该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时的故障。
- 502,网关错误 (Bad gateway)。这个问题是由后端电脑之间不良的 IP 通讯造成的, 可能包括您正在尝试访问的网站的 Web 服务器。代表服务器自身是正常的,但访问的时候出错了,不知错误何在。
- 503,Service unavailable,该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入RetryAfter首部字段再返回给客户端。
- 504,Gateway Time-out,连接超时,服务器(不一定是web服务器)作为网关或代理,但没有及时从上游服务器收到请求。