zoukankan      html  css  js  c++  java
  • AJAX_ IE浏览器在get请求的缓存问题

    浏览器的第一次请求需要从服务器获得许多 css、img、js 等相关的文件,如果每次请求都把相关的资源文件加载一次,对 带宽、服务器资源、用户等待时间 都有严重的损耗,浏览器有做优化处理,其把css、img、js等文件在第一次请求成功后就在本地保留一个缓存备份,后续的每次请求就在本身获得相关的缓存资源文件读取就可以了,可以明显地加快用户的访问速度。css、img、js等文件可以缓存,但是动态程序文件例如php文件不能缓存,即使缓存我们也不要其缓存效果。

    (仅有IE浏览器在get请求下会缓存动态程序文件,post请求不会缓存)

    IE浏览器缓存现象:

    解决IE浏览器缓存动态文件的办法

    追加参数

    Math.random()

    new  Date().getTime()

     

    直接在open()方法的url参数中追加随机数,或者时间戳,改变每次请求的url,url地址不一样,则每次都会请求服务器最新的文件内容

    http请求,每次url不一样了,就会获取服务器最新的数据内容

    设置请求头

    xhr.setRequestHeader('If-Modified-Since','0');  【值随意1,2,3,4都可以】

    当我们请求服务器上一个文件的时候,如果此次设置了这个请求头,会把这个请求头的值与所请求的服务器对应的文件的最后修改时间做个对比,如果对比时间一样,则读取本地的浏览器缓存文件,否则读取服务器上最新的文件内容

                          

    http请求,自动加了这个设置的请求头:

     

    以上的设置请求头的方式,虽然可以解决缓存的问题,但是还是会产生仅有一个的动态缓存文件。

    PHP服务端禁用缓存 :

    header("Cache-Control:no-cache,must-revalidate");

    通过设置服务器的响应头告诉浏览器,请求的时候不要读取浏览器本地缓存文件,读取最新的文件。

     

    http请求过程:

    这种方式不会产生动态缓存文件,彻底解决了动态文件的缓存问题。

    问题:项目上线了一段时间,中途修改了此项目的js或css文件,如何不让浏览器缓存?

    让地址变化即可,加一个参数即可:

    <script  src=”admin.js?v=2></script>

    <link    src=”style.css?v=1”></link>

  • 相关阅读:
    SpringCloud(七)之SpringCloud的链路追踪组件Sleuth实战,以及 zipkin 的部署和使用
    java动态代理实现与原理详细分析
    Java中List, Integer[], int[]的相互转换
    Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore
    lock wait timeout exceeded; try restarting transactio解决方案
    java命令--jstack 工具 查看JVM堆栈信息
    kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
    Spring全局异常处理
    SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
    mysql函数之截取字符串
  • 原文地址:https://www.cnblogs.com/bk233/p/7280595.html
Copyright © 2011-2022 走看看