网络基础(一)---http、https、session、cookie

本文介绍了http和https的区别,http是无状态的,而https在http基础上增加了加密和认证,确保数据安全。http/https请求和响应执行过程包括URL解析、DNS查找、TCP连接和数据传输。https的实现原理涉及SSL/TLS协议,通过握手过程建立安全连接。此外,文章还对比了cookie和session两种会话跟踪技术,cookie存储在客户端,session在服务器端,两者各有优缺点,适用于不同场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http和https的区别

 

http开头的请求是HTTP超文本传输协议运行在TCP协议上。超文本传输协议是一种应用层协议,是一种无状态的数据传输协议,客户端和服务端都无法验证彼此的状态。需要借助session和cookie。默认端口是80。http封装的数据都是明文的,可以通过抓取获得,不安全。

https:是在http的基础上增加了加密认证操作,是一种安全的http,https的默认端口是443,https运行在ssl上,ssl运行在TCP上,采用https协议的服务器 必须从CA 申请一个用于证明服务器用途类型的证书,客户端只有认证过才信任该服务器

http/https请求和响应执行过程

 

 

  •  用户在浏览器输入网址(URL),发送请求

(1)检查 url是否合法

(2)判断请求时http请求还是https请求,若是http请求,采用http协议发送,若是https请求,采用https协议发送

(3)url字符转换

  • 开始解析URL
  • 查找IP地址

(1)首先检查浏览器缓存中是否有对应ip地址,有则返回,无下一步。

(2)根据gethostbyname方法,查找本地的host文件,看是否有对应的ip,有则返回,没有转到下一步

(3)向DNS服务器发送ip查询请求,返回ip地址

  •  建立连接

(1)浏览器找到了目标ip地址,根据请求中的端口号,调用scoket进行与服务端的TCP连接

(2) 建立连接后,根据http协议或者https协议进行数据传输

  • 页面渲染 
  • 返回给客户端响应 

 http发送数据,就是在上述简历TCP连接后,直接开始传输数据,那么若请求时https时,采用https协议又是什么过程呢?

https实现原理

 那么我们知道https协议中加了SSL/TSL,这两个协议是网络7层模型中,位于会话层的协议

先来说明概念,安全套接字(Secure Socket Layer,SSL)协议是Web浏览器与Web服务器之间安全交换信息的协议,提供两个基本的安全服务:鉴别与保密。TSL是SSL的后续版本。

那么https请求响应的过程,区别在于上述标红的地方开始,https加了执行SSL协议执行步骤(握手),有三种分类,这里以最普遍的第一种来说明

  • 只验证服务器的握手过程
  • 验证服务器和客户端的握手过程
  • 回复原有会话的握手过程

 https协议的请求响应过程

前面步骤一致,当客户端与服务端建立TCP连接后

(1)客户端向服务端发送Client hello方法,客户端发出的请求中会包含协议版本号,一个随机数字A,以及客户端支持的加密算法

(2)服务端向客户端发送 server hello方法,服务端会确定双方使用的加密算法,并把自己的安全的证书以及公钥并生成一个随机数字B,发送给客户端(如果是第二种SSL握手协议,此时服务端会要求客户端发送证书)

(3)客户端确认证书有效之后,用证书的公钥加密一个随机数字C发送给服务端,并且发送结束SSL握手阶段通知

(4)服务端使用自己的私钥解密获得随机数C,,这样客户端和服务端都有三个随机数据ABC,接下来客户端和服务端根据这三个随机数字生成会话密钥,按照之前确定的加密算法进行数据传输。

可以看到在握手阶段采用的是非对称加密算法,在会话阶段采用的对称加密(客户端服务端加密解密数据用的密钥是一样的)

TLS/SSL协议是在传输层对网络进行加密的,TLS/SSL层位于应用层和传输层之间,保证应用层和传输层进行数据传输的时候,会经过SSL层进行加密


 cookie和session的区别

 cookie技术和session技术都是会话跟踪技术,弥补http无状态协议,记录客户信息的,区别是cookie技术是在客户端实现的,而seesion技术是在服务器端实现的。

