大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
浏览器缓存动态内容,缓存的内容在浏览器本地,而内容由web服务器生成,任何一方都不可能完成这一系列过程,他们之间有一种沟通机制,这就是缓存协商.
如何协商
当浏览器向web服务器请求内容时,服务器需要告诉浏览器那些内容可以被缓存,一旦浏览器知道某个内容可以缓存后,下次当浏览器需要请求这个内容时,它便不会直接向服务器请求完整内容,而是询问服务器是否可以使用本地的缓存,服务器在收到浏览器的询问后需要作出过段的回应,是允许浏览器使用本地缓存还是将最新内容传回浏览器.
一个test.php
<?php echo time(); ;?>
如用ie浏览器访问这个页面时,返回状态码200,连续多次刷新这个页面,这个页面并没有使用本地缓存,也没有向服务器作出任何表示.打开ie的和这个临时文件目录发发现,该缓存文件的”上次修改时间”为无,浏览器并不知道这个文件的生成时间或上次修改时间,没有过期检查的依据,自然无法使用缓存.
last-modified
当在动态程序添加了last-modified后,浏览器请求了该地址,再次刷新该地址会发现请求参数中携带了一个if-modified-since.这意味着浏览器在询问服务器:“我请求的内容在这个if-modified-since对应的时间之后是否有过更新”,我们需要检查动态内容是否有更新,这部分需要动态程序自己来决定.
<?php $modified_timie=$_SERVER[‘HTTP_IF_MODIFIED_SINCE’]; if(strtotime($modified_time)+3600>time()){ header(“HTTP/1.1 304”); exit(1); }; ?>
另一种协商方法是ETag
它与前面所讲的协商方式非常类似,但它没有采用内容的最后修改时间,而是采用了一串编码来标记内容,称为ETag.一个原则是,如果一个内容的ETag没有变化,那么这个内容也一定没有更新.
这里不讲这个,之后看情况是否补充.
浏览器缓存截止期
Expires告诉浏览器该内容在何时过期,暗示浏览器在该内容过期之前不需要询问服务器,而直接使用本地缓存即可.
对应静态内容,web服务器默认情况下不会开启Expires标记的支持,需要自己去修改配置.
请求页面
ctrl+f5 它使得网页及其所有组件直接向web服务器发送请求,并且不使用缓存协商.
f5 它等同于单机浏览器的刷新按钮,它允许浏览器在请求中附加表的缓存协商,但不允许浏览器直接使用本地缓存,就是说,它能够让last_modified发挥效果,对expires无效.
单击浏览器地址栏的转到按钮或通过超链接 在浏览器输入url后回车等同于这种操作.这几种方式允许浏览器以最少的请求来获取网页的数据,浏览器对所有没有过期的内容直接使用本地缓存.
适用于本地的过期时间
header(“Cache-control: max-age=3600”);
当http响应头同时含有expires和Cache-control时,浏览器会优先考虑Cache-control.
其他
在地址栏回车
值为private或must-revalidate则只有第一次访问时会访问服务器,以后就不再访问。
值为no-cache,那么每次都会访问。
值为max-age,则在过期之前不会重复访问
按后退按扭
值为private、must-revalidate、max-age,则不会重访问,
值为no-cache,则每次都重复访问
其他里的主要还是区分浏览器,不同浏览器作用不一样.
欢迎纠正
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/184309.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...