Javascript 服务器正在缓存JS文件或嵌入的HTML脚本?

Javascript 服务器正在缓存JS文件或嵌入的HTML脚本?,javascript,php,html,.htaccess,caching,Javascript,Php,Html,.htaccess,Caching,我的一个站点的服务器出现异常,我需要您的帮助来找到解决方案 如果我打开一个由FtpZilla下载的PHP文件并编辑任何PHP代码,一旦保存并重新上传该文件,新内容将处于活动状态。 对于任何HTML代码都是一样的 如果在同一个文件上,我编辑了一些HTML代码,其中有一个标记,里面有javascript代码,当我上传文件的新版本时,提供给浏览器的JS代码是旧的。 我尝试使用CTRL+F5,几种浏览器:没有出路。 同样令人失望的结果是,从“时间之初”开始清理每个浏览器的缓存 重新打开刚刚上传的新文件,

我的一个站点的服务器出现异常,我需要您的帮助来找到解决方案

如果我打开一个由FtpZilla下载的PHP文件并编辑任何PHP代码,一旦保存并重新上传该文件,新内容将处于活动状态。 对于任何HTML代码都是一样的

如果在同一个文件上,我编辑了一些HTML代码,其中有一个
标记,里面有javascript代码,当我上传文件的新版本时,提供给浏览器的JS代码是旧的。 我尝试使用CTRL+F5,几种浏览器:没有出路。 同样令人失望的结果是,从“时间之初”开始清理每个浏览器的缓存

重新打开刚刚上传的新文件,我惊讶地发现我的新代码。 这就像服务器在为旧文件服务一样。 但为什么只有JS部分

不仅如此: 对于任何JS外部文件,我都遇到了相同的问题。我的意思是,这些文件与标签
一起嵌入到HTML页面中

我尝试将任何缓存命令停用到.htaccess中,如下所示。但在这种情况下,也没有更好的事情发生

请问我还能做些什么

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
# Enable expirations.
  ExpiresActive On

      # Cache all files for 2 weeks after access (A).
      #ExpiresDefault A1209600

      <FilesMatch \.php$>
        # Do not allow PHP scripts to be cached unless they explicitly send cache
        # headers themselves. Otherwise all scripts would have to overwrite the
        # headers set by mod_expires if they want another caching behavior. This may
        # fail if an error occurs early in the bootstrap process, and it may cause
        # problems if a non-Drupal PHP file is installed in a subdirectory.
        ExpiresActive Off
      </FilesMatch>

        #ExpiresByType image/jpg "access 1 year"
        #ExpiresByType image/jpeg "access 1 year"
        #ExpiresByType image/gif "access 1 year"
        #ExpiresByType image/png "access 1 year"
        #ExpiresByType text/css "access 1 month"
        #ExpiresByType application/pdf "access 1 month"
        #ExpiresByType text/x-javascript "access 1 month"
        #ExpiresByType application/x-shockwave-flash "access 1 month"
        #ExpiresByType image/x-icon "access 1 year"
        #ExpiresDefault "access 2 days"
    </IfModule>
#需要启用mod_expires。
#启用过期。
过期于
#访问后将所有文件缓存2周(A)。
#到期默认A1209600
#不允许缓存PHP脚本,除非它们显式地发送缓存
#标题本身。否则,所有脚本都必须覆盖
#如果mod_设置的头需要另一个缓存行为,则它们将过期。今年五月
#如果在引导过程的早期出现错误,则失败,并可能导致
#如果在子目录中安装了非Drupal PHP文件,则会出现问题。
过期活动关闭
#过期按类型映像/jpg“访问1年”
#过期按类型图像/jpeg“访问1年”
#ExpiresByType image/gif“访问1年”
#过期按类型图像/png“访问1年”
#ExpiresByType文本/css“访问1个月”
#过期按类型应用程序/pdf“访问1个月”
#ExpiresByType文本/x-javascript“访问1个月”
#过期按类型应用程序/x-shockwave-flash“访问1个月”
#过期按类型图像/x图标“访问1年”
#ExpiresDefault“访问2天”
编辑: 我只是注意到: 如果我创建了一个指向原始JS文件的符号链接,当我通过符号链接读取文件时(因此在浏览器中我称为符号链接而不是文件):我仍然得到旧版本。甚至通过FileZilla打开(编辑)。 就像指针永远指向旧版本一样。 如果我直接读取JS文件(直接调用它,甚至不是通过嵌入链接),我可以得到新版本
我越来越迷路了。

ExpiresActive Off
实际上会让浏览器缓存内容,因为服务器没有设置缓存规则。如果要禁用缓存,可以使用以下方法:

<FilesMatch "\.(html)$">
    Header set Cache-Control "private, no-cache, must-revalidate"
    Header set Pragma "no-cache"
</FilesMatch>

标头设置缓存控制“专用,无缓存,必须重新验证”
标题集Pragma“无缓存”

这将告诉您的浏览器在每次请求时检查新内容。如果内容不是动态创建的(例如,由php创建),并且自上次收到文件后文件未被修改,apache将发送一个304 not modified标头,其中不包含任何数据(因为您的浏览器allready具有最新版本)

在您建议我打开该标志后,但情况没有改变。重要提示:我编辑了我的帖子:我现在注意到了一些新的东西,我一点也不理解。设置标志不会对规则做出任何更改。您必须手动设置它们,或者让您的PHP脚本根据内容更改和过期日期发送适当的标题。这些是我在PHP中发送的标题:`//headers header('Cache-Control:无缓存,无存储,必须重新验证');//HTTP 1.1。标头('Pragma:no cache');//HTTP 1.0。标题('Expires:0');//根据这个逻辑(如果没有注释的话),PHP应该告诉Apache设置这些响应头,这些应该告诉浏览器不要缓存任何内容。打开浏览器的开发者控制台,检查这些标题是否真的被发送了,以及在请求此资源时得到了什么样的HTTP响应(在“回车”时,而不是在刷新时)。我发现我得到的异常非常奇怪,pHP文件确实每次都被更新,而JS内容没有。。。以及所有JS文件。