http长连接与会话保持

news2024/11/14 11:04:01

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

 


 

一、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频繁建立连接,因此对于一份大资源的获取,仅仅通过一条连接即可。

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

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

祝你好运,向阳而生~ 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/635613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【实战】体验训练Geneface

一.环境 conda activate geneface export PYTHONPATH./ CUDA_VISIBLE_DEVICES0 python tasks/run.py --configegs/datasets/lrs3/lm3d_syncnet.yaml --exp_namelrs3/syncnet 训练这篇出过的一些奇奇怪怪的问题基本上都记录在【环境搭建】40系一些奇奇怪怪的环境问题_weixin_50…

aigc - 文化衫设计

团队要用aigc设计个文化衫,就是给些提示词,然后让ai自动生成能够包含这些提示词的文化衫出来 二、第二版 思路:收集了30多张文化衫,然后用两种方式生成提升词:一个是自然语言描述这件t-short,一个是全名词…

IDEA常用插件Top18

前言:精心推荐给大家的一些日常开发中最常用的IDEA效率插件。 1、Alibaba Java Coding Guidelines代码规范检查工具 Alibaba Java Coding Guidelines ,阿里的一款强大的代码规范检查工具,可以让自己写出易读性更高的代码,可以让团队代码风格…

Keepalived+LVS

这里写目录标题 一、Keepalived及其工作原理1.1Keepalived体系主要模块及其作用1.3VRRP (虚拟路由冗余协议) 二、keepalived实验部署主服务器:备用服务器配置节点 一配置节点二 三、测试 一、Keepalived及其工作原理 Keepalived 是一个基于V…

Linux编译器 gcc、g++

绪论 你热爱生命吗?那幺别浪费时间,由于时间是组成生命的材料。——富兰克林 。 本篇文章写了主要写了Linux下编译器,以及编译器是如何实现编译的过程。 话不多说安全带系好,发车啦(建议电脑观看)。 附&…

2.30 守护进程(1) 2.31 守护进程(2)

2.30 守护进程(1) 终端 echo $$//查看当前终端的的pid tty//查看当前终端设备控制终端可以操作某一个进程。 进程组 会话 进程组、会话、控制终端之间的关系 find/2 查看2重定向到dev/null设备上,|管道(创建子进程&#xff09…

RK3588平台开发系列讲解(USB篇)USB Device端口组合配置过程

文章目录 一、configfs二、configfs 配置过程2.1、使能相关的宏2.2、挂载configfs2.3、创建名为g1的usb复合设备2.4、配置PID和VID2.5、创建并配置strings子目录2.6、创建configuration和字符串2.7、创建functions2.8、将functions和configuration关联起来2.9、绑定到UDC,使能…

数据的存储练习题 -- (解题思路+代码)

目录 前言 知识补充 有符号和无符号的区别 练习一 练习二 练习三 练习四 练习五 练习六 练习七 前言 书接上回,我们学习了整形数据在内存中是怎么存储的。本篇我们就利用这些知识来做一些练习题目,把这些知识很好的消化掉。 知识补充 对…

简单的TCP网络程序·单进程

目录 文件1:tcpServer.cc 文件2:tcpServer.hpp 1.提出日志概念 -- 在后续完善 日志格式 -- 暂定简单的打印功能 2.创建套接字 SOCK_STREAM -- socket参数 3.bind自己的套接字 4.设置socket 为监听状态 * 新接口1:listen 函数1&…

IIC协议总结

IIC(Inter-Integrated Circuit) ,简单说就是IC(芯片)之间通信的总线。所谓总线,就是各个器件都并联到一组公共的线路上,然后共用这条线路来传输数据。总线的英文名为BUS,这是个形象的名字&#…

chatgpt赋能python:Python如何取三位数的每一位

Python如何取三位数的每一位 作为一门广泛应用的编程语言,Python在数值相关处理方面也十分得心应手。取三位数的每一位是一个常见的需求,那么在Python中该如何实现呢? 1. 数字字符串切片 Python中的字符串有索引和切片功能,我们…

chatgpt赋能python:Python如何命名输出图片名字

Python 如何命名输出图片名字 Python 是一种非常流行的编程语言。它非常灵活,可以用于各种应用场景。其中一个应用是图像处理。在 Python 中,我们可以使用不同的库来读取和处理图像。但是,当处理大量图片时,给每个图片命名会变得…

UDS关于0x37服务退出传输学习笔记

1.服务说明 客户端使用此服务来终止客户端和服务器之间的数据传输(上传或下载)。 2.请求消息 2.1请求消息子功能参数$Level(LEV_)定义 此服务不使用子函数参数。 2.2请求消息数据参数定义 transferRequestParameterRecord&a…

C++技能 - 详解const的几种使用【再也不迷糊了,干货还是蛮多的】

系列文章目录 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 C技能系列 期待你的关注哦!!! 生活就是上帝发给你的一张手牌,无论多烂,你都得拿着。 Life is god give you a hand, no matter ho…

RK3588平台开发系列讲解(以太网篇)MDIO底层驱动

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、mdiobus总线二、mdiobus的注册沉淀、分享、成长,让自己和他人都能有所收获!😄 一、mdiobus总线 mdio bus是mdio管里phy寄存器的总线,此总线非设备驱动模型之总线。mdiobus在内核中用mii_bus结构体描述,mii_b…

基于51单片机的电子钟Protues仿真设计

一、设计背景 电子钟是指利用数字电路或单片机等现代电子技术来实现时间计量和显示的钟表。相较于传统机械钟、石英钟等时钟,电子钟具有精度高、音响小、易于制造和调节等优点,同时也由于其美观大方的外观设计而成为了家居装饰中不可或缺的一部分。 其…

初探react中使用MongoDB

MongoDB介绍与安装 什么是MongoDB 来自于英文单词“Humongous”,中文含义表示“庞大”面向文档存储的开源数据库由C编写,支持多种语言连接 为什么要用MongoDB 性能好(内存计算)大规模数据存储(可拓展性&#xff09…

Cracking C++(9): 编译选项的设置

文章目录 1. 目的2. 生成 hello 可执行程序的过程3. 编译选项4. overlook 项目简介4.1 基本用法4.2 典型例子&#xff1a; 函数缺少返回值 1. 目的 对应到 hackingcpp 网站上 Hello World 这一节内容的笔记和个人的拓展。 2. 生成 hello 可执行程序的过程 #include <iost…

牛客网专项练习——C语言错题集(3)

文章目录 函数的缺省返回值类型找不同数组指针 函数指针const 与 指针函数里操作外面传进来的数组 函数的缺省返回值类型 “在C语言中&#xff0c;凡不加返回值类型限定的函数&#xff0c;就会被编译器作为返回整型值处理。” 这是初学学 C 语言时有接触到的一个概念&#xf…

RK3588平台开发系列讲解(进程篇)进程task_struct结构体详解(一)

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、任务 ID二、信号处理三、任务状态四、进程调度沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 Linux 里面,无论是进程,还是线程,到了内核里面,我们统一都叫任务(Task),由一个统一的结构 task_stru…