Javascript 为什么即使缓存被禁用,服务器也会忽略代码文件中的更改?

Javascript 为什么即使缓存被禁用,服务器也会忽略代码文件中的更改?,javascript,html,server,iis-7,browser-cache,Javascript,Html,Server,Iis 7,Browser Cache,我在本地主机(Windows 7,Chrome v79.0.3945.130(64位))上测试html/js代码,大约有50%的时间代码更改没有反映在浏览器中(我使用开发工具/源代码查看)。 互联网上有很多建议,但似乎都不管用: 右键单击重新加载并选择“空缓存和硬重新加载”- 在30%的情况下没有帮助 在Chrome开发工具的网络选项卡中禁用缓存-没有帮助 在标题中添加-没有帮助 将替换为——在60%的情况下都有帮助,但每次更改都是一项艰巨的工作,您需要在每次更改后执行此操作。此外,它不适用于

我在本地主机(Windows 7,Chrome v79.0.3945.130(64位))上测试html/js代码,大约有50%的时间代码更改没有反映在浏览器中(我使用开发工具/源代码查看)。
互联网上有很多建议,但似乎都不管用:

  • 右键单击重新加载并选择“空缓存和硬重新加载”- 在30%的情况下没有帮助
  • 在Chrome开发工具的网络选项卡中禁用缓存-没有帮助
  • 在标题中添加
    -没有帮助
  • 替换为
    ——在60%的情况下都有帮助,但每次更改都是一项艰巨的工作,您需要在每次更改后执行此操作。此外,它不适用于html更改
  • 将一个文件复制到一个新文件(如index.html到index2.html)并在代码中替换文件名-总是有效的,但这是一项更大的工作
当我将代码提交到github.io时,出现了完全相同的问题

请帮助我做到这一点,使该网站反映了代码的变化立即


编辑:我已经创建了一个文件index3.html,并且只在那里放了“helloworld”。在浏览器中打开文件。更改为“hello world2”-浏览器更新了内容。更改为“hello world3”-即使在多次重新加载和“空缓存和硬加载”后,浏览器仍显示“hello world2”。我改为“hello world4”-浏览器仍然显示“hello world2”。在4个小时内,我改为“hello world5”-浏览器仍然显示“hello world2”。这个文件是我用基本记事本编辑的


编辑2:人们一直问我在用什么服务器。这似乎是问题的一部分。不幸的是,我不知道,我也不知道我到底需要做什么来检查它。以下是我到目前为止所发现的一切:

  • 我有
    inetpub/wwwroot
    目录,在那里我放置了html&js文件和 然后在
    http://localhost/
  • Devs工具中的“我的网络”面板如下所示:
  • 服务器安装速度非常快,不需要安装任何其他软件。也就是说,我没有使用node.js
  • inetpub/wwwroot
    和打开
    http://localhost/iisstart.htm
    上面写着IIS7

在使用Google Chrome的特定情况下,请尝试以下方法: 打开开发工具->转到“网络”选项卡。选中“禁用缓存”复选框,然后刷新页面

注意:为了在每次开发工具窗口都能工作,必须 始终保持营业

但是,为了将更改传播给用户,而不让用户硬刷新页面等,您必须在每个引用文件的末尾为频繁更改的文件添加文件版本(正如您所指出的)。 例如:

<link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/stackoverflow/primary.css?v=20b379f72a37" >


附加到末尾的
v=20b379f72a37
是自动生成的文件内容哈希。

使用参数是正确的方法!在这里,您可以添加一个仅在重大更改时手动更改的版本号,为了进行调试,您可以将其设置为Date.time(),因此在标记中,这将强制覆盖所有缓存的版本,因为参数始终是新的:

< script type="text/javascript"> 
    var script = document.createElement('script'); 
    var version = Date.time();
    script.src = "common.js?v="+version; 
    document.head.appendChild(script) 
< /script>


希望这有帮助

这是一个很长的目标-但是您使用的是哪种编辑器/IDE? 另外,您正在对index.html进行何种编辑

您能否提供一些在保存并尝试加载文件时未反映的此类编辑的示例


我想复制一下你的问题。根据人们的建议,问题似乎不在代码本身。我怀疑这是一个环境问题,但我需要您提供更多信息来证实我的怀疑。

您在HTML meta中编写的内容是对浏览器的建议,而不是严格的说明。如果在浏览器中启用了严格缓存,这将没有帮助

解决方案描述得很好:

我更喜欢在服务器端向脚本中添加带有文件本身上次更新日期的版本

<script src="/myScript.js?v=1579780745150"></script>


其中1579780745150是Unix时间戳,用于更新myScript.js文件本身。它只处理自己的文件,但不需要外部文件。文件名中最常见的是版本。

这可能真的令人沮丧,而且听起来你没有做错什么

问题可能是您的浏览器和您正在调用的脚本文件之间的某些内容正在进行缓存

为了确定它是什么,让我问一下您是如何浏览本地主机url的

示例:

file://path/to/file.html
http://localhost/file.html
http://127.0.0.1/file.html
http://[machine's-hostname]/file.html
http://[custom-domain-defined-in-hosts-file]/file.html
如果您正在运行
file://path/to/file.html
这意味着您没有通过web服务器/代理进行浏览。如果它是http://[something]/file.html,那么您正在运行某种web服务器,这很可能是罪魁祸首。寻找某种可以关闭缓存的设置


如果您没有使用web服务器,并且在没有web服务器的情况下直接浏览本地html文件,那么我认为浏览器是罪魁祸首。如果是这种情况,我建议按建议关闭浏览器缓存。

Chrome会这样做,如果文件没有太大变化,不确定它的意思,它将使用“编译”缓存版本。对于html,它意味着解析的don树。用于JS预编译代码等

通常有办法解决这个问题,许多框架在文件名中使用哈希,比如:
main.md5hash.js
,因为更改文件名会使任何缓存失效

然后,您可能会发现html没有更新。而且要明确的是,我不确定,你总是可以添加带有随机斑点的评论。。。就像约会一样。

我也有同样的问题
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <location path="index.html">
    <system.webServer>
      <httpProtocol>
        <customHeaders>
          <add name="Cache-Control" value="no-cache" />
        </customHeaders>
      </httpProtocol>
    </system.webServer>
  </location>

</configuration>