HTTP相关知识总结

157 阅读6分钟

HTTP缓存

HTTP有强缓存和协商缓存两种,这两种缓存都是用于提升网页加载速度和性能的缓存机制。

强缓存

强缓存主要依赖于HTTP响应header中的ExpiresCache-Control字段,如果这两个字段符合使用强缓存,则不会再向服务器发起请求,直接使用缓存内容,返回200状态码。

expires

Expires,里面存放的是未来的一个时间,在该时间结束前都会使用缓存内容,返回200状态码。

image.png

Cache-Control

Cache-Control,里面存放的是一个相对时间,在相对时间内都会使用缓存内容,返回200状态码。

image.png

二者同时存在

二者同时使用时,catche-Control优先级高于expires,因为Cache-Control(http1.1)提供了比Expires(http1.0)更细粒度的控制选项。

协商缓存

协商缓存通过向服务器发送请求并验证缓存资源是否仍然有效.验证成功服务器会返回304状态码,告诉浏览器继续使用缓存资源,验证失败重新获取资源返回200状态码。协商缓存的实现主要依赖于HTTP请求头中的If-Modified-SinceIf-None-Match字段和HTTP响应头中的Last-ModifiedETag字段,如果匹配成功返回304,使用本地缓存资源。如果匹配不成功,服务器返回新的资源(通常为200状态码),并更新Last-ModifiedETag,以便在后续请求中进行验证。。

Last-Modified

Last-Modified是在响应中返回资源的最后修改时间。浏览器会在下次请求头添加一个If-Modified-Since即Last-Modified的值,进行比对。

Etag

Etag通常是资源内容的哈希值。浏览器在下次请求时请求头添加一个If-None-Match头部即Etag值,进行比对判断是否匹配。

二者同时存在

当同时提供ETagLast-Modified时,优先使用ETag进行验证,因为它提供了更精确的资源验证。

图解

如果强缓存和协商缓存同时配置,图解

image.png

http缓存作用

提高性能;减少从源头查数据的过程,提高请求响应时间。

减少服务器压力;通过提供的缓存内容减少对服务器的负载。

减少带宽;通过缓存减少网络传输的数据量,极大减少带宽的使用。

HTTP和HTTPS区别

安全性

  1. HTTP:连接是无状态的,明文传输的协议,所以传输的数据都是不加密的,容易被窃取。
  2. HTTPS:使用SSL/TLS协议来进行加密传输的,连接在数据据传输过程中都是加密状态,保证了数据传输中的安全。

证书管理

  1. HTTP: 不需要证书
  2. HTTPS:需要CA证书进行加密解密操作,所以需要配置证书。

端口号

  1. HTTP: 默认端口号80
  2. HTTPS: 默认端口号443

资源消耗

  1. HTTP: 资源消耗较小.
  2. HTTPS: 因为需要对数据进行加密解密操作,所以对计算机资源消耗更大

HTTP

HTTP/1.0

功能:

1.新增了POST/PUT/DELETE等请求方式。

2.增加了请求头响应头的概念。

缺点:

1.无连接:每次请求都需要重新连接。

2.队头阻塞:下一次的请求必须在上次到达后才可以发送,如果上一个响应丢失,后续就会阻塞。

HTTP/1.1

改进:

1.新增Connection:keep-alive保持长连接,避免每次请求重新建立连接的开销

2.新增了Cache-control,支持强缓存,协商缓存

3.支持上传下载断点续传

4.支持管道化请求,请求可以并行传输

HTTP/2.0

1.多路复用:允许在一个连接上发送多个请求和响应,不需要等待上一个请求的响应才能发送下一个请求,显著提高数据传输效率。

2.头部压缩:使用HPACK算法进行头部压缩,减少了头部传输的数据量

3.服务器推送:服务端可主动向客户端推送数据,向客户端提前发送可能需要的资源。

4.二进制分帧:新增了不同于1.1的二进制协议,使得解析更加高效,提高传输效率。

5.默认使用TLS加密传输数据,提高传输安全性

HTTP/3.0

1.基于QUIC协议,具有更快建立连接,多路复用,更低的延迟

2.基本所有保温都需要经过认证,保障安全性

HTTP常用状态码

  1. 200: 表示请求成功,服务器成功处理了请求。
  2. 201: 表示POST请求已经成功,并在服务器上创建了新资源。
  3. 204: 表示请求成功,但是服务器没返回任何内容。
  4. 301: 永久重定向。表示请求资源已经被永久移动到新位置,将来任何请求都应该使用新的URL。
  5. 302: 临时重定向。表示请求资源临时移动到了新位置,未来请求还在原来的URL上。
  6. 303: 查看其它位置。表示请求资源存在另一个url。通常用于执行POST/PUT请求时可能引起服务器发生了变化后,将客户端重定向到一个新的资源。
  7. 304: 未修改。使用协商缓存。
  8. 400: 服务器无法理解请求语法,请求语法有错误。
  9. 401: 表示客户端出现错误,缺乏目标资源要求的身份凭证。
  10. 403: 服务器拒绝请求,无权限访问。与401的区别是这里已经提供了身份凭证,但是没权限被服务器拒绝了。
  11. 404: 请求的资源不存在。
  12. 405: 表示请求方法不被允许
  13. 500: 表示服务器内部发生了错误,无法完成请求。
  14. 503: 表示服务器无法处理当前请求,通常是服务器处于过载或者维护的状态。

三次握手四次挥手

握手

  • 第一次握手:客户端告诉服务器“我想建立连接”。
  • 第二次握手:服务器告诉客户端“我同意建立连接”。
  • 第三次握手:客户端告诉服务器“我已收到确认,连接可以开始了”。

挥手

  • 第一次挥手:客户端表示“我发送完了,不发了”。
  • 第二次挥手:服务器表示“我知道你不发了”。
  • 第三次挥手:服务器表示“我也不发了”。
  • 第四次挥手:客户端表示“我知道你不发了,关闭连接”。