HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议(SSL(Secure Sockets Layer 安全套接字协议),),SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTP与HTTPS区别:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
http状态码分类
成功类(2字头)
200表示请求成功
重定向类(3字头)
302暂时重定向
请求错误类(4字头)
400-URL地址请求错误、资源未获取到
服务器错误类(5字头)
500-服务器错误
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
重定向类(3字头)302暂时重定向
400 Bad Request //客户端请求有语法错误,服务器不理解请求的语法
500 Internal Server Error //服务器发生不可预期的错误
请求常用的方式:get post (put delete不常用)
GET-请求会向数据库发索取数据的请求 直接获取数据,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用
post 都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的
PUT-请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容
DELETE请求-顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作
cookie seesion token专业名词叫鉴权方式
cookie的特点
- cookie是一门客户端缓存技术
- cookie数据由服务器生成,发送给浏览器保存
- cookie数据的格式:键值对
- cookie数据过期机制:设置expire值
cookie是一门客户端技术,一般是由服务器生成返回给浏览器【客户端来保存】,并且cookie是以键值对的形式保存在浏览器客户端的,每一个cookie都会有名称,值,过期时间...。cookie有很多使用场景,在项目中比较常见的有:
1.登录记住用户名
2.记录用户浏览记录
最熟悉的应该就是记住用户名这个场景,以【考试系统】的登录功能为例,当我们登录了一次【【学之思考试系统】】,后面再去登录页面登录的时候,会发现它会帮你回填之前的用户名,这个场景就是通过cookie技术实现的
studentUserName的过期时间为一个月,因此这一个月内只要不清除浏览器端的cookie数据,那么浏览器来访问网站的登录页面都可以看到登录的回填的效果
通俗:cookie日常登录一个网站,今天记住输入用户名密码登录回填的效果,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie
session的特点:
- session是一门服务端会话缓存技术。
- session由服务器端的web容器创建,保存在服务器端。
- session保存数据:键值对形式
- session过期:默认30分钟
session是服务端的会话技术,当用户登录了系统,服务器端的web容器就会创建一个会话,此会话中可以保存登录用户的信息,并且也是以键值对的形式去保存的,现在大部分系统都是使用的session技术来做的鉴权(权限鉴定),即:当用户登录完了才可以访问系统中的一些页面和数据。
以下面的系统为例:
直接访问系统考试系统首页index.html无法访问成功,会被重定向到登录页面login.html,因为这个系统有做用户鉴权,没有登录的用户无法访问系统里面的数据。
现在登录系统:
打开F12可以看到,login登录接口的响应头里有一个“set-cookie”的头信息,里面就有"SESSION=Mzc0NDNjNGItZmNhMS00ZTVmLThmMzgtNzA5NzJiNDk4OGUy;"这个信息,浏览器看到这个响应头就知道要把这个数据写到cookie当中,cookie名称为:“SESSION”,值为:"Mzc0NDNjNGItZmNhMS00ZTVmLThmMzgtNzA5NzJiNDk4OGUy"。这个session会话编号就是服务器返回的。服务器端的这个session会话保存了登录用户的信息
登录完成后再访问系统中的任何页面都是有没有问题的,因为后面每次请求都会带上浏览器里cookie里面的这个“SESSION”的值过去,如图:
当服务器收到这个请求的“Cookie”请求头里的会话id去服务器匹配,判断是同一个session会话,会话中有登录用户的信息,从而判断这个请求是一个登录用户发出的,从而放行这个请求。
session过期处理:
当服务器端的会话过期了,那么当你继续发起请求的时候,因为你从客户端带过去的会话编号还是之前的那个,就会验证不通过,就会提示你会话过期请重新登录
Token(令牌)
Token的引入:
Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
Token的定义:
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮
token的意思是"令牌",是用户身份的验证方式,最简单的token组成:uid【用户唯一的身份标识)、time(当前时间的时间戳)+签名可以]防止恶意第三方拼接token请求服务器)
区别对比:
cookie 和session的区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗、考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
token 和session 的区别
1、作为身份认证 token安全性比session好 我们浏览器端用到session相对较多、而手机端用token比较多一点
2、token和session其实都是为了身份验证,session一般翻译为会话,而token更多的时候是翻译为令牌;
3、session在服务器端会保存一份,可能保存到缓存、文件或数据库;
4、session和token都是有过期时间一说,都需要去管理过期时间;