http长连接与会话保持

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

"我们半推半就的人生没有和你一样被眷顾的未来!"


一、Http长连接

(1) 为什么需要长连接

         如上展示的是一个常规得并不能再常规的http服务从本地拉取远端linux上的本地文件上传至浏览器上经过浏览器的渲染展示成如今的样子。唔这有问题吗emm这没有问题我们可以先来看看服务器打印的日志信息。

        可以看出为了拉取远端服务器资源我们的浏览器进程不会仅仅向远端linux机器下部署的服务发起一次请求而是多线程并发地访问请求远端资源。
           

         我们知道http是基于tcp的应用层服务。要构建出一个完整的网页势必需要多次频繁构建发起http请求。然而tcp是面向连接的建立连接的过程(tcp三次挥手)是有消耗的同样建立通信连接后服务端维护通信双方的连接也是有成本的

HTTP持久连接是使用同一个 "TCP连接" 来发送和接收多个HTTP请求/应答而不是为每一个新的请求/应答打开新的连接的方法。

        因此Http所提出的长连接的实质是为了解决一个完整网页需要多次请求才能构建出来的问题需要让Client和Server端都需要支持仅只需要建立好一个连接在这个连接的基础上获取大份资源。

        那么如何判断一个一个http连接是否支持长连接呢 其实在http的请求报文中携带:

        "Connection:keep-alive"  支持长连接

        "Connection:close" 不支持长连接

 


二、会话(Session)保持

        在说会话保持之前呢我们先来看看一组现象:               历史上我并没有登录这个哔站账号现在我开始登录。 

        可以看出在我进行哔站账号登录后不管是另起一个窗口或者是将浏览器关掉又重新打开该网页甚至 是重启 电脑(这里也就不演示了)都会发现我除了首次登录后其他时候并没有 "登录账号" ,可账号却自动登录的 "怪事"  这是什么鬼

(1) 如何理解会话保持

        也许你会认为为我们做这个工作的难道是http 那可就大错特错了http没有那么高尚它的功能仅仅在于 " 超文本传输 " 将远端服务器的资源下拉到本地浏览器上罢了也就意味着客户端的每一个http请求本质上都是 "孤立的 ""无状态的" 它们都不知道是否在获取该资源之前是否有同样的http报头做着与他们类似的事情。 

         http是无状态的唔它压根不在意用户的任何事情任何浏览痕迹、搜索习惯……但这些数据用户是需要的比如你意外点进去了一个网址并饶有兴趣地看着里面的内容但又是意外发生你误操作关闭了该连接窗口但还好你可以通过历史浏览痕迹找到对该网址的重新访问。

        在反过来看如今的哔站我们每点击一个视频连接是否都会发生网页跳转是的但是http是无状态的根本不知道你历史已经登录提交过你的认证信息新的页面根本无法识别你是哪一个用户为此只能让你重新进行登录这是不是太麻烦了

        因此会话保持的根本目的在于:
        让一个用户在进行成功登录后可以在整个网站按照自己的身份进行随意访问。

(2) 如何实现会话保持 ?

 ①老方法:

         当用户进行第一次登录时浏览器会帮用户将他的账号和 密码保存起来。当用户要对该网站进行访问时浏览器会自动推送这些数据远端服务器会根据这些用户这些数据 响应 该 用户身份下能看到的内容

        而这个被保存下来的文件被叫做cookie。

    这里的cookie文件可以被分为: 文件 和 内存(别忘了浏览器也是个进程) 。

        我们可以通过浏览器设置找到里面的cookie设置同样cookie不仅仅只能保存用户数据在用户需要访问有权限要求的网页时自动推送数据还具有缓存技术预先加载一些用户长访问的网址。这也就是为什么多次打开一个网页加载速度会变快。

         如图所示如果我们对该cookie进行清理之后用户 就需要重新进行登录了。

        我们服务端可以在返回报头里设置:

        "Set-Cookie: xxx"

        这样每次客户端发起的请求报头中都会携带该cookie值。

        既然上述的是老方法那么也就意味着一定有新的方法也就意味着老的方法一定在上面地方有不好的影响促成新方法的出现。 

问题:         

        当用户将自己的登录数据保存在本地cookie当中时一旦哪天没经得起诱惑点了啥链接下载了啥进程导致自己的电脑里多出来了一个木马病毒对该主机长期进行 " 数据窃取 "服务器也就会误认为该 “非法用户" 就是你

        像生活中很常见的某些很久不曾联系的QQ好友突然来问你向你借钱……唔就是很好的例子他的QQ账号一定是被盗取了。 

        

②新方法

        从老方法找解决方法无非就在于不让用户数据由用户自己管理就好了也许你会说你的"防范意识"很强。可是这妨碍不住"防范意识"不强的人数据被不法分子窃取。         

        你说“对没错我现在知道了用户数据现在没有由用户保存了而是交由服务器了首次登录后服务器会返回一个session_id浏览器会保存这个session_id,并在之后每次资源请求 中会携带cookie 中的 session_id。可是你的session_id被截取了人家不也可以用session_id去访问造成服务器误认这解决的方法岂不是杯水车薪”

        答案是肯定不是此时你用户泄漏的就不再是自己的数据而仅仅是一个session_id,大大降低了用户真实数据泄漏的可能其次在这个网络攻防的世界里没有完全的、绝对的防御需要配合一定的策略来保障网络访问的安全性。例如当一个账号多年都没有上线突然有一天上线并且同时向多个好友发送消息或者一个账号一个时间在一个IP突然一个时间服务器检测到该账号在完全不一样的IP地址发起 请求登录遇到这种情况怎么办? 对于服务器而言 仅仅让该session_id 失效不就行了让真正拥有密码的网民才能重新登录上账号…… 在网路世界中都有无数双隐形的手在保障网络、网民上网的安全。


总结:

 ① 如何理解长连接: 随着互联网的发展http请求的资源不再仅仅是一些文字或者几kb的图片为了避免http频繁建立连接因此对于一份大资源的获取仅仅通过一条连接即可。

 ② 会话保持是为了方便用户访问身份认证网页时不用频繁提交用户信息做身份识别。

本篇就到此结束了感谢你的阅读。

祝你好运向阳而生~ 

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6