1.100-199信息响应
100 Continue: 服务器通知浏览器之前一切正常,请客户端继续请求,如果请求结束,可忽略;
101 Switching Protocal: 针对请求头的Upgrade返回的信息。表明服务器正在切换到指定的协议。
Upgrade是HTTP1.1提出的升级机制,可以升级到其他协议。
如果使用,客户端需要设置如下:
Connection: Upgrade
Upgrade: protocol-name[/protocol-version]
服务器如果不同意直接忽略;如果同意,响应如下:
HTTP/1.1 101 Switching Protocols
Connection: upgrade
Upgrade: protocol-name[/protocol-version]
例如:1)升级WebSocket
客户端请求如下:
GET ws://example.com/ HTTP/1.1 Connection: Upgrade Upgrade: websocket Origin: http://example.com Sec-WebSocket-Version: 13 Sec-WebSocket-Key: d4egt7snxxxxxx2WcaMQlA== Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
服务器如果同意,响应如下:
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: gczJQPmQ4Ixxxxxx6pZO8U7UbZs=
2)升级到http2
客户端请求如下:
GET / HTTP/1.1 Host: example.com Connection: Upgrade, HTTP2-Settings Upgrade: h2c // h2c是http2的名称 HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>
服务端如果同意,响应如下:
HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: h2c
103 Early Hints: 此状态代码主要用于与Link
链接头一起使用,以允许用户代理在服务器仍在准备响应时开始预加载资源
2.200-299成功响应
200 OK: 请求成功
201 Created: 常用于POST,PUT 请求,表明请求已经成功,并新建了一个资源。并在响应体中返回路径。
202 Accepted: 请求已经接收到,但没有响应,稍后也不会返回一个异步请求结果。 该状态码适用于等待其他进程处理或者批处理的场景。
203 No-Authoritative Information: 表明响应返回的元信息(meta-infomation)和最初的服务器不同,而是从本地或者第三方获取的。
主要用于其他资源的镜像和备份。除了前面的情况,首选还是200。
204 No Content: 请求没有数据返回,但是头信息有用。用户代理(浏览器)会更新缓存的头信息。
205 Reset Content: 告诉用户代理(浏览器)重置发送该请求的文档。
206 Partical Content: 当客户端使用Range请求头时,返回该状态码。
// 通过curl发起http请求-->响应行为:HTTP/1.1 206 Partial Content curl -v --header "Range:bytes=0-3" http://www.baidu.com
名次解释: 用户代理: 代替用户运行的软件,如web浏览器,或者邮件阅读器。
3.300-399重定向消息
300 Multiple Choice: 返回多个响应,需要浏览器或者用户选择;
301 Moved Permanently: 请求资源的URL被永久的改变,新的URL会在响应的Location中给出。
浏览器到新的URL重新请求资源,因为有些客户端会把请求方式method改成GET。所以该状态码建议GET和HEAD方法中使用。
搜索引擎会更新地址到资源的链接(SEO中‘link-judge’被发送到新的URL)。
302 Found: 请求资源的URL被暂时修改到Location提供的URL。未来可能还会有新的修改。
浏览器会根据新的URL重新请求资源。有些客户端会把方法method改为GET,建议在GET和HEAD方法中使用。
搜索引擎不会更改URL到资源的。
// 应用 负载均衡
303 See Other: 服务通过返回的响应数据指导客户端通过GET方法去另一个URL获取资源。
通常用于POST或者PUT的请求返回结果,重定向到信息提示页面或者进度展示页面。
重定向页面的方法是GET方法。
304 Not Modified: 资源未变更。服务器根据请求头判断,需要资源未修改,只返回响应头;否则将资源一起返回。
发生场景:1)请求方法安全(如GET,HEAD请求)
2)条件请求并且使用了If-None-Match或者If-Modified-Since 的请求头
如果想使用200状态码达到相同304效果,需要强制缓存,需要额外的请求头:Cache-Control, Expires, Vary
307 Temporary Redirect: 临时重定向。基本和302相同。
唯一的区别是这个状态码严格禁止浏览器到新URL请求资源时修改原来的请求方式和请求体。
就是说原来使用POST,这次还是要使用POST。
如果想要用PUT方法去修改一个服务器上没有的资源,可以用303状态码
如果想要把一个POST方法改为GET,请使用303。
308 Permanent Redirect: 永久重定向。基本和301相同。但是严格禁止修改请求方式和请求体。
4. 400-499 客户端错误响应
400 Bad Request: 请求语法有问题,服务器无法识别。
没有host请求头字段,或者设置了超过一个的host请求头字段。
401 UnAuthorized: 客户端未授权该请求。缺乏有效的身份认证凭证,一般可能是未登陆。登陆后一般都解决问题。
403 Forbidden: 服务器拒绝响应。权限不足。
404 Not Found: URL无效或者URL有效但是没有资源。
405 Method Not Allowed: 请求方式Method不允许。但是GET和HEAD属于强制方式,不能返回这个状态码。
406 Not Acceptable: 资源类型不符合服务器要求。
407 Proxy Authorization Required: 需要代理授权。
408 Request Timeout:服务器将不再使用的连接关闭。响应头会有Connection: close。
426 Upgrade Required: 告诉客户端需要升级通信协议。
5. 500-599 服务器错误响应
500 Internal Server Error: 服务器内部错误,未捕获。
502 Bad Gateway: 服务器作为网关使用时,收到上游服务器返回的无效响应。
503 Service Unavailable: 无法服务。一般发生在因维护而停机或者服务过载。
一般还会伴随着返回一个响应头Retry-After: 说明恢复服务的估计时间。
504 Gateway Timeout: 网关超时。服务器作为网关或者代理,不能及时从上游服务器获取响应返回给客户端。
505 Http Version Not Supported: 发出的请求http版本服务器不支持。如果请求通过http2发送,服务器不支持http2.0,就会返回该状态码。