标签: browser-cache

谷歌Chrome缓存

我有一个嵌入flash(flex)应用程序的html页面.

我有以下标题:

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-STORE">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
Run Code Online (Sandbox Code Playgroud)

此外,每次我发布新版本的应用程序时,我都会更改文件名.因此,它变成MyApp_v1.swf,然后更新为MyApp_v2.swf.

尽管如此,chrome仍然会缓存html页面和swf文件.这是一个主要问题,因为客户端不会看到更新的swf,除非他们清除浏览器缓存.

我甚至尝试通过更改htaccess文件来解决这个问题,并重命名托管swf文件的index.html文件:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://www.mysite.com/app[R,L] 
DirectoryIndex index.html #this was changed from myapp.html
Run Code Online (Sandbox Code Playgroud)

即使在这样做之后,Chrome仍然会缓存swf,并且仍在从旧的html文件中读取.我在html上做了一个视图源,它仍然显示旧文件.

这在任何其他浏览器中都可以正常工作.

google-chrome browser-cache

9
推荐指数
1
解决办法
2万
查看次数

如何使用Play阻止浏览器缓存?

我的应用程序的一部分提供了使用该redirect()方法下载的文件.我发现Chrome(而不是Firefox或IE,很奇怪)正在缓存此文件,以便即使更改了服务器端也会下载相同的版本.据我了解,有一种方法告诉浏览器不缓存文件,例如像这样的HTML,或通过添加一些东西到HTTP标头.我可能会在较低级别的Web框架中找到这些,但我不知道如何在Play!中获取标题,并且HTML选项将无法工作,因为它不是HTML文件.

似乎总是有一种聪明而简单的方法在Play中执行常见任务!那么有一种聪明而简单的方法可以防止控制器中的缓存吗?

谢谢!

编辑:

Matt将我指向http.cacheControl设置,该设置控制整个站点的缓存.虽然这可以工作,但我对缓存的大部分网站都没有问题,特别是CSS等.如果可能的话,我想一次控制一个URL的缓存(在这种情况下指向下载文件的那个).它并不会成为一个高流量的网站,所以这只是学术兴趣.

理想情况下,我想做的事情如下:

public static void downloadFile(String url) {
  response.setCaching(false);  // This is the method I'm looking for
  redirect(url);  // Send the response
}
Run Code Online (Sandbox Code Playgroud)

java browser-cache http-headers playframework

9
推荐指数
2
解决办法
6860
查看次数

使用RequireJS缓存破坏特定模块

这个问题已被多次询问,但并不是这个例子的具体问题.

以下是我们的应用程序概述:

  • 使用Express on Node进行简单的服务器路由
  • 单页骨干应用程序
  • 核心模块和库(JS/CSS)不会改变
  • 经常更改的Widget JS/LESS/HTML文件

在开发过程中,我希望缓存更改胸部文件而不是那些核心库,以加快我的页面重新加载并加快我的开发.

我找到了解释:

  1. 禁用RequireJS上的缓存 - 在这里
  2. Cache-Busting Specific Modules的解释 - 这里

可以解决方案:

  1. 解释requireJS缓存破坏是如何工作的?
  2. 为此特定方案提供解决方案.

javascript caching browser-cache node.js requirejs

9
推荐指数
1
解决办法
4378
查看次数

如何删除ios模拟器safari缓存

我正在尝试在iphone模拟器上测试一个网站,我做了一些javascript更改,我的javascript文件正在从缓存中加载.

我看到旧的版本文件与safari web检查器,资源选项卡(在模拟器窗口上),网络调用也有状态304.我已经在macos Safari上禁用了缓存.我已经尝试在模拟器设置上删除safari缓存.模拟器外部的Safari正在正确加载新文件(我清空/禁用了缓存).

我在Sierra的XCode上使用Simulator(10.0 SimulatorAPP-745.10和iOS 10.3)

如何删除或禁用模拟器缓存?

safari xcode browser-cache ios ios-simulator

9
推荐指数
1
解决办法
3206
查看次数

我在ASP.NET MVC上使用Scripts.Render() - 在更新用户仍然获得旧(捆绑)脚本文件后6小时,原因是什么?

