写在前面
本文是个人对三元大神的文章拜读后的相关总结,三元大神的这篇文章干货满满,本文也会持续更新,原文链接:juejin.cn/post/684490…
URI(Uniform Resource Identifier) 统一资源标识符
什么是URI
- 作用:区分互联网上不同的资源。
- 它并不是我们常说的网址, 网址指的是URL, 实际上URI包含了URN和URL两个部分,由于 URL 过于普及,就默认将 URI 视为 URL 了。
URI的结构
- scheme: 表示协议名,比如http, https, file等等。后面必须和://连在一起。
- user:passwd@ 表示登录主机时的用户信息,不过很不安全,不推荐使用,也不常用。
- host:port表示主机名和端口。
- path:表示请求路径,标记资源所在位置。
- query:表示查询参数,为key=val这种形式,多个键值对之间用&隔开。
- fragment:表示 URI 所定位的资源内的一个锚点,浏览器可以根据这个锚点跳转到对应的位置。
URI 编码
URI 只能使用ASCII, ASCII 之外的字符是不支持显示的,而且还有一部分符号是界定符,如果不加以处理就会导致解析出错。 因此,URI 引入了编码机制,将所有非 ASCII 码字符和界定符转为十六进制字节值,然后在前面加个%。 如,空格被转义成了%20
HTTP状态码
HTTP 的状态码为三位数,被分为五类:
1xx
- 101 Switching Protocols。在HTTP升级为WebSocket的时候,如果服务器同意变更,就会发送状态码 101。
2xx
- 200 OK是见得最多的成功状态码。通常在响应体中放有数据。
- 204 No Content含义与 200 相同,但响应头后没有 body 数据。
- 206 Partial Content顾名思义,表示部分内容,它的使用场景为 HTTP 分块下载和断点续传,当然也会带上相应的响应头字段Content-Range。
3xx
- 301 Moved Permanently即永久重定向,对应着302 Found,即临时重定向。 比如你的网站从 HTTP 升级到了 HTTPS 了,以前的站点再也不用了,应当返回301,这个时候浏览器默认会做缓存优化,在第二次访问的时候自动访问重定向的那个地址。 而如果只是暂时不可用,那么直接返回302即可,和301不同的是,浏览器并不会做缓存优化。
- 304 Not Modified: 当协商缓存命中时会返回这个状态码。详见浏览器缓存
4xx
- 400 Bad Request: 开发者经常看到一头雾水,只是笼统地提示了一下错误,并不知道哪里出错了。
- 403 Forbidden: 这实际上并不是请求报文出错,而是服务器禁止访问,原因有很多,比如法律禁止、信息敏感。
- 404 Not Found: 资源未找到,表示没在服务器上找到相应的资源。
- 405 Method Not Allowed: 请求方法不被服务器端允许。
- 406 Not Acceptable: 资源无法满足客户端的条件。
- 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: 仅仅告诉你服务器出错了,出了啥错咱也不知道。
- 501 Not Implemented: 表示客户端请求的功能还不支持。
- 502 Bad Gateway: 服务器自身是正常的,但访问的时候出错了,啥错误咱也不知道。
- 503 Service Unavailable: 表示服务器当前很忙,暂时无法响应服务。