小码哥《网络协议从入门到底层原理》笔记(十五):WebSocket、HTTPDNS、Cache

893 阅读2分钟

我的Github地址

小码哥《恋上数据结构与算法》笔记

极客时间《iOS开发高手课》笔记

iOS大厂面试高频算法题总结

iOS面试资料汇总

Socket

HTTP vs WebSocket

  • HTTP请求的特点:通信只能由客户端发起。所以,早期很多网站为了实现推送技术,所用的技术都是轮询
    • 轮询是指由浏览器每隔一段时间(如每秒)向服务器发出HTTP请求,然后服务器返回最新的数据给客户端
    • 为了能更好的节省服务器资源和带宽,并且能够更实时地进行通讯,HTML5规范中出现了WebSocket协议
  • WebSocketHTTP属于平级关系,都是应用层的协议
    • 其实TCP本身就是支持全双工通信的(客户端、服务器均可主动发消息给对方)
    • 只是HTTP的“请求-应答模式”限制了TCP的能力
  • WebSocket使用80(ws://)、443(wss://)端口,可以绕过大多数防火墙的限制
    • ws://example.com/wsapi
    • wss://secure.example.com/wsapi
  • HTTP不同的是,WebSocket需要先建立连接
    • 这就使得WebSocket成为一种有状态的协议,之后通信时可以省略部分状态信息
    • HTTP请求可能需要在每个请求都额外携带状态信息(如身份认证等)

WebSocket

  • WebSocket,是基于TCP的支持全双工通信的应用层协议
    • 在2011年由IETF标准化为RFC 6455,后由RFC 7936补充规范
    • 客户端、服务器,任何一方都可以主动发消息给对方
  • WebSocket的应用场景很多
    • 社交订阅、股票基金报价、体育实况更新、多媒体聊天、多玩家游戏等

WebSocket - 建立连接

HTTPDNS

缓存(Cache)

响应头

  • Cache-Control决定是否要做网络请求
  • Last-ModifiedETag决定是返回304还是200

Cache-Control

Last-Modified、ETag

Last-Modified vs ETag

If-None-Match、If-Modified-Since

缓存的使用流程