题目 31 - 题目 35
31.为什么推荐将静态资源放到 cdn 上?
CDN(内容分发网络)是一种分布式网络,由分布在不同区域的边缘节点服务器群组成。CDN 通过缓存静态内容,使得用户可以直接从最近的 CDN 节点获取内容,从而加速访问速度并减轻源站的压力。CDN 不适用于动态内容的加速,因为动态内容需要服务器实时生成。
CDN 的工作原理是用户通过浏览器访问网站时,DNS 服务器将域名解析成 CDN 节点的 IP 地址,CDN 根据用户的 IP 地址和请求内容选择最近的缓存服务器,如果缓存服务器上有请求内容则直接响应,否则向上级服务器请求内容。
32.介绍下 304 过程
首先 304 状态码是对客户端有缓存情况下服务端的一种响应。
客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。
因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端。服务端只要判断这个时间和当前请求的文件的修改时间就可以确定是返回 304 还是 200 。
对于静态文件,例如:CSS、图片,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。但是对于动态页面,就是动态产生的页面,往往没有包含 Last Modified 信息,这样浏览器、网关等都不会做缓存,也就是在每次请求的时候都完成一个 200 的请求。
因此,对于动态页面做缓存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定义,其次根据 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或者 304 。虽然在返回 304 的时候已经做了一次数据库查询,但是可以避免接下来更多的数据库查询,并且没有返回页面内容而只是一个 HTTP Header,从而大大的降低带宽的消耗,对于用户的感觉也是提高。