9. 浏览器禁用 Cookie此时无法使用 Cookie 来保存用户信息,只能使用 Session 。除此之外,不能再将 Session ID 存放到 Cookie 中,而是使用 URL 重写技术,将 Session ID 作为 URL 的参数进行传递 。
10. Cookie 与 Session 选择
Cookie 只能存储 ASCII 码字符串,而 Session 则可以存取任何类型的数据,因此在考虑数据复杂性时首选 Session;缓存1. 优点
Cookie 存储在浏览器中,容易被恶意查看 。如果非要将一些隐私数据存在 Cookie 中,可以将 Cookie 值进行加密,然后在服务器进行解密;
对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的,因此不建议将所有的用户信息都存储到 Session 中 。
缓解服务器压力;2. 实现方法
降低客户端获取资源的延迟:缓存通常位于内存中,读取缓存的速度更快 。并且缓存在地理位置上也有可能比源服务器来得近,例如浏览器缓存 。
让代理服务器进行缓存;3. Cache-ControlHTTP/1.1 通过 Cache-Control 首部字段来控制缓存 。
让客户端浏览器进行缓存 。
3.1 禁止进行缓存no-store 指令规定不能对请求或响应的任何一部分进行缓存 。
Cache-Control: no-store3.2 强制确认缓存no-cache 指令规定缓存服务器需要先向源服务器验证缓存资源的有效性,只有当缓存资源有效才将能使用该缓存对客户端的请求进行响应 。Cache-Control: no-cache3.3 私有缓存和公共缓存private 指令规定了将资源作为私有缓存,只能被单独用户所使用,一般存储在用户浏览器中 。Cache-Control: privatepublic 指令规定了将资源作为公共缓存,可以被多个用户所使用,一般存储在代理服务器中 。Cache-Control: public3.4 缓存过期机制max-age 指令出现在请求报文中,并且缓存资源的缓存时间小于该指令指定的时间,那么就能接受该缓存 。max-age 指令出现在响应报文中,表示缓存资源在缓存服务器中保存的时间 。
Cache-Control: max-age=31536000Expires 首部字段也可以用于告知缓存服务器该资源什么时候会过期 。Expires: Wed, 04 Jul 2012 08:26:05 GMT在 HTTP/1.1 中,会优先处理 max-age 指令;4. 缓存验证需要先了解 ETag 首部字段的含义,它是资源的唯一标识 。URL 不能唯一表示资源,例如 http://www.google.com/ 有中文和英文两个资源,只有 ETag 才能对这两个资源进行唯一标识 。
在 HTTP/1.0 中,max-age 指令会被忽略掉 。
ETag: "82e22293907ce725faf67773957acd12"可以将缓存资源的 ETag 值放入 If-None-Match 首部,服务器收到该请求后,判断缓存资源的 ETag 值和资源的最新 ETag 值是否一致,如果一致则表示缓存资源有效,返回 304 Not Modified 。If-None-Match: "82e22293907ce725faf67773957acd12"Last-Modified 首部字段也可以用于缓存验证,它包含在源服务器发送的响应报文中,指示源服务器对资源的最后修改时间 。但是它是一种弱校验器,因为只能精确到一秒,所以它通常作为 ETag 的备用方案 。如果响应首部字段里含有这个信息,客户端可以在后续的请求中带上 If-Modified-Since 来验证缓存 。服务器只在所请求的资源在给定的日期时间之后对内容进行过修改的情况下才会将资源返回,状态码为 200 OK 。如果请求的资源从那时起未经修改,那么返回一个不带有消息主体的 304 Not Modified 响应 。Last-Modified: Wed, 21 Oct 2015 07:28:00 GMTIf-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT内容协商通过内容协商返回最合适的内容,例如根据浏览器的默认语言选择返回中文界面还是英文界面 。1. 类型1.1 服务端驱动型客户端设置特定的 HTTP 首部字段,例如 Accept、Accept-Charset、Accept-Encoding、Accept-Language,服务器根据这些字段返回特定的资源 。
它存在以下问题:
服务器很难知道客户端浏览器的全部信息;1.2 代理驱动型服务器返回 300 Multiple Choices 或者 406 Not Acceptable,客户端从中选出最合适的那个资源 。
客户端提供的信息相当冗长(HTTP/2 协议的首部压缩机制缓解了这个问题),并且存在隐私风险(HTTP 指纹识别技术);
给定的资源需要返回不同的展现形式,共享缓存的效率会降低,而服务器端的实现会越来越复杂 。
2. Vary
Vary: Accept-Language在使用内容协商的情况下,只有当缓存服务器中的缓存满足内容协商条件时,才能使用该缓存,否则应该向源服务器请求该资源 。
推荐阅读
- web漏洞-SSI注入漏洞深入详解
- 深入Facebook 官方React 状态管理器Recoil讲解
- 深入浅出Spring/SpringBoot 事件监听机制
- 深入理解PHP+Mysql分布式事务与解决方案
- 五分钟看穿Java并发相关概念,并发原来如此简单
- 深入浅出为什么你的网页需要CSP?【前端篇】
- 架构师修炼之微服务部署 - 深入理解Docker镜像
- 深入浅出React.js 性能分析
- 五分钟!简单了解VXLAN技术
- 深入探秘 Netty、Kafka 中的零拷贝技术!
