http协议+SSO

 

HTTP前端缓存概述

    主要分 HTTP缓存和浏览器缓存。

    HTTP缓存是HTTP请求传输用到的缓存,主要是在服务器代码上设置;

    浏览器缓存是由开发在前端js上进行设置;

   HTTP缓存:整体流程:HTTP缓存都是从第二次请求开始的。

                    第一次请求资源时,服务器返回资源,并在respone header头中回传资源的缓存参数;第二次请求时,浏览器判断这些请求参数,击中强缓存就直接200,否则就把请求参数加到request header头中传给服务器,看是否击中协商缓存,击中则返回304,否则服务器会返回新的资源。

 

客户端发送一个http请求到服务器端 服务器端发送一个http响应到客户端,其中包含Set-Cookie头部 客户端发送一个http请求到服务器端,其中包含Cookie头部 服务器端发送一个http响应到客户端

 

 

    浏览器缓存:Cookies主要用于用户信息的存储,Cookie的内容可以自动在请求的时候被传递给服务器。 LocalStorage的数据将一直保存在浏览器中,知道用户清除浏览器缓存数据为止。; SessionStorage的其他属性通LocalStorage,只不过它的生命周期通标签页的生命周期,当标签页被关闭时,SessionStorage也会被清除掉。

 

HTTP 1.0 短连接(每次与服务器交互,都需要新开一个连接)(TCP每次都要三次握手,四次挥手,慢启动。。。)(需要等待服务端响应之后再继续发送请求)

HTTP 1.1 持久化连接,请求管道化,增加缓存处理。(建立一次连接,多次请求均由这个连接完成)(如果堵塞了,会开新的TCP连接)(把多个HTTP请求放到一个TCP连接;发送过程不需要等待服务器对前一个请求的相应。客户端还是要按照请求的顺序来接受响应,按照响应的顺序,还是会出现堵塞)

HTTP2  解决了线头堵塞的问题。多路复用,;

    多路复用:允许同时通过单一的HTTP/2链接发起的多重的请求-响应消息。核心在于新的二进制分帧层,定义了如何封装http消息并在客户端与服务器之间传输。吧原来http1.X的header和body部分用frame重新封装了一层。传输的每个帧都关联到一个“流”

 

Http从输入一个url到返回数据,中间发生了什么?(客户端输入URL定位符---->DNS服务器寻找映射------>进入服务器,处理数据----->返回数据至客户端)

    1.浏览器解析出主机名

    2.浏览器查询出这个主机名的ip地址(dns)(浏览器缓存dns服务地址,保存解析过的域名和ip地址,;再次解析域名时,先去缓存查询有没有该映射关系,没有就去hosts文件中查询,还没有就去dns服务器查询)

    3.浏览器获取端口号

    4.浏览器向目标ip地址发起一条到该ip地址的tcp连接;

    5.数据包在ip层传输,直到传输到目标ip地址;

    6.数据链路层处理网络连接的应届部分,比如网卡,找到服务器的网卡;

    7.浏览器向服务器发送一条http报文(组成:起始行+首部+主体)

    8.服务器接收到客户端请求,进行处理后返回响应报文;

        web服务器接收到请求之后:1)建立连接;2)接收请求,赌球http请求报文;3)访问资源,4)构建响应5)发送响应

    9.浏览器读取http响应报文

    10.浏览器关闭连接;

 

http的特性

    1.http是不保存状态的协议

    2.请求只能从客户端开始,客户端不可以接收除响应之外的指令;

    3.没有用户认证,任何人都可以发起请求;

    4.通信使用的是明文;

    5.可任意选择数据压缩格式,

    6.无法证明报文完整性;

    7.http持久连接和并行连接;4个,每个都是持久连接

        并行连接:通过多条tcp连接发起并发的http请求; 

        持久连接:重用tcp连接,以消除连接及关闭时延;(40s内无新请求,关闭)

        管道化连接:通过共享的tcp连接发起并发的http请求;

 

堵塞队列是为了容纳多线程任务而存在的,其服务的对象是多线程应用

HTTP属于无状态协议

web=http协议+状态机制+其他机制

协议的状态是指下一次传输可以“记住”这次传输信息的能力。HTTP属于无状态协议 为什么?

HTTP是不会为了下一次连接而维护这次连接所传输的信息,这是为了保证服务器内存。

比如客户获得一张网页之后关闭浏览器,然后再一次启动浏览器,再登陆该网站,但是服务器并不知道客户关闭了一次浏览器。

由于Web服务器要面对很多浏览器的并发访问,为了提高Web服务器对并发访问的处理能力,在设计HTTP协议时规定Web服务器发送HTTP应答报文和文档时,不保存发出请求的Web浏览器进程的任何状态信息

 

无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。

HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。

缺少状态意味着,假如后面的处理需要前面的信息,则前面的信息必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要前面信息时,应答就较快。直观地说,就是每个请求都是独立的,与前面的请求和后面的请求都是没有直接联系的。

 

