1 动态页面
与 静态页面
区别
静态资源
: 当用户多次访问这个资源,资源的源代码
永远不会改变的资源。
动态资源
:当用户多次访问这个资源,资源的源代码可能会发送改变。
2 什么是动静分离
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。
动静分离简单的概括是:动态文件与静态文件的分离
3 为什么要用动静分离
在我们的软件开发中,有些请求是需要后台处理的(如:.jsp
、.do
等等),有些请求是不需要经过后台处理的(如:css
、html
、jpg
、js
等等文件),这些不需要经过后台处理的文件称为静态文件,否则动态文件。因此我们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗。当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决。
动静分离将网站静态资源(HTML
,JavaScript
,CSS
,img
等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。这里我们将静态资源放到 nginx
中,动态资源转发到 tomcat
服务器中。
因此,动态资源转发到 tomcat
服务器我们就使用到了前面讲到的反向代理了。
4 动静分离的原理
动静分离的原理很简单,通过 location
对请求 url
进行匹配即可,具体配置如下:
### 静态资源访问
server {
listen 80;
server_name static.test.com;
location /static/imgs {
root F:/;
index index.html index.htm;
}
}
### 动态资源访问
server {
listen 80;
server_name www.test.com;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
测试:
启动 Nginx
服务器,浏览器访问:http://static.test.com/static/imgs/a.png
会找到本地的 F:/static/imgs/a.png
图片,展示图片,这就是访问静态服务器。
如果在 JSP
中引入该图片的地址,那么在网站中就可以实现动静分离。
5 静态资源缓存
为什么互联网公司项目中,静态资源
URL
后面会加一个时间戳?
作用:控制缓存
实际项目中在发布版本的时候,可能由于浏览器缓存导致与服务器端代码发生冲突。
这时候可以在静态资源请求后面加上时间戳,对应每次发布版本的时间。
6 HTTP
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
,从而大大的降低带宽的消耗,对于用户的感觉也是提高。