mooc-HTTP协议二

一、HTTP状态管理:Cookie与Session

Cookie(服务器需要记录该用户状态,就向客户端浏览器颁发一个Cookie)

Cookie实际上是一小段的文本信息,客户端请求服务器,如果服务器需要记录该用户状态,就向客户端浏览器颁发一个Cookie。

客户端浏览器会把Cookie保存起来,当浏览器再请求该网站的时候,浏览器把请求的网址连同该Cookie一同提交给服务器,服务器检查该Cookie,以此来辨认用户状态

在这里插入图片描述

在这里插入图片描述

Session

Session上另外一种记录客户状态的机制,保存在服务器上,客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。
在这里插入图片描述

如果客户端访问的时候没带SessionID,则会创建SessionID,SessionID存放在Cookie中。

保存SessionID的方式

  • Cookie
  • URL重写
    在这里插入图片描述
    在这里插入图片描述

Session的有效期

  • Session超时失效
  • 程序调用HttpSession.invalidate()
  • 服务器进程被停止

Cookie和Session的比较

  • 存放位置不同
  • 安全性不同(Cookie存在浏览器中,可能会设置修改,泄漏信息)
  • 有效期上的不同
  • 对服务器压力的不同

二、HTTP协议结构和通讯原理

字符集与编码

计算机系统是二进制系统,本身是以2进制的形式保存和处理数据的。也就是说不管是使用键盘进行输入还是用计算机读取文本文件,得到的原始内容都是2进制的。需要对2进制进行显示的时候,计算机会依照某种机制取到二进制所表示的数据,就可以得到实际数据。

在这里插入图片描述

  • 字库表存储了编码规范所能显示的所有字符。

  • 在一个字库表中,每一个字符都有一个对应的二进制地址,而字符集就是这些地址的集合。在ASCII编码的字符集里面a的地址就是65即010001。

  • 知道了字库表和字符集以后,就可以使用二进制得到字符,但是直接使用字符对应的二进制地址显然十分麻烦因为很长。于是程序猿就制定了一些算法来节省空间而每种不同的算法都被称作一种编码方式,一套编码规范可以有不同的编码方式,不同的编码方式有不同的适应场景,比如UTF-8是一种编 码方式,它对应的编码规范叫做Unicode,除了utf-8还有utf-16以及utf-32两种方式。

编码规范

编码规范规定了对哪些东西进行编码?

在这里插入图片描述

ASCII:最早产生的编码规范,一直包含从00000000-01111111,可以表示阿拉伯数字和英文大小写以及一些简单的符号。8个2进制位占据一个字节的存储空间。

GBK:中日韩汉字等,每个字符占两个字节,不管中文还是英文

Unicode包含了全世界所有的字符,最多可以保存四个字节的字符,但是每个字符都要四个字节很浪费空间,于是程序猿就设计出了UTF-8、UTF-16、UTF-32。

乱码就是使用的编码方式和解码方式不一致导致的,或者编码的时候在字库表中不包含响应的字符。

URL的编码和解码

URL是采用ASCII字符集进行编码的,所以如果URL中含有非ASCII字符集中的字符,要对其进行编码。

URL中一些保留字,如&表示参数分割符,如果想要在URL中使用这些保留字,那就需要编码。

在URL中属于ASCII的非保留字,无需编码,对ASCII中的保留字,取其ASCII内码,加上“%”前缀将该字符进行编码,对其URL中非ASCII的字符,需要取其在Unicode内码,然后加上“%”前缀将该字符进行编码。

在这里插入图片描述

三、HTTP协议之身份认证

身份认证信息

  • 密码
  • 动态令牌
  • 数字证书
  • 生物认证
  • IC卡等

常见认证方式

  • BASIC认证(基本认证)
  • IDGEST(摘要认证)
  • SSL客户端认证
  • FormBase认证(基于表单认证)

BASIC认证

在这里插入图片描述
在这里插入图片描述

不够安全,因为base64被解码就会得到原来的数据。

DIGEST认证

在这里插入图片描述

质询/响应方式指的是一方会先发送认证要求给另外一方,接着使用在另一方收到的质询码

在这里插入图片描述

SSL客户端认证(成本高)

在这里插入图片描述

基于表单的认证

在这里插入图片描述

四、HTTP的长连接与短连接

  • HTTP协议是基于请求/响应模式的,因此只要服务器响应,本次HTTP请求就结束了。
  • HTTP的长连接和短连接本质上是TCP的长连接和短连接
  • HTTP/1.0,默认使用的是短连接,也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,结束就中断。
  • HTTP/1.1起,默认使用长连接,用以保持连接特性。

在这里插入图片描述

在这里插入图片描述

五、HTTP缓存

为什么要使用HTTP缓存?
缓存的内容又是什么?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

缓存工作方式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

last-Modified只能精确到秒,如果文件在一秒钟以内发生变化怎么办?
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

六、内容协商机制

向英语用户发送英文版,向法语用户发送法文版等。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

七、断点续传和多线程下载

HTTP是通过在Header里面有两个参数实现的,客户端发请求时对应的Range,服务器端响应时对应的是Content-Range。

Range

  • Range
  • 用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式:
    Range:(unit=first byte pos)-[last byte pos]
    左开右闭
    在这里插入图片描述

Content-Range

用于响应头中,在发出带Range的请求后,服务器会在Content-Range头部返回当前接受的范围和文件总大小,一般格式:
Content-Range:byte(unit first byte pos) - [last byte pos]/[entity length]
在这里插入图片描述

例子

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值