我在TypeScript文件中更新了一些脚本,但用户似乎仍然可以获得捆绑脚本的旧版本.我怎么知道?因为我在日志中看到(远程)JavaScript错误,这些错误引用了新的最新版本中100%存在的类.它已经超过6个小时了,我可以验证它?={hash}已经改变了.

我感觉嫌疑人,无论是单向还是组合中的任何一种:

  • 静态内容(IIS)
  • Scripts.Render( "")
  • TypeScript编译
  • 天蓝

我感觉它存在于某种缓存中,或者它与静态内容服务有关.或者使用Script.Render().

原因是什么?它让我发疯,因为我知道该网站已被某些用户破坏,但我无法解决问题.

我在下面列出了标题.

头

这是捆绑包的代码.请注意,Core.js是由TypeScript生成的.

{
    var bundle = new Bundle("~/scripts/main-bundle");
    bundle.IncludeDirectory("~/scripts/fork", "*.js", searchSubdirectories : true );
    bundle.IncludeDirectory("~/scripts/app", "*.js", searchSubdirectories : true );
    bundle.Include("~/scripts/bundles/core.js");
    bundles.Add( bundle );
}
Run Code Online (Sandbox Code Playgroud)

更新

如果他们得到旧的HTML,因为它可能被缓存,所以hashbomb不会改变 - 他们是否应该仍然拥有一对JS和HTML?

asp.net cache-control azure browser-cache typescript

9
推荐指数
1
解决办法
349
查看次数

使用URL参数和XSendFile在浏览器中缓存图像

我试图建立一个站点,以便用户只能访问自己的图像和音频文件。为此,我在URL中使用了变量,例如:

 <img src="/public/get_file.php?type=image&file=pic001.png" />
Run Code Online (Sandbox Code Playgroud)

在前端,我正在使用React JS(不确定这对这个问题是否重要)。但是在后端,PHP脚本将验证用户已登录(仅通过检查一个简单的SESSION变量),并在用户的数据目录中查找该文件(基于其SESSION变量中的用户ID)。如果存在,它将使用XSendFile将其返回给用户。

我遇到的问题是,每次用户尝试访问文件时,在加载文件之前都会有一些延迟。这告诉我它们可能没有被浏览器缓存。

为什么文件没有被缓存?它与URL参数有关还是与PHP / XSendFile的使用有关?

如何允许我的文件(图像/音频)被缓存?

更新资料

根据要求,这里是我的get_file.php:

