关于http

一 http

1 http是无状态协议,自身不对请求和响应之间的通信状态进行保存,这使得http是比较简单的,可以更快处理大量事务,确保协议的可伸缩性。

2 http用于客户端与服务端之间的通信,一个普通的请求包括:客户端向服务端发出请求,服务端处理请求,服务端将结果响应给客户端。

3 与http关系密切的协议:IP TCP DNS
(TCP/IP协议族按层次分为:应用层、网络层、传输层、链路层)
IP协议: 位于网络层,作用是把各种数据包传递给对方,而要保证确实传送到对方那里, 则需要满足各类条件。 其中两个重要的条件是 IP 地址和 MAC地址 。 IP地址指明了节点被分配到的地址,可变换;Mac地址是指网卡所属的固定位置,基本不会更改。

TCP协议:位于传输层,提供可靠的字节流服务(将大块数据分割成以报文段为单位的数据包进行管理)。TCP的三次握手:发送端首先将标有SYN标志的数据包发给对方,接收端收到后回传一个带有SYN/ACK标志的数据包来确认收到信息,最后发送端再回传一个带ACK标志的数据包代表“握手”结束。

DNS服务:位于应用层,提供域名到IP地址的解析服务(通过域名查找IP地址或者逆向从IP地址反查域名)。
在这里插入图片描述

二 cookie

基本介绍:1 当一个浏览器访问某web服务器时,web服务器会调用addCookie()方法,在响应头中添加一个名叫Set-Cookie的响应字段用于将Cookie返回给浏览器,当浏览器第二次访问该web服务器时会自动的将该cookie回传给服务器,来实现用户状态跟踪。

2 每一个cookie都有一个name和一个value,且name属性是唯一的。每个web浏览器储存多个web站点的cookie,浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

分类:会话级别 or 持久化
1 会话级别的cookie储存在浏览器的内存中,用户关闭浏览器后删除。

2 持久化的cookie存储在浏览器目录下的文件(磁盘)中,这需要设置该cookie的生命周期setMaxAge,以秒为单位,优先级别高于expires,类似定时器代表过了多久浏览器删除该cookie。

cookie的作用域
cookie的domain和path属性定义了cookie的作用范围,即访问哪些网站或url时,会自动的带着该cookie。domain即域名,默认是当前主机(不包括子域名),path默认是*(所有路径),即域名后面的的路径。大部分情况下我们都是使用默认的设置即可。

三 session

基本介绍:web服务器中会开辟一块内存用来保存服务器端所有的session,每个session都会有一个唯一标识sessionid,根据客户端传过来的jsessionid(cookie中),找到对应的服务器端的session。为了防止服务器端的session过多导致内存溢出,web服务器默认会给每个session设置一个有效期, (30分钟)若有效期内客户端没有访问过该session,服务器就认为该客户端已离线并删除该session。

保存sessionid的方式

1 放在cookie中,通过一个特殊的cookie,name为JSESSIONID,value为服务器端某个 session的ID,默认的方式。但是当浏览器禁用cookie后session就会失效。

2 附加在url路径后面,在cookie浏览器被禁用时启用。可作为附加信息添在url后面或作为查询字符串加在url后面

基本原理

当用户发送请求到服务器后,先检查请求中是否含有sessionid,如果没有说明是第一次访问,服务器就会创建一个session对象,并将sessionid附加到set-cookie的响应头中。
如果存在sessionid就会到服务器查找对应的session。所以说,服务器端的session和客户端的cookie是息息相关的,若是没有了cookie,又不做其他处理的话,服务器端的session也没了。

question:关闭浏览器后session会消失吗?
tip:从服务端和浏览器端考虑。

四 token

基本介绍:token可理解为“令牌”,是全局唯一的一个字符串,用来识别唯一的客户端。token解决了session依赖于单个Web服务器的问题,session只存在于单一服务器中,而在web服务器集群环境下需要用户多次登录,使得用户体验很不好。比如,某人在a服务器上登录过一次,这时跳转到b服务器但依靠session就还得再登录一次。

基本原理:模拟cookie、session的机制。根据“cookie中根据sessionid来查找服务器端session的”,生成客户端唯一字符串;使用redis的哈希类型来模型服务器端的session,得到服务端会话信息存储,再让二者匹配。

我们可以在用户第一次请求该web服务器时或是用户登录该web服务器时,生成一个全局唯一的token返回给前端存储,同时将该用户信息存到redis中并设置有效期,之后每次请求中都在请求头中带着这个token,服务器端根据这个token到redis中查找对应的用户信息,即得到了我们所说的 “session”。

总结cookie session token

cookie:一种数据载体,把session放在cookie中送到客户端那边去,之后cookie跟着每个请求头发给服务端。

session:诞生并保存在服务器中,由服务器主导一切。

token:诞生于服务器,保存于浏览器,由客户端主导一切,可以放在cookie或storage里,持“令牌”访问服务器。

详情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值