1. cookie和session
共同点:Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力。
Session可以用Cookie来实现,也可以用URL回写的机制来实现。用Cookie来实现的Session可以认为是对Cookie更高级的应用。
区别点:
- Cookie将状态保存在客户端,Session将状态保存在服务器端;
- Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求附上这些cookies。Session并没有在HTTP的协议中定义。
- Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户,session变量通过用户的浏览器在访问的时候返回给服务器。当客户禁用cookie时,这个值也可能设置为由get来返回给服务器
session机制:
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。
session实现方式:
服务器给每个Session分配一个唯一的JSESSIONID,并通过Cookie发送给客户端。当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器能够找到这个客户端对应的Session。
与cookie相关的http头:
1)Cookie:request中,客户端将服务器设置的Cookie返回到服务器
2)Set-Cookie:response中,服务器向客户端设置Cookie
2. 缓存(cache)
概念:
WEB缓存(cache)位于Web服务器和客户端之间。缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:如果是相同的URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发送请求。
优点:
减少相应延迟:因为请求从缓存服务器(离客户端更近)而不是源服务器被相应,这个过程耗时更少,让web服务器看上去相应更快。
减少网络带宽消耗:当副本被重用时会减低客户端的带宽消耗;客户可以节省带宽费用,控制带宽的需求的增长并更易于管理。
客户端缓存生效流程:
服务器收到请求时,会在200OK中回送该资源的Last-Modified和ETag头,客户端将该资源保存在cache中,并记录这两个属性。当客户端需要发送相同的请求时,会在请求中携带If-Modified-Since和If-None-Match两个头。两个头的值分别是响应中Last-Modified和ETag头的值。服务器通过这两个头判断本地资源未发生变化,客户端不需要重新下载,返回304响应。
与缓存相关的http头:
1)If-Modified-Since:request中,客户端存取的该资源最后一次修改的时间,与Last-Modified配对使用
2)Last-Modified:response中,响应中资源最后一次修改的时间
3)If-None-Match:request中,客户端存取的该资源的检验值,与ETag配对使用
4)ETag:response中,响应中资源的校验值,在服务器上某个时段是唯一标识的
3. cookie算是缓存吗?
1)从严格意义上来讲,不算,它只是HTTP的一个头(header)字段,然后遵守HTTP标准的web服务器和客户端(浏览器),都按照这个字段的标准来执行相应的行为,cookie一个常用的目的是来实现认证,而非缓存
2)如果你非要采用cookie的方式进行数据存储,那他就是缓存。不过不建议使用这种方式,无论是从安全性,和还是存储量来分析,这都不是好的解决方案