一、Cookie和Session机制:无状态下的会话

产生背景:

HTTP 是一个无状态协议,无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。这意味着每个请求都是独立的。

缺点:缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次请求会传输大量重复的内容信息。
优点:在服务器不需要先前信息时它的应答就较快。解放了服务器,每一次请求“点到为止”不会造成不必要连接占用。

客户端与服务器进行动态交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。

Cookie:

Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再次请求该网站时,浏览器把请求的网址连同该Cookie一同发送给服务器。服务器检查该Cookie,以此来辨别用户状态。服务器还可以根据需要修改Cookie的内容。

Cookies 最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是 Cookies 的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入 Cookies,以便在最后付款时提取信息。

Session:

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,Session保存在服务器上。客户端浏览器访问服务器的时候,服务端把客户端信息以某种形式记录在服务器上,这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

提示:Session的使用比Cookie方便,但是过多的Session存储在服务器内存中,会对服务器造成压力。

Session的生命周期:Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问一次,无论是否读写Session,服务器都认为该用户的Session活跃(active)了一次。为防止内存溢出,服务器会把长时间没有活跃的Session从内存中删除。这个时间就是Session的超时时间。如果超过了超时时间没有访问过服务器,Session就自动失效。

Session需要使用Cookie作为识别标志。服务器先给客户端浏览器发送一个名为JSESSIONID的Cookie,他的值为该Session的id(也就是HTTPSession.getId()的返回值)。Session依据Cookie来识别是否为同一用户。

cookie和session的比较:

Cookie机制是通过检查客户身上的“通行证”来确定客户身份,Session机制是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

1、数据存放位置不同:
    cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、安全程度不同:
    cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
    session的sessionID是放在cookie里,要想攻破session的话,第一要攻破cookie。攻破cookie后,你要得到 sessionID,sessionID是要有人登录,或者启动session_start才会有,你不知道什么时候会有人登录。第二,sessionID是加密的,第二次session_start的时候,前一次的sessionID就没有用了,session过期时sessionid也会失效,想在短时间内攻破加了密的 sessionID很难。session是针对某一次通信而言,会话结束session也就随着消失了,而真正的cookie存在于客户端硬盘上的一个文本文件,谁安全很显然了。

3、性能使用程度不同:
    session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

4、数据存储大小不同:
    单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。

5、会话机制不同
    session会话机制:session会话机制是一种服务器端机制,它使用类似于哈希表的结构来保存信息。
    cookies会话机制:cookie是服务器存储在本地计算机上的小块文本,并随每个请求发送到同一服务器。 Web服务器使用HTTP标头将cookie发送到客户端。在客户端终端,浏览器解析cookie并将其保存为本地文件,该文件自动将来自同一服务器的任何请求绑定到这些cookie。

二、长连接和短连接:无连接下的多次请求

HTTP是无连接的,无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。(早期这么做的原因是每个客户端(即浏览器)与服务器之间交换数据的间歇性较大(即传输具有突发性、瞬时性),并且网页浏览的联想性、发散性导致两次传送的数据关联性很低,大部分通道实际上会很空闲、无端占用资源。因此 HTTP 的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。)

短连接是指HTTP每次请求都会建立TCP连接,响应结束则断开连接。

随着时间的推移,网页变得越来越复杂,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次 TCP 连接就显得很低效。

长连接是指HTTP利用TCP的保活机制,复用TCP连接,即在一次TCP连接中实现多次HTTP请求和响应。 

HTTP的长连接和短连接本质上是TCP长连接和短连接。

HTTP流水线技术:在一个TCP连接内(长连接),多个HTTP请求可以并行,下一个HTTP请求在上一个HTTP请求的应答完成之前就发起。

三、如果传输的文件过大怎么办

服务器上返回的资源文件比较大,比如有些 js 文件大小可能就有几兆。文件过大就会影响传 输的效率,同时也会带来带宽的消耗。怎么办呢?

1. 常见的手段是,对文件进行压缩,减少文件大小。那压缩和解压缩的流程怎么实现呢? 首先服务端需要能支持文件的压缩功能,其次浏览器能够针对被压缩的文件进行解压缩。浏览器可以指定 Accept-Encoding 来高速服务器我当前支持的编码类型 Accept-Encoding:gzip,deflate 那服务端会根据支持的编码类型,选择合适的类型进行压缩。常见的编码方式有:gzip/deflate

2. 分割传输 在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主体分块的功能称为分块传输编码(Chunked Transfer Coding)。

