谈一谈HTTP和WebSocket的区别( 二 )


 
HTTP缓存机制1.强缓存
缓存规则信息包含在header中,而强缓存的规则通常由Expires和Cache-Control这两个字段标明
Expire
Expires表示到期时间,一般在Response的header中标识,当第二次请求时间超过此时间,则判定为缓存过期,需重新向服务器请求数据,否则直接返回缓存数据 。这个字段存在的问题是这个时间是由服务器返回的时间,如果客户端和服务端时间存在误差,则会造成缓存机制的误差 。
【谈一谈HTTP和WebSocket的区别】Expires: Thu, 13 Sep 2018 02:08:54 GMTCache-Control Cache-Control标明缓存的持续时间,是一个相对值,比如max-age= 604800,表示缓存有效期可以持续604800秒即一周,在一周内再次请求这条数据,直接返回缓存数据 。Cache-Control常用取值有private、public、no-cache、max-age,no-store

  • max-age:即上面提到的表明缓存的持续时间;
  • private:表示客户端可以缓存数据,默认为private;
  • public:表示所有内容都将被缓存,客户端和代理服务器都可缓存;
  • no-cache:字段表示客户端需验证服务器响应是否有更改(即下面说到的对比缓存);
  • no-store:不允许缓存
Cache-Control: private, max-age=0, no-cache2.协商缓存
与强制缓存不同的是,协商缓存每次进行再请求时,需要先向服务器查询该缓存是否可用,如果缓存可用,则返回304状态码,通知客户端可以使用缓存,否则响应整片资源内容 。协商缓存有这几个字段来标识缓存规则:Last-Modified / If-Modified-Since 、Etag / If-None-Match
Last-Modified / If-Modified-Since
服务器在响应客户端请求时,头部通过Last-Modified 告诉客户端资源的最后修改时间,客户端再次请求时,头部字段携带If-Modified-Since告诉服务器,上次返回的资源最后修改时间,让服务器进行对比,若当前资源最后修改时间大于If-Modified-Since,则说明资源被改动了,响应整片资源,返回200状态码,否则返回304状态码,通知客户端可以使用缓存 。
Etag / If-None-Match
etag是服务器对资源的一种摘要,客户端请求时,返回响应中该字段告诉客户端缓存数据的标识 。客户端再次请求通过If-None-Match与服务器匹配,匹配成功说明缓存可用,返回304,若服务端对数据发生更改,则匹配不成功,重新响应资源和缓存规则信息(优先级大于Last-Modified / If-Modified-Since) 。###3.缓存机制总结
谈一谈HTTP和WebSocket的区别

文章插图
 
WebSocketWebSocket本质上一种计算机网络应用层的协议
WebSocket和HTTP相同点
  1. 都是基于TCP的应用层协议 。
  2. 都使用Request/Response模型进行连接的建立 。
  3. 在连接的建立过程中对错误的处理方式相同,在这个阶段WebSocket可能返回和HTTP相同的返回码 。
  4. 都可以在网络中传输数据 。
WebSocket和HTTP不同点
  1. WebSocket使用HTTP来建立连接,但是定义了一系列新的header域,这些域在HTTP中并不会使用 。
  2. WebSocket的连接不能通过中间人来转发,它必须是一个直接连接 。
  3. WebSocket连接建立之后,通信双方都可以在任何时刻向另一方发送数据 。
  4. WebSocket连接建立之后,数据的传输使用帧来传递,不再需要Request消息 。
  5. WebSocket的数据帧有序 。##使用WebSocket,而不是用Socket的原因: 因为整个浏览器都不支持直接调用系统底层的 Socket,基于浏览器的 Web 自然无法调用,只能使用封装的高级协议方案 —— WebSocket
最后如果你看到了这里,觉得文章写得不错就给个赞呗!欢迎大家评论讨论!如果你觉得那里值得改进的,请给我留言 。一定会认真查询,修正不足,定期免费分享技术干货 。喜欢的小伙伴可以关注一下哦 。谢谢!




推荐阅读