cookie 和 session 的区别?(必会)
存储位置不同
cookie 存放在客户端电脑,是一个磁盘文件。Ie 浏览器是可以从文件夹中找到。session 是存放在服务器内存中的一个对象。 chrome 浏览器进行安全处理,只能通过浏览器找到。Session 是服务器端会话管理技术,并且 session 就是 cookie 实现的。
存储容量不同
单个cookie 保存的数据<=4KB,一个站点最多保存 20 个 Cookie。
对于session 来说并没有上限,但出于对服务器端的性能考虑,session 内不要存放过多的东 西,并且设置 session 删除机制。
存储方式不同
cookie 中只能保管 ASCII 字符串,并需要通过编码方式存储为 Unicode 字符或者二进制数据。
session 中能够存储任何类型的数据,包括且不限于 string,integer,list,map 等。
隐私策略不同
cookie 对客户端是可见的,别有用心的人可以分析存放在本地的 cookie 并进行 cookie 欺骗,所以它是不安全的。
session 存储在服务器上,不存在敏感信息泄漏的风险。
有效期上不同
开发可以通过设置cookie 的属性,达到使 cookie 长期有效的效果。
session 依赖于名为JSESSIONID 的cookie,而 cookie JSESSIONID 的过期时间默认为-1,只需关闭窗口该 session 就会失效,因而 session 不能达到长期有效的效果。
服务器压力不同
cookie 保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie 是很好的选择。
session 是保管在服务器端的,每个用户都会产生一个 session。假如并发访问的用户十分多,会产生十分多的 session,耗费大量的内存。
HTTP 中重定向和请求转发的区别?
实现
转发:用request 的 getRequestDispatcher()方法得到 ReuqestDispatcher 对象,调用forward()方法
request.getRequestDispatcher("other.jsp").forward(request, response);
重定向:调用response 的 sendRedirect()方法response.sendRedirect("other.jsp");
重定向
2 次请求,请求转发 1 次请求
3> 重定向地址栏会变,请求转发地址栏不变
4> 重定向是浏览器跳转,请求转发是服务器跳转
5> 重定向可以跳转到任意网址,请求转发只能跳转当前项目
6>请求转发不会丢失请求数据,重定向会丢失
Get 和 Post 的区别?
Get 是不安全的,因为在传输过程,数据被放在请求的 URL 中;Post 的所有操作对用户来说都是不可见的。
Get 传送的数据量较小,一般传输数据大小不超过 2k-4k(根据浏览器不同,限制不一样, 但相差不大这主要是因为受 URL 长度限制;Post 传送的数据量较大,一般被默认为不受限制。
Get 限制 Form 表单的数据集的值必须为 ASCII 字符;而 Post 支持整个 ISO10646 字符集。
Get 执行效率却比 Post 方法好。Get 是 form 提交的默认方法。
什么是Token
Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
token一般都需要在后端服务保存一份,比如使用redis保存。如果不想保存,可以使用jwt方案。
如何解决跨域问题?
跨域指的是浏览器不能执行其它网站的脚本,它是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。
所谓同源指的是:协议、域名、端口号都相同,只要有一个不相同,那么都是非同源。
解决方案:
1:使用ajax的jsonp
2:nginx 转发:利用nginx反向代理,将请求分发到部署相应项目的tomcat服务器,当然也不存在跨域问题。
3:使用cors:写一个配置类实现WebMvcConfigurer接口或者配置FilterRegistrationBean 网关也可以配置跨域,如果网关配置了跨域,后边微服务一般不需要配置
http和https的区别?