三、如何解决HTTP无状态的问题?

 

可以通过Cookie和Session来保存状态信息。

Cookie和Session有以下明显的不同点:

1)Cookie将状态保存在客户端,Session将状态保存在服务器端;

2)Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。Cookie最早在RFC2109中实现,后续RFC2965做了增强。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。Session并没有在HTTP的协议中定义;

3)Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;

4)就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的SESSION机制更安全些。因为它不会任意读取客户存储的信息。

 

HTTP和HTTPS的区别

HTTP(超文本传输协议)被用于在Web浏览器和网站服务器之间,以明文方式传递信息,不提供任何方式的数据加密,

SSL依靠SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。从而诞生了HTTPS(安全套接字层超文本传输协议)、

简单来说,HTTPS协议="SSL+HTTP协议"构建的可进行加密传输、身份认证的网络协议,是HTTP的安全版

相同之处: 采用同一个基础的协议, 当服务器接收到请求,它会返回一个状态码以及消息, 系统使用统一资源定位器 URI 模式,因此资源可以被唯一指定。( 唯一不同的只是一个协议头(HTTPS)的说明)

不同之处:

  • 工作层:在OSI网络模型中,HTTP工作于应用层,而HTTPS工作在传输层。
  • 连接端口:HTTP标准端口是80,而HTTPS的标准端口是443。
  • 传输方式:HTTP是超文本传输协议,信息是明文传输,而HTTPS是SSL加密传输协议。
  • 工作耗时:HTTP耗时=TCP握手,而HTTPS耗时=TCP握手+SSL握手。
  • 显示形式:HTTP的URL以http://开头,而HTTPS的URL以https://开头。
  • 费用:HTTP无需费用,而HTTPS需要到CA申请证书,一般免费证书较少,需要一定费用。
  • 安全性:HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。

HTTPS的工作原理

HTTPS能够加密信息,以免敏感信息被第三方获取,

 

 客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。

  (1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

  (2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

  (3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。

  (4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

  (5)Web服务器利用自己的私钥解密出会话密钥。

  (6)Web服务器利用会话密钥加密与客户端之间的通信。

 

https协议的工作原理

    1.客户使用https url访问服务器,要求web服务器建立ssl链接

    2.web服务器接收到请求后,会将网站的整数返回给客户端

    3.客户端和webn服务器写上ssl链接的安全等级

    4.客户端通过双方一致的安全等级,建立会话密钥,通过网站的公钥来加密会话密钥,并传送给网站。

    5.web服务器通过自己私钥解密出会话密钥

    6.web服务器通过会话密钥加密与客户端之间的通信

缺点:https握手阶段费时;缓存不如http搞笑,增加了数据开销;ssl证书收费;ssl证书需要绑定IP

 

WebSocket 

    WebSocket是HTML中的协议,支持持久连续,http协议不支持持久性连接。 http中的keep_alive将多个http请求合并为1个饿

    HTTP的生命周期为一个Request和一个Response。

状态码

  400:请求无效;字段和实体不对应。或者 json数据没有转化成字符串

   410:请求需要用户验证

    402:服务器已得到请求,但是拒绝执行

RESTURL:用url定位资源,用http描述操作

http是一个无状态协议,因此Cookie的作用就是存储sessionId用来唯一标识用户


SSO

 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器与服务器之间维护会话状态。

什么是单点登录?单点登录全称Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分

 相比于单系统登录,sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。这个过程,也就是单点登录的原理,

 

 1.登录

 

 

 用户登录成功之后,会与sso认证中心及各个子系统建立会话,用户与sso认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话,局部会话建立之后,用户访问子系统受保护资源将不再通过sso认证中心,全局会话与局部会话有如下约束关系

局部会话存在,全局会话一定存在

全局会话存在,局部会话不一定存在

全局会话销毁,局部会话必须销毁

   

 

 

 

2.注销

单点登录自然也要单点注销,在一个子系统中注销,所有子系统的会话都将被销毁

 

 

3.部署

单点登录涉及sso认证中心与众子系统,子系统与sso认证中心需要通信以交换令牌、校验令牌及发起注销请求,因而子系统必须集成sso的客户端,sso认证中心则是sso服务端,整个单点登录过程实质是sso客户端与服务端通信的过程,用下图描述

 

 

 

4.实现 

 sso-client

  1. 拦截子系统未登录用户请求,跳转至sso认证中心
  2. 接收并存储sso认证中心发送的令牌
  3. 与sso-server通信,校验令牌的有效性
  4. 建立局部会话
  5. 拦截用户注销请求,向sso认证中心发送注销请求
  6. 接收sso认证中心发出的注销请求,销毁局部会话

  sso-server

  1. 验证用户的登录信息
  2. 创建全局会话
  3. 创建授权令牌
  4. 与sso-client通信发送令牌
  5. 校验sso-client令牌有效性
  6. 系统注册
  7. 接收sso-client注销请求,注销所有会话

  接下来,我们按照原理来一步步实现sso吧!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值