Tomcat中对静态资源的处理教程

2019-10-18 20:08:10王冬梅

第二次请求时,首先看一下请求头域关键信息:

Cache-Control:max-age=0
Connection:keep-alive
Host:localhost:8080
If-Modified-Since:Mon, 06 May 2019 07:20:44 GMT
If-None-Match:W/"72259-1557127244000"

服务器收到请求后就会比对 ETag,这里匹配成功,表示资源没有修改,响应如下:

HTTP/1.1 304 Not Modified
Server: Apache-Coyote/1.1
ETag: W/"72259-1557127244000"
Date: Mon, 06 May 2019 07:21:46 GMT

注意:在复现时,要使用文本类型,如果使用 Chrome 浏览器,记得开启缓存。

2.2 Accept-Ranges

在上文的响应中,服务器设置了一个 Accept-Ranges: bytes 头,字面理解就是可以请求资源的一部分字节,客户端发现有这个头时,就可以尝试断点续传。

解析过程就是对 HTTP 规范的实现,这里不在具体分析了,规范详细信息可查看 RFC7233#section-2.3.

3. SendFile 的处理

检查是否支持 SendFile,NIO 模式下支持此操作,也就是零拷贝,此操作会减少一次到应用内存的拷贝,直接从内核将数据写入通道。Tomcat 在文件大小大于 48KB 时会尝试使用此方式发送。

4. 小结

Tomcat 对静态资源处理的实现还是比较完善的,但还是略逊色于 Nginx 这类 Web 服务器,因为它们能直接处理静态资源,而 Tomcat 还要多做一次映射。一般的都会进行动静分离,让 Tomcat 专注处理动态请求。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对易采站长站的支持。