解决iis静态文件 禁用缓存

解决方案(推荐)

image


image

对应的web.config文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
     <system.webServer>        

<staticContent>
     <clientCache cacheControlMode="DisableCache" />
</staticContent>
      

   
     </system.webServer>
< /configuration


猜测原理分析

场景: 一个页面, 会加载一些js或css文件.

浏览器第一次加载静态文件(js或css)时, 响应报文的header里会默认设置Expire.

image

浏览器会保存该文件到本地.

image

(上图使用ChromeCacheView软件可以查看)

浏览器第二次请求时, 会直接从本地获取文件判断是否到达过期时间, 未达过期时间, 直接取该文件(显示磁盘缓存), 不向服务器发出请求. (服务器文件即使修改了, 也不会去加载).

image

解决方案: 响应报文的header里不返回Expire.

image

这样每次请求都会向服务器发出请求. 返回也会返回304

image








以下方案,使用以下方案后, 上面的方案将无效.  是将静态文件交与.Net的类来处理. 不能解决问题. 了解一下思路. 

独立打开一个选项卡访问js或css是不会缓存的. 但在html里加载css与js时, 还是会从本地读取js与css. 主要原因是返回的js与css文件带有Expire. 再添加一个header: Expire 设置为1900-01-01或空可能可以, 没测试过.


1. 将静态文件的请求 交由.net程序集来处理

image

对应的web.config文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
     <system.webServer>
         <handlers>
             <add name="html" verb="*" path="*.html" type="System.Web.StaticFileHandler" />
         </handlers>      
     </system.webServer>
</configuration> 


2. 输出缓存设置(这个只能处理.net程序集处理的请求)

image

对应的web.config文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
     <system.webServer>

        <caching>
             <profiles>
                 <add extension=".css" policy="DisableCache" kernelCachePolicy="DisableCache" />
                 <add extension=".js" policy="DisableCache" kernelCachePolicy="DisableCache" />
             </profiles>
         </caching>


     </system.webServer>
< /configuration> 


资料: https://www.cnblogs.com/-ljj/archive/2013/02/12/2910200.html

posted @ 2021-08-04 10:13  陈同学  阅读(1830)  评论(0编辑  收藏  举报