<?php

        session_start();

        if (empty($_SESSION['auth']['id'])){
                exit;
        }

        require_once("../../api_modules/settings.php");

        $developer_id = $_SESSION['auth']['id'];

        $type = preg_replace('/[^-a-zA-Z0-9_]/', '', $_GET['type']);
        $file = preg_replace('/[^-a-zA-Z0-9_\.]/', '', $_GET['file']);

        $file = preg_replace('/[\.]{2,}/', '', $file);

        $project_id = preg_replace('/[^0-9]/', '', $_GET['project_id']);
        $developer_id = preg_replace('/[^0-9]/', '', $developer_id);

        if ($type == "image")
                $file = FILEPATH ."files/$developer_id/$project_id/images/thumbs/88x88/$file";
        else if ($type == "full_image")
                $file = FILEPATH ."files/$developer_id/$project_id/images/originals/$file";
        else if ($type == "audio"){
                $file = FILEPATH ."files/$developer_id/$project_id/audio/$file";
        }
        else {
                exit;
        }


        header("X-Sendfile: …
Run Code Online (Sandbox Code Playgroud)

php apache x-sendfile browser-cache reactjs

9
推荐指数
1
解决办法
185
查看次数

优化完全相同的iframe的负载

我需要显示几个完全相同的iframe。该iframe具有从#URI 读取的javascript,然后执行不同的请求,但是iframe的源代码和获取的资源完全相同。

1个iframe(包括javascript,样式表和图片)约为10 mb。现在,假设我需要在同一页面上最多显示10个iframe。那是最大100 mb的页面!

问题在于,iframe本身或它们正在加载的内容均未直接缓存。(至少不是在Google Chrome上,这是我的主要目标)。

这是我的代码的示例:

<iframe src="myiframe#1">
<iframe src="myiframe#2">
<iframe src="myiframe#3">
...
Run Code Online (Sandbox Code Playgroud)

每个iframe都加载相同的巨大javascript文件,并且针对我所拥有的iframe数量都触发了相同的请求:

在此处输入图片说明

我们可以清楚地看到,当第一个js文件下载完毕时,另一个(甚至还没有启动的连接!)没有使用缓存,而是重新下载了。每个文件都一样。

我尝试了什么?

  • 发送缓存头。目前正在回覆,cache-control: public, max-age=31536000但我甚至尝试过更严格的限制,例如Cache-Control: immutable

  • 首先仅加载一个iframe,然后在加载时加载所有其他iframe。即使第一个iframe已完全加载,它仍不使用缓存,并且应该将资源保存在缓存中!

  • 克隆iframe,但是,如RFC所述,它会完全重新加载iframe,从而再次触发请求。

但是,在我页面的第二次加载中,浏览器确实在缓存中获取资源,但这对我来说还不够。

我能想到的绝望(也是唯一的?)解决方案:

加载所有资源和iframe源代码,然后动态创建一个iframe元素并将所有内容注入其中。这是可能的,但是非常困难。另外,可能不是很友好的性能。

注意:iframe不在我的域中,但是我正在做一些反向代理操作,因此我可以控制iframe。这意味着我可以修改iframe的源代码,但是由于所有内容都被缩小了,所以这并非易事。

html javascript iframe google-chrome browser-cache

9
推荐指数
1
解决办法
155
查看次数

强制AJAX请求使用服务器重新验证缓存,而无需完全重新加载

我有一个Web应用程序,可以让浏览器长时间缓存AJAX请求.我已经找到了如何在检测到可能的修改时提出完全绕过缓存的请求.但我想让用户触发数据刷新.

在这种情况下,我希望浏览器检查服务器是否停止缓存,如果不缓存则使用它(即,如果服务器响应304代码).目标是节省加载时间,因为数据量巨大.

服务器在所有响应中包含以下标头:

Cache-Control: private, max-age=604800
Last-Modified: ... # actual last modification date
Run Code Online (Sandbox Code Playgroud)

我设法通过在请求中使用以下HTTP标头完全在Chrome中破解了缓存对象(尚未测试其他浏览器):

Cache-Control: max-age=0
If-Last-Modified: Tue, 01 Jan 1970 01:00:00 +0100
Run Code Online (Sandbox Code Playgroud)

If-Last-Modified条线是真正具有效果的线.Chrome似乎忽略Cache-Control了请求中的标头.

我还发现Cache-Control: must-revalidate在服务器响应中使用强制浏览器为每个请求验证其缓存与服务器.

但有没有办法重新验证只有一个精确的请求,在客户端决定

请注意,我并没有特别依赖于使用HTTP标头执行此操作,因此欢迎任何其他我不了解的方法!

javascript ajax http cache-control browser-cache

8
推荐指数
1
解决办法
1202
查看次数

如何在 google chrome DevTools 中禁用某些文件的缓存

每当我运行项目时,从远程服务器请求许多文件(CSS、图像和 js)并且项目加载缓慢。

为了处理这个问题,我在 Chrome DevTools 的网络选项卡(用于缓存所有文件)中取消选中禁用所有文件的缓存,如下所示:

禁用 chrome 中某些文件的缓存

但是当我需要一些文件(例如 test.js,...)时,问题就开始了,因为它们变化很快,所以没有缓存。

如何在 google chrome DevTools 中禁用某些文件(JS、CSS、...)的缓存?

javascript browser google-chrome developer-tools browser-cache

8
推荐指数
1
解决办法
1573
查看次数

设置 Clear-Site-Data 标头时的预期行为?

根据文档

Clear-Site-Data 标头清除与请求网站关联的浏览数据(cookie、存储、缓存)

现在尝试一下,您可以在屏幕截图(Firefox v76)中看到,在Clear-Site-Data浏览器中的“响应”部分中进行了设置,但是您仍然可以看到资产“已缓存”:

注意:即使在一段时间后来回导航后,缓存的资源似乎也没有被清除。

在此输入图像描述

我的印象是这会立即发生,但我无法让它发挥作用。这应该立即发生还是在一段时间后发生,或者我只是错过了其他一些事情?


为关心的人更新:

Clear-Site-Data似乎只适用于localhosthttps

http cache-control browser-cache http-headers clear-site-data

8
推荐指数
1
解决办法
9408
查看次数