5、其他相关
5.1 Session原理
session 可以放在文件、内存中或数据库都可以,是以键值对的形式存储。Session 也是一种 key-value 的属性对。
当程序需要为某个客户端的请求创建一个 session 的时候,服务器首先检查这个客户 端的请求里是否已包含了一个 session 标识 - 称为 session id,如果已包含一个 session id 则说明以前已经为此客户端创建过 session,服务器就按照 session id 把这个 session 检索 出来使用(如果检索不到,可能会新建一个,根据 getSession()方法的参数),如果客户 端请求不包含 session id,则为此客户端创建一个 session 并且生成一个与此 session 相关 联的 session id,这个 session id 将被在本次响应中返回给客户端保存。
- session的客户端实现方法(session id的保存):
1、使用cookie保存
2、url重写:就是把 session id 直接附加在 URL 路径的后面,也就是像我们经常看到 JSP 网站会有 aaa.jsp?JSESSIONID=*一样的。
3、在页面表单里增加隐藏域
- session被创建的时间:
一个常见的错误是以为 session 在有客户端访问时就被创建,然而事实是直到某 server 端程序(如 Servlet)调用 HttpServletRequest.getSession(true)这样的语句时才会被创建。 - session被删除的时间:
A.程序调用 HttpSession.invalidate()
B.距离上一次收到客户端发送的 session id 时间间隔超过了 session 的最大有效时间
C.服务器进程被停止 - getSession()/getSession(true)、getSession(false)的区别:
getSession()/getSession(true):当 session 存在时返回该 session,否则新建一个 session 并返回该对象。
getSession(false):当 session 存在时返回该 session,否则不会新建 session,返回 null。
5.2 cookie的机制
1、cookie的种类
- .以文件方式存在硬盘空间上的永久性的 cookie。
- 停留在浏览器所占内存中的临时性的 cookie。
2、cookie的有效期
maxAge 决定着 Cookie 的有效期,单位为秒。
- 当maxAge属性为正数,则cookie在maxAge秒之后自动失效。浏览器会将 maxAge 为正数的 Cookie 持久化,即写到对应的 Cookie 文件中。无论客户关闭了浏览器 还是电脑,只要还在 maxAge 秒之前,登录网站时该 Cookie 仍然有效。
- 当maxAge为负数,表示该 Cookie 仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该 Cookie 即失效。Cookie 信息保存在浏览器内存中,因此关闭浏览器该 Cookie 就消失了。
- Cookie 默认的 maxAge 值为–1。
- 当maxAge为0,表示删除该cookie。通过设置该 Cookie 即时失效实现删除 Cookie 的效果。失效的 Cookie 会被浏览器从 Cookie 文件或者内存中删除。
3、cookie的组成部分
Cookie 的内容主要包括:名字,值,过期时间,域和路径。
存在于http头部信息中,标准格 式: Set- Cookie: NAME=VALUE ;Expires=DATE ;Path=PATH ; Domain=DOMAIN_NAME;SECURE;例如:Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2 008 05:02:50 GMT; Path=/web;
Cookie 的域和路径属性一起构成 cookie 的作用范围。
domain 属性可以使多个 web 服务器共享 cookie。
path 指定与 cookie 关联在一起的网页。
5.3 cookie和session的原理解析
客户第一次发送请求给服务器,此时服务器产生一个唯一的 sessionID,并返回给客户端(通过 cookie),此时的 cookie 并没有 setMaxAge();只是保存于客户端的内存中,并与一 个浏览器窗口对应着,由于 HTTP 协议的特性,这一次连接就断开了。以后此客户端再发送 请求给服务器的时候,就会在请求 request 中携带 cookie,由于 cookie 中有 sessionID,所以 服务器就知道这是刚才那个客户,从而区分不同的人,购物车就是这样实现的。
5.4 cookie和session的区别
1、cookie 数据存放在客户端,用来记录用户信息的,session 数据放在服务器上。
2、正是由于 Cookie 存储在客户端中,对客户端是可见的,客户端的一些程序可能会窥探、 复制甚至修改 Cookie 中的内容。而 Session 存储在服务器上,对客户端是透明的,不存在 敏感信息泄露的危险。
3、Session 是保存在服务器端的,每个用户都会产生一个 Session。如果并发访问的用户非常多,会产生非常多的 Session,消耗大量的服务器内存。
4、cookie 的容量和个数都有限制。单个 cookie 的容量不能超过 4KB,很多浏览器都限制 一个站点最多保存 20 个 cookie,而 session 没有此问题。
5.5 session和cache的区别
- Session 是单用户的会话状态。当用户访问网站时,产生一个 SESSIONID。并存在 于 COOKIES
中。每次向服务器请求时,发送这个 COOKIES ,再从服务器中检索是否 有这个 SESSIONID 保存的数据。 - 而 cache 则是服务器端的缓存,是所有用户都可以访问 和共享的。因为从 Cache 中读数据比较快,所以有些系统(网站)会把一些经常被使用的 数据放到 Cache 里,提高访问速度,优化系统性能。
5.6 当有大量的session时如何提高速度,session的访问量较大时如何解决
把 session 放到 redis 或 memcache 等此类内存缓存中或着把 session 存储在 SSD 硬盘上。
5.7 在浏览器中输入网址(url)后,执行的全部过程,使用到的协议有哪些
1.域名解析
2.为了将消息从你的 PC 上传到服务器上,需要用到 IP 协议、ARP 协议和 OSPF 协议。
3.发起 TCP 的 3 次握手
4.建立 TCP 连接后发起 http 请求
5.服务器响应 http 请求
6.浏览器解析 html 代码,并请求 html 代码中的资源(如 js、css、图片等)
7.断开 TCP 连接
8.浏览器对页面进行渲染呈现给用户
-
域名解析
例如需要查询www.baidu.com 的 IP 地址:
1、浏览器搜索自己的 DNS 缓存(维护一张域名与 IP 地址的对应表);
2.若没有,则搜索操作系统中的 DNS 缓存(维护一张域名与 IP 地址的对应表);
3.若没有,则搜索操作系统的 hosts 文件( Windows 环境下,维护一张域名与 IP 地址的 对应表);
4.若没有,则操作系统将域名发送至 本地域名服务器–(递归查询方式),本地域名服务 器 查询自己的 DNS 缓存,查找成功则返回结果,否则,(以下是迭代查询方式)
4.1.本地域名服务器 向根域名服务器(其虽然没有每个域名的的具体信息,但存储了负 责每个域,如 com、net、org 等的解析的顶级域名服务器的地址)发起请求,此处,根域 名服务器返回 com 域的顶级域名服务器的地址;
4.2.本地域名服务器 向 com 域的顶级域名服务器发起请求,返回 baidu.com 权限域名 服务器(权限域名服务器,用来保存该区中的所有主机域名到 IP 地址的映射)地址;
4.3.本地域名服务器 向 baidu.com 权限域名服务器发起请求,得到 www.baidu.com 的 IP 地址;
5.本地域名服务器 将得到的 IP 地址返回给操作系统,同时自己也将 IP 地址缓存起来;
6.操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来;
7.至此,浏览器已经得到了域名对应的 IP 地址。 -
三次握手
-
ARP(地址解析协议)
ARP 解决的是同一个局域网内,主机或路由器的 IP 地址和 MAC 地址的映射问题。如果 源主机和目的主机在同一个局域网内(目标 IP 和本机 IP 分别与子网掩码相与的结果相同, 那么它们在一个子网),就可以用 ARP 找到目的主机的 MAC 地址;如果不在一个局域网内, 用 ARP 协议找到本网络内的一个路由器的 MAC 地址,剩下的工作由这个路由器来完成。
该协议的具体内容:- 每个主机都会有ARP高速缓存,存储本局域网内 IP地址和MAC地址之间的对应关系。
- 当源主机要发送数据时,首先检查 ARP 高速缓存中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 请求分 组,该数据包包括的内容有:(源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址)。
- 当本网络的所有主机收到该 ARP 请求分组时,首先检查数据包中的 IP 地址是否是自 己的 IP 地址,如果不是,则忽略该数据包;如果是,则首先从数据包中取出源主机的 IP 地 址和 MAC 地址写入到 ARP 高速缓存中,如果已经存在,则覆盖,然后将自己的 MAC 地址 写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。
- 源主机收到 ARP 响应分组后,将目的主机的 IP 和 MAC 地址写入 ARP 高速缓存中, 并利用此信息发送数据。如果源主机一直没有收到 ARP 响应分组,表示 ARP 查询失败。
-
路由选择协议
网络层主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器, 这些都是由路由器来完成的工作,通过查找路由表决定通过那个路径到达服务器,其中用到 路由选择协议。
1、内部网关协议(IGP)
一个自治系统内部使用,
(1)RIP(应用层协议,UDP):基于距离向量的路由选择协议。RIP 协议要求网络中的每一个路由器都要维 护从它自己到其他每一个目的网络的距离记录。这里的“距离”实际上指的是“最短距离”。 RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”。
(2)OSPF(网络层协议):
2、外部网关协议
(1)BGP协议(应用层协议,TCP):不同自治系统的路由器之间交换路由信息的协议。边界网关协议 BGP 只能是力 求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路 由。
路由器分组转发算法:
(1)首先从 IP 数据报首部提取出目的主机的 IP 地址 D,得出其所在的网络 N。
(2)若 N 就是与此路由器直接相连的某个网络,则进行直接交付,直接把数据报交付给目 的主机。否则就执行(3)。
(3)若路由表中有目的地址为 D 的特定主机路由,则把数据报传给路由表中所指明的下一 跳路由器。否则执行(4)。
(4)若路由表中有到达网络 N 的路由,则把数据报传给路由表中所指明的下一跳路由器。 否则执行(5)。
(5)若路由表中有一个默认路由,则把数据报传给默认路由所指明的默认路由器。否则执 行(6)。
(6)报告转发分组出错。 -
建立TCP连接后发起http请求
-
服务器收到请求并享有http请求
-
浏览器解析 html 代码,并请求 html 代码中的资源(如 js、css、 图片等)
-
断开 TCP 连接
-
浏览器对页面进行渲染呈现给用户
5.8 路由器和交换机的区别
1、交换机在数据链路层,路由器在网络层
2、交换机转发数据帧,路由器转发ip分组
3、交换机隔离冲突域,不隔离广播域;路由器隔离冲突域和广播域