应用层之httphttpscookie和session
Posted 小猪媛不圆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用层之httphttpscookie和session相关的知识,希望对你有一定的参考价值。
应用层
1.http协议
1.1 http封装后数据报的格式
1.2 http常用的方法
http中最常用的就是get和post方法,除此之外还有一些其他的方法,get一般用于获取/查询资源信息,而post一般用于更新资源信息。
1.3 get和post方法的区别
- 使用get方法可以被收藏为书签,可以被缓存,参数保留在历史记录中;而post方法这些都不行
- get方式提交数据的大小(一般来说1024字节),http协议并没有硬性限制,而是与浏览器、服务器、操作系统有关。post理论上来说没有大小限制,http协议规范也没有进行大小限制,但实际上post所能传递的数据量根据取决于服务器的设置和内存大小。
- 对数据类型的限制:get方法只允许ASCII字符;post无限制,也允许二进制数据
- 安全性:get方法的安全性较差,因为发送的数据时URL的一部分,而post方法传输数据的时候。请求数据可以放在请求正文里面
- 可见性:get方法数据在URL中,对所有人是可见的,而post方法数据不会显示在URL中
1.4 http状态码
1.5 http常见header
- Content-Type:数据类型(text/html等)
- Content-Length:Body的长度(消息体的长度)
- Host:客户端告诉服务器,所请求的资源是在哪个主机的哪个端口上
- User-Agent:声明用户的浏览器版本信息
- referer:当前页面是从哪个页面上跳转过来的
- location:搭配3xx状态码使用,告诉客户端接下来要去哪里访问
- Cookie:用于客户端存储少量信息,通常用于实现会话(session)功能
2.session和cookie
2.1 cookie
http是一个无状态协议,但是访问有些资源时往往要经过认证才能访问,而且要一直保持在线状态,所以,cookie十一中在浏览器端解决的方案,将登录认证之后的用户信息保存在本地浏览器中,后面发起http请求,都会自动携带上该信息,就能达到认证用户,保持用户在线的作用
- 使用场景:免登陆
- 实现:将用户的信息保存在客户端本地(和浏览器相关的本地路径下,保存用户信息到本地文件)域名绑定用户信息的cookie,之后访问某个域名时,自动从本地抓取该域名的cookie信息
- 用户登录,校验通过时,响应头携带set-cookie,告诉客户端,让浏览器自动设置cookie到本地之后每次请求,浏览器自动携带cookie头。
- cookie是保存在客户端本地文件,使用场景:多少天免登录
2.2 session
将用户敏感信息放到本地浏览器中,能解决一定得问题,但是又引入了新的安全问题,一旦cookie丢失,用户信息泄露,也很容易造成跨站共计,所以有了另一种解决方法,将用户敏感系信息保存至服务器,而服务器本森采用md5算法或相关算法生成唯一值(session id),将该值保存至客户端浏览器中,随后,客户端后序2请求,浏览器会自动携带该id,进而再在服务器端认证,达到状态保持的效果
登录操作:
- 生成随机的字符串session id,保存在Tomcat的用户信息数据结构中,session id绑定一个用户,一个用户保存多个信息
- 把session id 放在响应头,头信息的键值对,键是对方约定好的,值就是session id 的值
- 客户端之后的请求,都携带session id
- 服务端接收请求,都验证session id (在map中根据通行证号、查询用户,来判断是否登录)
面试:
- session 是用来干嘛的?会话,用来保持用户身份,主要解决需要登录的敏感资源访问的问题
- 如何实现?通过服务器保存session的信息
- 流程
- session 在会话结束(超时或注销),服务器重启消失
2.3 cookie和session的区别
- cookie以文本格式存储在浏览器中,而session存储在服务端
- 因为每次发起http请求,都要携带有效的cookie信息,所以cookie一般有大小限制,以防止增加网络压力,一般不超过4k
- 可以轻松访问cookie值但我们无法轻松访问会话值,因此session方案更安全
- 数据存放位置不同:cookie数据存放在客户的浏览器上,session数据放在服务器上。
- 安全程度不同:cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
- 性能使用程度不同:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
- 数据存储大小不同:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。
- 会话机制不同:session会话机制:session会话机制是一种服务器端机制,它使用类似于哈希表(可能还有哈希表)的结构来保存信息。cookies会话机制:cookie是服务器存储在本地计算机上的小块文本,并随每个请求发送到同一服务器。 Web服务器使用HTTP标头将cookie发送到客户端。在客户端终端,浏览器解析cookie并将其保存为本地文件,该文件自动将来自同一服务器的任何请求绑定到这些cookie。
3. http和https的区别
- HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
- HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
3.1 https的优点
- 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器。
- HTTPS 协议是由SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、修改,确保数据的完整性。
- HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
3.2 https的缺点
- HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近。
- HTTPS 连接缓存不如 HTTP 高效,会增加数据开销,甚至已有的安全措施也会因此而受到影响。
- HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用。
- SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗。
- 成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。
- HTTPS 协议的加密范围也比较有限。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
关于http和https,下面这篇文章总结的非常好,我们可以参考:http和https面试常考问题
以上是关于应用层之httphttpscookie和session的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Roo 项目并获取 org.hibernate.LazyInitializationException: could not initialize proxy - no Sessi