cookie技术过程

(1)浏览器第一次访问支持cookie的服务器,会提交客户的用户名和密码

(2)服务器给客户端响应的时候,会在response的header添加服务器为该客户端创建的cookie信息,服务器会为每一个客户端创建一个cookie,相当于客户端的通行证

(3)以后客户端浏览器再访问服务器的时候,会把cookie信息加到repuest的header,一起发送给服务端,服务端根据cookie找到对应的客户端的特有的信息

在我们平时的登录界面请记住我这样的操作都是cookie技术实现的

cookie的生命周期

cookie在java中被封装到javax.servlet.http.Cookie类中,通过request.getCookie()方法获得客户端的cookie对象,服务器通过reponse.addCookie()方法为每一个客户端设置cookie。

可以通过cookie.setMaxAge( 时间参数)来设置cookie的存活时间,cookie.getMaxAge( )来得到cookie对象的最大存活时间,如果这个时间大于0,则浏览器会把cookie文件写到浏览器的本地文件中,到这个时间内,这个cookie都有效;如果小于0,则cookie文件存在浏览器的内存中,当关闭浏览器cookie就失效;cookie.getMaxAge( )=0表示删除这个cookie对象;cookie.setMaxAge( Integer.MaxValue)设置cookie永久有效

cookie的不可跨域名

不同的浏览器之间不共享cookie,在百度浏览器中不能得到修改谷歌的cookie对象 

 cookie的安全性设置

 cookie中存放密码这些信息不安全,可以通过cookie.setSecue(True)来保证cookie信息只能在https和ssl协议的连接中传递,而不会在http中传递,但是这个属性并不会对cookie信息加密,所以没有根本解决问题,可以使用加密算法。但是把密码等重要信息放在cookie中,在本地浏览器中是不安全的,可能发生cookie诈骗。

 session技术过程

 seesion技术是在服务器端实现的会话跟踪技术,是基于cookie或者重写URL实现的。如果是cookie是根据客户携带的通行证来确定客户端的信息,那么seesion相当于服务器查找自己内存中的客户明细表来找到对应客户端的信息。

 session在java中被封装到javax.servlet.http.HttpSeesion类中,每一个访问服务器的客户都会创建一个seesion对象,默认的seesion采用cookie实现.

(1)当浏览器第一次访问服务器时,服务器通过getSeesion()方法为该客户端创建session对象,并发送一个名为JSESSIONID的cookie给浏览器,这个cookie的age是-1,也就是这个cookie只有在当前会话有效

(2)浏览器接受到服务器的session cookie会把它写入自己的内中中,再访问浏览器的时候就把JSESSIONID加在resquest中,便于服务器收到通过这个id来识别客户端的信息。当会话结束这个seesion cookie也就失效了。

(3)当一个浏览器的同一页面的多个窗口访问的同一个服务器则共享session对象,如果是从桌面双击两下浏览器客户端,打开两个应用来访问同一服务器,是不同的session对象。 

session的生命周期

服务器为了高效,把session文件存放在服务器内存中,所以为了防止内存溢出,session文件应尽量简单,所以session的生命周期也就是在当前会话有效,说明的是当浏览器访问的静态的html,image服务器不会创建session对象,只有在访问jsp或者servlet才会创建session对象,只要用户继续访问服务器,服务器就会更新session的最后访问时间,并维护session对象。

但是为了防止过多浏览器客户同时访问,session对象太多导致内存溢出,可以给session对象设置最大存活时间,当超过这个时间,这个session对象未被更新,则失效,也可以使用session.invalidate()方法让session对象失效。在tomcat中这个值默认是20分钟。

 总结:当考虑安全时,选用session技术;考虑到服务器负载性能,使用cookie,当然二者一般都在使用;但是当客户端禁用cookie时,sesssion技术的实现就需要靠重写URL来传递seesion id了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值