爱创课堂每日一题第二十四天-ETag应用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爱创课堂每日一题第二十四天-ETag应用?相关的知识,希望对你有一定的参考价值。

Etag由服务器端生成,客户端通过If-Match或者说If-None-Match这个条件判断请求来验证资源是否修改。常见的是使用If-None-Match。请求一个文件的流程可能如下:

====第一次请求===

1.客户端发起 HTTP GET 请求一个文件;
2.服务器处理请求,返回文件内容和一堆Header,当然包括Etag(例如"2e681a-6-5d044840")(假设服务器支持Etag生成和已经开启了Etag).状态码200

====第二次请求===

客户端发起 HTTP GET 请求一个文件,注意这个时候客户端同时发送一个If-None-Match头,这个头的内容就是第一次请求时服务器返回的Etag:2e681a-6-5d0448402.服务器判断发送过来的Etag和计算出来的Etag匹配,因此If-None-Match为False,不返回200,返回304,客户端继续使用本地缓存;流程很简单,问题是,如果服务器又设置了Cache-Control:max-age和Expires呢,怎么办

答案是同时使用,也就是说在完全匹配If-Modified-SinceIf-None-Match即检查完修改时间和Etag之后,

服务器才能返回304.(不要陷入到底使用谁的问题怪圈)


以上是关于爱创课堂每日一题第二十四天-ETag应用?的主要内容,如果未能解决你的问题,请参考以下文章

爱创课堂每日一题第二十天- 谈谈性能优化问题?

爱创课堂每日一题第三十四天-用过哪些设计模式?

爱创课堂每日一题第二十三天- Expires和Cache-Control?

爱创课堂每日一题第二十一天-移动端性能优化?

爱创课堂每日一题第二十五天-2017/9/27 栈和队列的区别??

爱创课堂每日一题第二十九天- ES6的了解?