标签: cache-control

如何使Microsoft XmlHttpRequest荣誉缓存控制指令

我正在使用MSXML的XmlHttpRequest对象发出请求:

IXMLHttpRequest http = new XmlHttpRequest();
http.open("GET", "http://www.bankofcanada.ca/stat/fx-xml.xml", False, "", "");
http.send();
Run Code Online (Sandbox Code Playgroud)

并且send成功了,我得到了我的xml数据.

除了XmlHttpRequest实际上没有打网络(我可以看到没有发出实际的http请求).并且Process Monitor显示文件实际上是从我的缓存中提供的:

在此输入图像描述

所以我想指示XmlHttpRequest用户代理任何超过0秒的缓存内容都太旧了.执行此操作的标准方法是添加请求标头:

Cache-Control: max-age=0
Run Code Online (Sandbox Code Playgroud)

发送请求:

http = new XmlHttpRequest();
http.open("GET", "http://www.bankofcanada.ca/stat/fx-xml.xml", False, "", "");
http.setRequestHeader("Cache-Control", "max-age=0");
http.send();
Run Code Online (Sandbox Code Playgroud)

并且send成功了,我得到了我的xml数据.

除了XmlHttpRequest实际上没有打网络(我可以看到没有发出实际的http请求).Process Monitor显示文件实际上是从我的缓存中提供的.

那有什么不对?是max-age不是在做什么我想它呢?

来自RFC 2616 - 超文本传输​​协议,第14部分:标题字段定义:

其他指令允许用户代理修改基本过期机制.可以在请求中指定这些指令:

max-age
表示客户端愿意接受年龄不大于指定时间(秒)的响应.除非还包括最大指令,否则客户不愿意接受陈旧的响应.

这正是我想要的.

Cache-Control: max-age=0不是我想要的,或者是MSXML的XmlHttpRequest对象错误?

更新一

这是MSXML XmlHttpRequestCOM对象:

  • CLSID:{88d96a0a-f192-11d4-a65f-0040963251e5}
  • ProgID:Msxml2.XMLHTTP.6.0

更新二

max-age指令由客户端添加,以供所有要遵守的缓存使用.来自RFC:

Cache-Control通用头字段用于指定请求/响应链中的所有缓存机制必须遵守的指令 …

msxml xmlhttprequest cache-control

30
推荐指数
2
解决办法
3万
查看次数

我可以强制.htaccess刷新吗?

我们正在将网站从一个CMS迁移到另一个CMS..htaccess文件已更改,需要刷新才能使新站点正常工作.根据我的理解,如果浏览器缓存被清除,.htaccess文件将只刷新?创建网站的人可以清除我们的缓存,但有没有办法让用户的浏览器获得新的.htaccess文件,而无需用户自己手动清除缓存?

.htaccess caching cache-control browser-cache

30
推荐指数
3
解决办法
6万
查看次数

在JSP中添加Expires或Cache-Control标头

如何在JSP中添加ExpiresCache-Control标头?我想在包含页面中为我的静态组件添加远期到期日期,例如图像,CSS和JavaScript文件.

java jsp http cache-control

29
推荐指数
2
解决办法
8万
查看次数

缓存控制:无存储,必须重新验证未发送到IIS7 + ASP.NET MVC中的客户端浏览器

我试图确保某个页面永远不会被缓存,并且在用户单击后退按钮时从不显示. 这个非常高评价的答案(目前1068支票)说使用:

Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "0");
Run Code Online (Sandbox Code Playgroud)

但是在IIS7/ASP.NET MVC中,当我发送这些头时,客户端会看到这些响应头:

Cache-control: private, s-maxage=0 // that's not what I set them to
Pragma: no-cache
Expires: 0
Run Code Online (Sandbox Code Playgroud)

缓存控制头怎么了?IIS7或ASP.NET本机的内容是否会覆盖它?我检查了我的解决方案,我没有覆盖此标头的代码.

当我Response.Headers.Remove("Cache-Control");首先添加时,它没有任何区别:

Response.Headers.Remove("Cache-Control");
Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "0");
Run Code Online (Sandbox Code Playgroud)

