HTTP缓存
HTTP有强缓存和协商缓存两种,这两种缓存都是用于提升网页加载速度和性能的缓存机制。
强缓存
强缓存主要依赖于HTTP响应header中的Expires和Cache-Control字段,如果这两个字段符合使用强缓存,则不会再向服务器发起请求,直接使用缓存内容,返回200状态码。
expires
Expires,里面存放的是未来的一个时间,在该时间结束前都会使用缓存内容,返回200状态码。
Cache-Control
Cache-Control,里面存放的是一个相对时间,在相对时间内都会使用缓存内容,返回200状态码。
二者同时存在
二者同时使用时,catche-Control优先级高于expires,因为Cache-Control(http1.1)提供了比Expires(http1.0)更细粒度的控制选项。
协商缓存
协商缓存通过向服务器发送请求并验证缓存资源是否仍然有效.验证成功服务器会返回304状态码,告诉浏览器继续使用缓存资源,验证失败重新获取资源返回200状态码。协商缓存的实现主要依赖于HTTP请求头中的If-Modified-Since、If-None-Match字段和HTTP响应头中的Last-Modified、ETag字段,如果匹配成功返回304,使用本地缓存资源。如果匹配不成功,服务器返回新的资源(通常为200状态码),并更新Last-Modified或ETag,以便在后续请求中进行验证。。
Last-Modified
Last-Modified是在响应中返回资源的最后修改时间。浏览器会在下次请求头添加一个If-Modified-Since即Last-Modified的值,进行比对。
Etag
Etag通常是资源内容的哈希值。浏览器在下次请求时请求头添加一个If-None-Match头部即Etag值,进行比对判断是否匹配。
二者同时存在
当同时提供ETag和Last-Modified时,优先使用ETag进行验证,因为它提供了更精确的资源验证。
图解
如果强缓存和协商缓存同时配置,图解
http缓存作用
提高性能;减少从源头查数据的过程,提高请求响应时间。
减少服务器压力;通过提供的缓存内容减少对服务器的负载。
减少带宽;通过缓存减少网络传输的数据量,极大减少带宽的使用。
HTTP和HTTPS区别
安全性
- HTTP:连接是无状态的,明文传输的协议,所以传输的数据都是不加密的,容易被窃取。
- HTTPS:使用SSL/TLS协议来进行加密传输的,连接在数据据传输过程中都是加密状态,保证了数据传输中的安全。
证书管理
- HTTP: 不需要证书
- HTTPS:需要CA证书进行加密解密操作,所以需要配置证书。
端口号
- HTTP: 默认端口号80
- HTTPS: 默认端口号443
资源消耗
- HTTP: 资源消耗较小.
- 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常用状态码
- 200: 表示请求成功,服务器成功处理了请求。
- 201: 表示POST请求已经成功,并在服务器上创建了新资源。
- 204: 表示请求成功,但是服务器没返回任何内容。
- 301: 永久重定向。表示请求资源已经被永久移动到新位置,将来任何请求都应该使用新的URL。
- 302: 临时重定向。表示请求资源临时移动到了新位置,未来请求还在原来的URL上。
- 303: 查看其它位置。表示请求资源存在另一个url。通常用于执行POST/PUT请求时可能引起服务器发生了变化后,将客户端重定向到一个新的资源。
- 304: 未修改。使用协商缓存。
- 400: 服务器无法理解请求语法,请求语法有错误。
- 401: 表示客户端出现错误,缺乏目标资源要求的身份凭证。
- 403: 服务器拒绝请求,无权限访问。与401的区别是这里已经提供了身份凭证,但是没权限被服务器拒绝了。
- 404: 请求的资源不存在。
- 405: 表示请求方法不被允许
- 500: 表示服务器内部发生了错误,无法完成请求。
- 503: 表示服务器无法处理当前请求,通常是服务器处于过载或者维护的状态。
三次握手四次挥手
握手
- 第一次握手:客户端告诉服务器“我想建立连接”。
- 第二次握手:服务器告诉客户端“我同意建立连接”。
- 第三次握手:客户端告诉服务器“我已收到确认,连接可以开始了”。
挥手
- 第一次挥手:客户端表示“我发送完了,不发了”。
- 第二次挥手:服务器表示“我知道你不发了”。
- 第三次挥手:服务器表示“我也不发了”。
- 第四次挥手:客户端表示“我知道你不发了,关闭连接”。