一、HTTP在前端的地位
HTTP 是一种用作获取诸如 HTML 文档这类资源的协议。它是 Web 上进行任何数据交换的基础,同时,也是一种客户端---服务器(client-server)协议,也就是说,请求是由接受方------通常是 Web 浏览器------发起的。完整网页文档通常由文本、布局描述、图片、视频、脚本等资源构成。
二、HTTP,HTTPS与SSL
HTTP与HTTPS
|-----------|-----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| | HTTP | HTTPS |
| 是什么 | 一种用于分布式、协作式和超媒体信息系统的应用层协议 | 一种透过计算机网络进行安全通信的传输协议 |
| 发送过程 | 每次请求都需要建立新的 TCP 连接, 请求结束后连接会关闭。客户端直接发送 HTTP 请求给服务器, 如果服务器可用, 就返回 HTTP 响应, 过程简单快速。 | 客户端要验证服务器的数字证书和签名 CA, 确保服务器合法后, 通过"SSL 握手"协商加密算法, 建立安全连接。连接建立后才会发送 HTTPS 请求。请求结束也不会关闭连接, 能够复用连接。 |
| 与服务器的连接方式 | 无连接状态的协议,HTTP 直接建立在 TCP(传输控制协议)之上 | 先建立 SSL/TLS 安全连接, 再封装 HTTP 请求 |
| 安全性差异 | 明文传输,数据都是未加密的,安全性较差 | HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好 |
| 响应速度差异 | HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包 | TCP 的三个包+ ssl 握手需要的 9 个包=12个包 |
| 二者关系 | HTTPS前身 | HTTP 通信接口部分由 SSL 和 TLS 替代成为了HTTPS |
| | | |
SSL
|-------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------|
| | SSL |
| 是什么 | Secure Sockets Layer安全套阶层,提供私密性,信息完整性和身份认证 |
| 应用场景 | HTTPS |
| 协议结构 | |
| SSL记录协议层的作用是为高层协议提供基本的安全服务。 | SSL纪录协议针对HTTP协议进行了特别的设计,使得超文本的传输协议HTTP能够在SSL运行。纪录封装各种高层协议,具体实施压缩解压缩、加密解密、计算和校验MAC等与安全有关的操作。 |
| SSL握手协议层 SSL握手协议(SSL HandShake Protocol)、SSL密码参数修改协议(SSL Change Cipher Spec Protocol) SSL告警协议(SSL Alert Protocol) | 握手层的这些协议用于SSL管理信息的交换,允许应用协议传送数据之间相互验证,协商加密算法和生成密钥等。 |
二、OSI(Open System Interconnection)
HTTP协议位于应用层的一个网络传输协议,OSI参考模型提供了更加系统与全面的数据传输流程。
|--------------------------------------------------------------------|---------------|---------------------------------------------------------------------------------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|--------------------------------------------|
| TCP/IP参考模型 | 通信设备 | 协议 | OSI参考模型 | 功能 | 传输数据的单位 | 传输流程 |
| 应用层 对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议。 加密、解密、格式化数据 建立或解除与其他节点的联系 | 应用程序/计算机 | 邮件传输应用使用了SMTP协议、 万维网应用使用了HTTP协议、 远程登录服务应用使用了有TELNET协议 DNS、WWW、FTP、P2P、EMAIL/PPP | 应用层 | 应用层中包含了若干独立的用户通用服务协议模块,为网络用户之间的通信提供专用的程序服务 | 报文(message) 站点一次性要发送的数据块 | 用户通过应用程序向应用层提出了一系列应用请求 |
| 应用层 对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议。 加密、解密、格式化数据 建立或解除与其他节点的联系 | 应用程序/计算机 | JPEG、MP3、AVI、DOC | 表示层 | 处理在两个通信系统中交换信息的表示方式,主要包括数据格式变化、数据加密与解密、数据压缩与解压等 | 报文(message) | 收到了发送邮件的请求,将需要传输的数据进行编码和转换 |
| 应用层 对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议。 加密、解密、格式化数据 建立或解除与其他节点的联系 | 应用程序/计算机 | TCP、SIP、RTP、RPC-Named pips | 会话层 | 负责维护两个节点之间的传输联接,确保点到点传输不中断,以及管理数据交换等功能 | 报文(message) | 与服务器建立会话,三次握手与四次挥手,完成数据传输后,表示层断开连接,终止会话 |
| 传输层 | 路由器---IP地址寻址 | TCP、UDP、SCTP、SSL、TLS | 传输层 | 网络体系结构中高低层之间衔接的一个接口层,为用户提供End---to---End(端到端)服务,处理数据包错误、数据包次序等传输问题 | 报文(segment) 起始点和目的地都是传输层的信息单元 | 将来自各种应用程序的数据合并到一个数据流中,对数据进行处理,开始数据传输 |
| 网络层 可以进行网络连接的建立和终止以及IP地址的寻找等功能 | 交换机---MAC地址寻址 | IP、IPX、ICMP、ARP、OSPF、IGMP和RARP等 | 网络层 | 为数据在节点之间传输创建逻辑链路,通过路由选择算法为分组选择最佳路径,从而实现拥塞控制、网络互联等功能 | 数据包(Packet) 在分组交换网络中传输的格式化数据单元(控制信息->表头信息; 负载->数据本身) | 找到数据要发送的地址。根据网络的编址,跟踪设备在网络中的位置,计算出最佳数据传输路径 |
| 物理层 网络接口层是传输数据的物理媒介,也为网络层提供一条准确无误的线路 | 物理介质---双绞线、光纤 | SDLC、HDLC、PPP、STP和帧中继等 | 数据链路层 | 在通信实体间建立数据链路联接,为网络层提供差错控制和流量控制服务。 | 帧 | 通过硬件地址找到每一台设备 |
| 物理层 网络接口层是传输数据的物理媒介,也为网络层提供一条准确无误的线路 | 物理介质---双绞线、光纤 | RS-232、Rj45、V.34/100BASE-TX、SDH | 物理层 | 利用传输介质为数据链路层提供物理联接,负责数据流的物理传输工作 | 比特流 | 将数据转化成光信号、电信号,通过光缆、铜缆传输 |
三、Cookie、session与token
|---------|-------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | Cookie | session | token |
| 是什么 | 在客户端存储数据的技术 | Web应用程序中的一种机制,用于存储用户的会话信息 | 一种在客户端和服务端之间传递身份信息的方式 |
| 作用 | 由服务器发送给客户端的小型文本文件,在客户端发送请求时,浏览器会自动将相应的 Cookie 信息发送给服务器,服务器通过读取 Cookie 信息,就可以判断该请求来自哪个客户端。 | 每一个客户端与服务端连接,服务端都会为该客户端创建一个 session,并将 session 的唯一标识 sessionId 通过设置 Set-Cookie 头的方式响应给客户端,客户端将 sessionId 存到 cookie 中。 | 当用户登录成功后,服务端会生成一个 Token,将其发送给客户端。客户端在后续的请求中,需要将 Token 携带在请求头或请求参数中。服务端通过验证 Token 的合法性,就可以确定该请求来自哪个用户,并且可以根据用户的权限进行相应的操作。 |
| 使用场景 | 存储用户的登录状态、购物车信息 | 在用户访问Web应用程序时,服务器会为每个用户创建一个Session对象,用于存储该用户的会话信息,例如登录状态、购物车信息等。 | 由一串字符组成的令牌,用于在计算机系统中进行身份验证和授权。 它通常由三个部分组成:标头、有效载荷、签名 |
| 存储 | 浏览器或本地 只能存储String类型 单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie | 浏览器 存储任意java对象 没有上限,但session不要存放过多东西 | 体积很小 自由操作存储在哪里 |
| 对服务器的压力 | 保管在客户端,不占用服务器资源 | 保管在服务器端,每个用户都会产生一个session,服务器压力大 | 无需消耗服务器内存资源,它相当于只存了用户 id,session 相当于存储了用户的所有信息 |
| 安全性 | 会遭受 CSRF 攻击 存储在客户端,不够安全 | 存储在服务端更安全 | 安全,因为 token 一般只有用户 id。查询速度慢,因为 token 只存了用户 id,每次需要去查询数据库。 |
| 跨域支持 | 不支持跨域名访问 | 支持跨域名访问 | 跨域处理较为方便,比如多台服务器之间可以共用一个 token。 |
| 二者联系 | sessionId 是 cookie 和 session 之间的桥梁。 session 和 token 本质上是没有区别的,都是对用户身份的认证机制,只是他们实现的校验机制不一样而已 |||
token令牌----浏览器与服务器的交互
- 标头(Header):包含了算法和类型,用于指定如何对有效载荷进行编码和签名。常用的算法有HMAC、RSA、SHA等。
- 有效载荷(Payload):包含了一些信息,如用户ID、角色、权限等,用于验证身份和授权。有效载荷可以是加密的,也可以是明文的。
- 签名(Signature):是对标头和有效载荷进行签名后得到的值,用于验证token的完整性和真实性。签名通常使用私钥进行签名,并使用公钥进行验证。
一个完整的token包含了标头、有效载荷和签名三个部分,它们一起构成了一个安全的令牌,用于进行身份验证和授权。