当我添加一个[OutputCache]属性时:

[OutputCache(Location = OutputCacheLocation.None)]
public ActionResult DoSomething()
{
   Response.Headers.Remove("Cache-Control");
   Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
   Response.AppendHeader("Pragma", "no-cache");
   Response.AppendHeader("Expires", "0");

   var model = DoSomething();
   return View(model);
}
Run Code Online (Sandbox Code Playgroud)

然后客户端响应标头更改为:

Cache-control: no-cache
Pragma: no-cache
Expires: 0
Run Code Online (Sandbox Code Playgroud)

哪个更接近,但仍然不是我要发送的标题.这些标题在哪里被覆盖,我该如何阻止它?

编辑:我已经检查过,错误的标题被发送到Chrome,FF,IE和Safari,所以它看起来是一个服务器问题,而不是浏览器相关的问题.

c# asp.net-mvc iis-7 cache-control http-headers

28
推荐指数
1
解决办法
3万
查看次数

缓存控制头重复; 有效与否?(Nginx的)

我在我的Nginx中有一个配置如下的资源:

location ~ foo\.js$ {
    add_header Cache-Control public;
    expires 1d;
}
Run Code Online (Sandbox Code Playgroud)

如果我用Firebug打开它并查看标题,它会显示:

Cache-Control   max-age=86400, public
Run Code Online (Sandbox Code Playgroud)

该网站正在使用HTTPS,所以我想确保我做对了,因为显然浏览器不会缓存它,除非它的max-age> 0 AND public.看到这个

但是当我使用Nginx时会发生什么curl -Ik https://...,它说:

...
Expires: Sat, 22 Jan 2011 18:23:36 GMT
Cache-Control: max-age=86400
Cache-Control: public
...
Run Code Online (Sandbox Code Playgroud)

它重复Cache-Control标题!萤火虫显然不介意.但这是对的吗?

是否有一种更好的方法来设置ExpiresCache-Control(public仅)两行?

nginx cache-control

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

为什么 Chrome 开发工具显示 200 状态代码而不是 304

当我使用 Chrome 测试缓存处理中的奇怪行为时(我在这里询问了一些相关问题),我发现了一些其他内容:当服务器返回 304 响应时,Chrome 开发工具会显示 200 状态代码。

在这里您可以看到 chrome 开发工具所说的内容 (200),我包含了一个显示服务器 304 响应的wireshark 捕获。

在此输入图像描述

下面是 Firefox 的相同用法,其中显示了 304 代码:

在此输入图像描述

更有趣的是两个浏览器之间的时间差异:

在此输入图像描述

Firefox 没有显示接收部分的延迟,但 Chrome 表示花了 3.91 毫秒。

您知道 Chrome 为何不显示正确的状态代码吗?

如果你想自己测试一下,这里是服务器代码:

#!/usr/bin/env node

'use strict';

const express = require('express');
const cors = require('cors');
const compression = require('compression');
const pathUtils = require('path');
const fs = require('fs');

