http长连接与会话保持

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


一、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.mfbz.cn/a/34393.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数学建模——曲线拟合

一、曲线拟合简介 1、曲线拟合问题的提法 已知一组数据(二维),即平面上n个点 (xi,yi)(i1,2,…,n), xi互不相同。寻求一个函数yf(x),使得f(x)在某种准则下与所有的数据点最为接近,即拟合得最好。 2、…

Java Stream 流进行根据元素某一属性过滤计算其他属性实例

设计一个测试类Tuser package org.example;import com.alibaba.fastjson.annotation.JSONField;import java.io.Serializable;public class Tuser implements Serializable {//用户名private String name;//平台名称private String sys;//登录次数private int times;//一个合并…

H5学习期间 问题文档(更新中)

目录 一、html与css中让标签 二、css鼠标滑入显示div 三、git报错解决方案 四、ul>li中给h1标签设置行高 一、html与css中让标签<li>在同一行显示 li标签一行显示 效果展示&#xff1a; 代码块&#xff1a; <!DOCTYPE html> <html lang"en"…

python 深度学习 解决遇到的报错问题2

目录 一、解决报错UnicodeDecodeError: utf-8 codec cant decode byte 0xe3 in position 15: invalid continuation byte 二、解决ERROR: Could not build wheels for pycocotools, which is required to install pyproject.toml-based pro 三、解决OSError: [WinError 1314…

Redhat7.6安装mysql5.7

环境准备&#xff1a;硬盘剩余空间最少8G,内存剩余最少2G Mysql官网下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/5.7.html 在Mysql官网下载列表中选择需要安装的版本: RedHat7.6安装MySQL5.7 安装之前&#xff0c;先要保证系统环境是干净的&#xff0c;不能存…

Mysql锁机制介绍

Mysql锁机制 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中&#xff0c;除传统的计算资源(如CPU、RAM、I/O等)的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题&#xff0…

docker部署rabbitmq

拉取镜像 我部署的是3.8版本的 docker pull rabbitmq:3.8 启动容器 docker run -d --hostname my-rabbit --name rabbitmq --restart always -e RABBITMQ_DEFAULT_USERadmin -e RABBITMQ_DEFAULT_PASSadmin -p 15672:15672 -p 5672:5672 --privilegedtrue rabbitmq:3.8 启…

【Verilog HDL】FPGA-testbench基础知识

&#x1f389;欢迎来到FPGA专栏~testbench基础知识 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能…

【网络原理之一】应用层协议、传输层协议UDP和TCP,TCP的三次握手和四次挥手以及TCP的可靠和效率机制

应用层协议XML协议JSONHTTP 传输层协议UDP协议UDP的特点UDP协议格式 TCP协议TCP的特点TCP协议格式TCP的安全和效率机制确认应答(可靠机制)超时重传(可靠机制)连接管理(可靠机制)三次握手(连接过程)四次挥手(断开的过程)状态的转化 滑动窗口(效率机制)流量控制(可靠机制)拥塞控制…

【码银送书第一期】通用人工智能:初心与未来

目录 前言 正文 内容简介 作者简介 译者简介 目录 前言 自20世纪50年代图灵在其划时代论文《计算机器与智能》中提出“图灵测试”以及之后的达特茅斯研讨会开始&#xff0c;用机器来模仿人类学习及其他方面的智能&#xff0c;即实现“人工智能”&#xff08;Artificial …

最优化问题matlab求解-fminsearch()和fmincon()函数的使用

matlab可以求解无约束最优化问题、有约束最优化问题和线性规划、二次型规划问题等&#xff0c;同时实现了最小二乘法的曲线拟合方法。matlab求解优化问题的步骤为&#xff1a; 写标准型描述目标函数&#xff1a;M-函数或匿名函数用fminunc()或fmincon()等函数求解原问题。检验…

【从删库到跑路】MySQL系列——详细讲解SQL的DDL,DML,DQL,DCL语句

&#x1f38a;专栏【MySQL】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 文章目录 &#x1f354;关系型数据库⭐概念⭐特点 &#x1f354;MySQL数…

开发工具-网络测试工具 POSTMAN 的脚本使用

开发工具-网络测试工具 POSTMAN 的脚本使用 postman 脚本应用基础设置变量、获取变量示例环境变量的使用测试 发送请求示例常用的变量、方法responseBody 获取响应体内容pm.response 获取响应信息pm.expect() JSON检查cheerio.load() 类似于 jquery 操作 html 元素 POSTMAN 是网…

RabbitMQ入门指南

人生永没有终点。只有等到你瞑目的那一刻&#xff0c;才能说你走完了人生路&#xff0c;在此之前&#xff0c;新的第一次始终有&#xff0c;新的挑战依然在&#xff0c;新的感悟不断涌现。 文章目录 一、MQ与RabbitMQ概述1. MQ简述2. MQ的优势3. MQ的劣势4. 常见的MQ产品5. Rab…

MySQL 数据库

文章目录 数据库的基本概念数据表数据库数据库管理系统数据库系统 数据库的发展史当今主流数据库介绍SQL Server &#xff08;微软公司产品&#xff09;Oracle &#xff08;甲骨文公司产品&#xff09;DB2 &#xff08;IBM公司产品&#xff09;MySQL &#xff08;甲骨文公司收购…

Spring Boot日志文件

目录 前言&#x1f36d; 一、日志的作用&#x1f36d; 1、日志真实使用案例&#xff1a;&#x1f349; 二、日志怎么用&#x1f36d; 1、自定义日志打印&#x1f349; Ⅰ、在程序中得到日志对象&#x1f353; 常见的日志框架说明&#xff08;了解&#xff09;&#x1f35…

保姆级AT32F437 配置RT-Thread 以太网(UDP/TCP Server)

好记性不如烂笔头&#xff0c;既然不够聪明&#xff0c;就乖乖的做笔记&#xff0c;温故而知新。 本文档用于本人对知识点的梳理和记录。 一、前言 ENV版本&#xff1a;v1.3.5 rt-thread版本&#xff1a;V5 开发板&#xff1a;雅特力AT32F437 AT-START-F437 二、ENV配置 E…

java--类变量与实例变量--实验设计--村庄种树

目录 设计要求 设计流程图 程序代码 类Village代码 类MainClass代码 可以直接运行的代码 运行结果 类变量与实例变量的区别和类方法与实例方法的区别 idea的详细使用方法 设计要求 编写程序模拟两个村庄共同拥有一片森林&#xff1b;编写一个Village类&#xff0c;该类…

python爬虫:爬取网站所有页面上某些内容

举例场景&#xff1a;爬取腾讯课堂中&#xff0c;查询python的所有课程的封面图、课程标题、课程数量、课程价格&#xff0c;这4个部分的内容。 代码如下&#xff1a; import requests # import lxml # 导入用于请求的包lxml from bs4 import BeautifulSoup # 导入用于请求…

Tomcat 8.5 环境搭建指南

文章目录 导言环境搭建总结 导言 欢迎阅读本篇博客&#xff0c;本文将为您提供关于如何搭建Tomcat 8.5环境的详细指南。Tomcat是一个流行的开源Java Servlet容器&#xff0c;它提供了一个运行Java Web应用程序的平台。无论您是新手还是有经验的开发人员&#xff0c;本文都将帮…