计算机网络是如何通信的「三」相关推荐

  1. 计算机网络是如何通信的「三」DNS

    DNS是 Domain Name System 的缩写,也就是 域名解析系统,它的作用非常简单,就是根据域名查出对应的 IP地址. 你可以把它想象成一本巨大的电话本,比如当你要访问域名www.163. ...

  2. 启科量子加速商业化:量子通信为「盾」,量子计算为「矛」

    7月6日,国开启科量子技术(北京)有限公司(以下简称"启科量子")发布其新一代商用QKD设备QCS-288.据创始人陈柳平在发布会上介绍,QCS-288较同类QKD(量子密匙分发) ...

  3. CSS基础「三」盒子模型/产品模块案例/圆角边框/盒子阴影/文字阴影

    本篇文章为 CSS 基础系列笔记第三篇,参考 黑马程序员pink老师前端入门教程 其他CSS基础相关文章: CSS基础「一」基础选择器 / 字体属性 / 文本属性 / 三种样式表 CSS基础「二」复合 ...

  4. 中间件系列「三」netty之NIO基础

    Java NIO系统的核心在于:通道(Channel)和缓冲区(Buffer).通道表示打开到 IO 设备(例如:文件.套接字)的连接.若需要使用 NIO 系统,需要获取用于连接 IO 设备的通道以及 ...

  5. 「三」浏览器中CSS 语法解析过程

    CSS 语法解析过程 1.在浏览器系列文章中,今天终点讲下CSS解析这块内容.我们已知浏览器的渲染流程中HTML Parser会生成 DOM树,而 CSS Parser会将解析结果附加到 DOM 树上 ...

  6. 云原生系列「三」容器网络

    Docker的网络实现 标准的Docker支持以下4类网络模式. ◎ host模式:使用--net=host指定. ◎ container模式:使用--net=container:NAME_or_ID ...

  7. 算法分析与设计「三」二分算法

    我们都知道,如果你输入了一个 1 到 1000 之内的数,电脑最多猜 10 次就可以猜到正确的答案.而这是为什么呢 ?其实,这就是用到了本文要讲述的二分搜索算法. 一.什么是二分搜索 在计算机科学中, ...

  8. Vue「三」—— vue 侦听器、vue 计算属性、vue-cli、vue 组件

    本文为 Vue 系列笔记第三篇.参考:>> 黑马程序员 Vue 全套视频教程 系列文章阅读

  9. Node.js「三」—— 创建静态 WEB 服务器

    本文为 Node.js 系列笔记第三篇.文章参考:nodejs 教程:<深入浅出 Node.js>:阮一峰 nodejs 博客: Node.js v16.13.0 文档 文章目录 前言 一 ...

最新文章

  1. python中如何在写文件之前删除文件内容_Python:文件的读取、创建、追加、删除、清空...
  2. Java关键字介绍之final
  3. Intellij Idea/Webstorm/Phpstorm 的高效快捷键
  4. 恒生证券期货行业用户维稳工作指引(一)
  5. 单步调试理解webpack里通过require加载nodejs原生模块实现原理
  6. 【算法竞赛学习】心跳信号分类预测-特征工程
  7. 360浏览器5兼容模式吗_个独模式真能将企业总体税负降低至5%吗,为何大家都热衷核定征收...
  8. oracle查看所有用户_Oracle实用命令查看共用一个表空间的所有用户
  9. Linux下openSSL安装并颁发证书
  10. 三大运营商2月份运营数据发布:超过一半的中国人都在用移动
  11. 上采样和下采样_OpenCV学习笔记(一)之图像金字塔-上采样与降采样与DOG
  12. mysql基础之存储引擎
  13. 企业ERP上云解决方案(金蝶/用友/OA等)
  14. 编码器 x264vfw
  15. android 清理 app,最好用的五大手机清理APP
  16. OpenFOAM中重力的植入方式
  17. python开发管理平台_python开发crm管理系统
  18. 西电微机系统课程设计——步进电机开环控制系统设计
  19. 哈工大计算机系统2022大作业:程序人生-Hello‘s P2P
  20. 问:女孩学编程好就业吗?

热门文章

  1. 一个Eclipse代码显示主题
  2. 304 vue 启动项目打开页面_Vue搭建项目工程(续)
  3. python xlsx 图片_实例11:用Python给Excel所有工作表添加图片
  4. music算法_“要热爱 请深爱”系列(5)浅谈模拟退火算法
  5. 链表实现c语言通讯录管理系统,C++链表实现通讯录管理系统.pdf
  6. mysql 5.5.37 my.cnf,linux安装最新mysql5.5,my.cnf找不到解决办法
  7. 关键字搜索 c语言,c语言-以关键字搜索程序
  8. html模块开发模板引擎,一个前端html模板处理引擎(javascript)
  9. 六十二、Js中的冒泡和捕获点击事件和Vue组件绑定原生事件
  10. 期末考试前的预习,科目:化工设备与反应器(2)