const http = require('http');
let app = express();
app.disable('x-powered-by');
app.use(express.json({ limit: '50mb' }));
app.use(cors());
app.use(compression({}));
app.use(function (req, res, next) {
    res.set('Cache-control', 'no-cache');
    console.log(req.headers); …
Run Code Online (Sandbox Code Playgroud)

google-chrome http cache-control google-chrome-devtools

25
推荐指数
1
解决办法
3963
查看次数

防止Safari 5中的后退按钮上的缓存

截至最近的safari 5已经发布,结果导致我的网站出现了一些问题.我有一个运行经典ASP的动态网站(虽然这应该不重要),并且该网站对历史堆栈有一些创造性的使用.例如,您可以在列出产品的页面上,然后转到有关产品的详细信息并更改产品(admin-view).单击产品上的"保存"时,信息将通过AJAX发送到服务器,并history.back()发出a.这适用于所有浏览器(包括safari <= 4),但是,在新发布的Safari 5中它停止工作.似乎当您在safari 5中单击它实际上并不刷新页面时,它只会从缓存中加载它,这意味着不会显示在详细信息视图中所做的更改.我怎样才能在safari 5中进行这项工作呢?这是我必须关闭缓存的当前代码(包含在每个页面的顶部):

Dim pStr
pStr = "private, no-cache, no-store, must-revalidate"
Response.AddHeader "pragma","no-cache"      '?
Response.AddHeader "cache-control", pStr    '?  Er ikke sikker på om disse 3 siste er nødvendige.
Response.AddHeader "cache-control", "post-check=0, pre-check=0"     '?  Er ikke sikker på om disse 3 siste er nødvendige.
Response.AddHeader "Expires", "Mon, 26 Jul 1997 05:00:00 GMT"       '?
Response.AddHeader "Last-Modified", Now()
Run Code Online (Sandbox Code Playgroud)

safari cache-control

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

如何在Spring Boot中将Cache-Control标头添加到静态资源?

如何Cache-Control在Spring Boot中为静态资源添加HTTP头?

尝试在应用程序中使用过滤器组件,它正确地写入标头,但Cache-Control标头被覆盖.

@Component
public class CacheBustingFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) 
                                              throws IOException, ServletException {

        HttpServletResponse httpResp = (HttpServletResponse) resp;
        httpResp.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
        httpResp.setHeader("This-Header-Is-Set", "no-cache, no-store, must-revalidate");
        httpResp.setHeader("Expires", "0");

        chain.doFilter(req, resp);
    }
Run Code Online (Sandbox Code Playgroud)

我在浏览器中得到的是:

Cache-Control:no-store
This-Header-Is-Set:no-cache, no-store, must-revalidate
Expires:0
Run Code Online (Sandbox Code Playgroud)

我想要的是:

Cache-Control:no-cache, no-store, must-revalidate
This-Header-Is-Set:no-cache, no-store, must-revalidate
Expires:0
Run Code Online (Sandbox Code Playgroud)

java cache-control spring-boot

23
推荐指数
4
解决办法
3万
查看次数

缓存控制机制中max-age和max-stale之间的区别是什么

我知道这是一个简单的问题,我相信没有任何机构会将此标记为重复的问题,因为我已经搜索了所有的SO.所以我的问题是Http的Cache控制机制中max-age和max-stale之间的区别是什么,我在这里读过它,但我感觉它有点复杂,所以如果有人能解释一下这个吗?这将是很大的帮助

http cache-control

22
推荐指数
1
解决办法
7837
查看次数

Firebase托管:如何防止缓存SPA的index.html

我在firebase上托管SPA,几乎所有路径都被重写index.html.我正在使用基于webpack hash的缓存清除,所以我想总是阻止缓存我的index.html而不是任何其他文件.我发现这样做非常困难.具体来说,我的文件布局如下所示

/
??? index.html
??? login.html
??? js
?   ??? login.ba22ef2579d744b26c65.bundle.js
?   ??? main.6d0ef60e45ae7a11063c.bundle.js
??? public
    ??? favicon-16x16.ico
Run Code Online (Sandbox Code Playgroud)

"sources": "index.html"在从文档中读到这个引用之前,我开始天真.

无论使用glob表示法的任何重写规则如何,每个定义都必须具有与原始请求路径匹配的源键.

好的,所以不是一个简单的glob指定我想要这些头文件的文件,我想我需要一个路径.由于大多数路径重定向到index.html,我需要一个glob,它排除了我不想放置这些头的所有路径.

作为参考,我的firebase.json托管部分如下所示:

{
  "hosting": {
    "public": "dist",
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ],
    "cleanUrls": true,
    "trailingSlash": false,
    "headers": [
      {
        "source": <<<WHAT-GOES-HERE?>>>,
        "headers": [
          {
            "key": "Cache-Control",
            "value": "no-cache, no-store, must-revalidate"
          },
          {
            "key": "Pragma",
            "value": "no-cache"
          },
          {
            "key": "Expires",
            "value": "0"
          }
        ]
      } …
Run Code Online (Sandbox Code Playgroud)

cache-control firebase single-page-application firebase-hosting

21
推荐指数
2
解决办法
5742
查看次数