faymi / faymi.github.io

Faymi Blog ->
http://blog.eseeto.com
MIT License
0 stars 0 forks source link

HTTP知识整理 #4

Open faymi opened 4 years ago

faymi commented 4 years ago

网络基础TCP/IP

为了理解HTTP,我们必须要了解TCP/IP。 通常使用的网络是在TCP/IP协议族的基础上运作的,而HTTP属于它内部的一个子集。

TCP/IP协议族按层次分有四层:

HTTP的瓶颈

  1. 一条连接上只可发送一个请求。
  2. 请求只能从客户端开始。客户端不可以接收除响应之外的指令。
  3. 请求/响应首部未经压缩就发送。首部信息越多延迟越大。
  4. 发送冗长的首部。每次互相发送相同的首部造成的浪费较多。
  5. 可任意选择数据压缩格式。非强制压缩发送。
faymi commented 4 years ago

HTTP状态码备忘单

什么是 HTTP 状态码

Fernando Doglio在他的书中 - 使用NodeJS的REST API开发将状态代码定义为:

一个数字,总结了与之相关的响应。

当客户端向服务器发出请求时,服务器提供HTTP(超文本传输协议)响应状态代码,这使我们能够了解网站后端发生的情况,确定需要修复的错误。

HTTP 状态码

响应信息
1xx:临时回应,表示客户端请继续

1xx 的状态会被浏览器 HTTP 库直接处理掉,不会让上层应用知晓

成功
200 - OK:成功传输

请求成功

201 - Created:创建

资源已创建,服务器已确认。它对POST或PUT请求的响应很有用。此外,新资源可以作为响应正文的一部分返回。

204 - No content:没有内容

该操作请求成功,但没有返回任何内容。对于不需要响应主体的操作很有用,例如 DELETE 操作。

205 - Reset Content:重置内容

表示请求成功,但响应报文不含实体的主体部分,但是与 204 响应不同在于要求请求方重置内容。

重定向

3xx: 当服务器通知客户端请求的目标有变化,希望客户端进一步处理,将使用这些。

为什么需要重定向?

  1. 网站调整(如改变网页目录结构)。
  2. 网页被迁移到一个新地址。
  3. 网页扩展名改变。(如.php => .html)用户收藏夹或者搜索引擎数据库的就地址会返回404,导致流量损失;
  4. 多域名跳转到主站点。
301 - moved permanently:永久移动

用于通知浏览器所请求的文件已被移动,并且它应该从服务器提供的位置(响应的Location首部)请求文件,并记住该新位置以供将来参考。这只能用于HTTP GET和HEAD请求。

此资源已移至另一个位置,并返回该位置。当URL随着时间的推移而变化时(尤其是由于版本,迁移或其他一些破坏性更改),此标头特别有用,保留旧标头并将重定向返回到新位置允许旧客户端更新其引用自己的时间。

302 - found(找到):临时重定向

相似301; 但它是临时重定向。它将客户端从旧资源引导到新资源,但它不会告诉搜索引擎更新页面的索引(保存的还是旧地址的索引)。告诉客户端浏览另一个URL。

304- Not Modified:客户端缓存没有更新

产生的前提:客户端本地已经有缓存的版本,并且在 Request 中告诉了服务端,当服务端通过时间或 tag,发现没有更新的时候,就会返回一个不含 body 的 304 状态码

307 - temporary redirect:暂时移动

临时重定向,和302含义类似,但是期望客户端保持请求方法不变向新的地址发出请求

客户端错误

4xx: 定义客户端错误,这是服务器认为Web浏览器出错的地方。

400 - bad request:不良请求

发出的请求有问题(例如,可能缺少一些必需的参数)。对400响应的良好补充可能是开发人员可用于修复请求的错误消息

401 - unauthorized:未经授权

当拥有请求的用户无法访问所请求的资源时,对身份验证特别有用。服务器响应www-authenticate,客户端请求首部Authenticate。

403 - forbidden:禁止 - 资源不可访问,但与401不同,身份验证不会影响响应。

通常在请求的文件有效但文件无法提供时发出,这通常是由于服务器端权限问题导致Web服务器不允许将文件提供给客户端。如IP被列入黑名单;同一IP地址发送请求过多,被服务器屏蔽;DNS解析错误等。

401 与 403 的区别:

404 - Not Found:请求的资源不存在

这可能是最常见且经常出现的错误。当Web浏览器请求服务器上不存在的文件时,会发生此问题。

405 - 方法不允许

不允许在资源上使用HTTP动词(例如POST,GET,PUT等) - 例如,在只读资源上执行PUT。

服务端错误

5xx: 定义服务器端错误。尽管客户端提供了有效请求,但这些都是服务器部分发生的错误。

500 - internal sever error:内部服务器错误

这是一个不幸的模糊通用错误代码。只要认为服务器遇到与任何更具体的错误代码不匹配的错误,就会发出它。

501 - Not Implemented:未实现

服务器要么不识别请求方法,要么不支持请求。

502 - Bad Gateway:错误网关

对用户访问请求的响应超时造成的。或当Web浏览器联系充当另一个服务器的代理的Web服务器并且从另一个服务器获得无效响应时,会发生这种情况。

503 - service unavailable:服务不可用

这通常在服务器暂时性错误(暂时处于超负载或正在停机维护)的情况下遇到,此时服务器无法处理请求,可以一会再试