标签: http-caching

缓存控制:'private'使'no-cache ="set-cookie"'不必要?

我读取Cache-Control标头的'private'指令的定义是它将阻止响应的任何部分被中间代理缓存.基于此,听起来好像我正在使用'private'指令,那么就不需要使用'no-cache ="set-cookie"'指令来告诉中间代理禁止Set-Cookie的缓存头.

但是,在本文件的 4.2.3节,它说:

原始服务器应发送以下附加的HTTP/1.1响应头,具体取决于具体情况:

  • 要禁止Set-Cookie标头的缓存:Cache-control:no-cache ="set-cookie".

    以及以下之一:

  • 禁止在共享缓存中缓存私有文档:缓存控制:私有.

    [...]

我在网上看到了大量有两个指令的例子.

那么我真的需要这两个来阻止中间代理缓存Set-Cookie头吗?我一直在做一些测试,似乎Internet Explorer通过每次发出一个完整的请求来响应'no-cache ="set-cookie"'指令,所以如果它不是,我宁愿不包括它必要.

http http-caching

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

缓存如何在JAX-RS中运行?

假设我使用@GET方法调用以下Web服务:

@GET
@Path(value = "/user/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response getUserCache(@PathParam("id") String id, @Context HttpHeaders headers) throws Exception {
    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("id", id);
    SqlSession session = ConnectionFactory.getSqlSessionFactory().openSession();
    Cre8Mapper mapper = session.getMapper(Cre8Mapper.class);

    // slow it down 5 seconds
    Thread.sleep(5000);

    // get data from database
    User user = mapper.getUser(map);

    if (user == null) {
        return Response.ok().status(Status.NOT_FOUND).build();
    } else {
        CacheControl cc = new CacheControl();
        // save data for 60 seconds
        cc.setMaxAge(60);
        cc.setPrivate(true);
        return Response.ok(gson.toJson(user)).cacheControl(cc).status(Status.OK).build();
    }
}   
Run Code Online (Sandbox Code Playgroud)

为了实验,我在从数据库中获取数据之前5秒放慢当前线程的速度. …

java web-services http jax-rs http-caching

11
推荐指数
2
解决办法
7782
查看次数

三个.htaccess到期规则之间的差异

以下三个.htaccess规则之间的区别是什么以及何时使用每个规则,是否有任何特殊用例更喜欢其中一个?:

Header set Cache-Control "max-age=290304000"
Header set Expires "Thu, 15 Apr 2020 20:00:00 GMT"
ExpiresDefault "access plus 10 years"
Run Code Online (Sandbox Code Playgroud)

apache .htaccess http-caching http-headers

10
推荐指数
1
解决办法
4983
查看次数

"清空缓存和硬重新加载"是否清空整个缓存或仅清空与当前站点相关的部分?

Chromium/Chrome中的"清空缓存和硬重新加载"会清空整个缓存还是只清除与当前网站相关的部分?

我的意思是,它会清空所有缓存的资源(如本答复的评论所示).

但是,明确的答案会有所帮助.

reload http-caching chromium

10
推荐指数
1
解决办法
433
查看次数

具有授权的HTTP缓存

根据AuthorizationOAuth规范包含标头的Web服务器的响应,HTTP缓存是否有用?

Request1 Authorization : AUTHTOKEN
Request2 Authorization : ANOTHERAUTOTOKEN
Run Code Online (Sandbox Code Playgroud)

在这种情况下,给定HTTP缓存,第二个请求将返回第一个用户的缓存响应.对于跨用户通用的内容而言,这不是问题,但是对于共享缓存为其他用户提供响应而言,这是错误的.

同样,如果我们使用Vary标头并改变Authorization,这意味着我们的缓存将为每个标记存储一个缓存副本,这肯定会破坏HTTP缓存的目的.浏览器本地缓存(私有)可以正常工作,但这仍然意味着每个会话至少一次来自每个用户的原始请求.

编辑

有问题的服务需要对所有请求进行授权,但是根据我所阅读的内容,除非存在must-revalidate,public和s-maxage,否则不应该从包含授权标头的共享缓存中提供响应.

因此,我的问题是,鉴于API既具有通用性(所有用户的响应相同),又具有用户特定的响应,甚至可以进行缓存?拥有s-maxage和公共标头但是授权标头意味着如果我正确地遵循RFC,缓存将解决UserA对UserB,UserC等的响应.

caching http http-caching

10
推荐指数
1
解决办法
4767
查看次数

清漆+静态HTML页面

我最近遇到了一个名为Varnish的http网络加速器.根据我的阅读,Varnish通过使用反向代理配置优化与HTTP服务器的HTTP通信的每个进程来加速网站的交付.

我的问题是,如果你有一个具有它的缓存机制配置一路下跌到静态html文件的网站,那么多少的效果光油对吗?反向代理是否会削减HTTP服务器处理请求所执行的工作?如果您在服务器端广泛缓存了所有内容(HTTP标头,Etags,过期标头,数据库缓存,片段和页面缓存),那么HTTP加速器还会做些什么来改进这一点?

caching http varnish http-caching

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

通过https SSL进行Etags和最后修改?

是否可以通过安全的HTTPS连接将HTTP缓存用于条件GET请求?我已经通过非安全HTTP进行缓存,但是当我切换到HTTPS时,浏览器会停止发送if-none-match和if-modified-since标头,因此缓存会中断.我尝试了各种Cache-Control设置,如public,max-age = 3600和whatnot,no dice.

这种情况在Safari和Chrome中都会发生,因此我假设SSL以某种方式打破了它.是否不允许通过SSL进行缓存?

而且要明确的是,服务器确实正确设置了etag和最后修改的标头,但根据Chrome开发人员的工具,浏览器不会在请求中发送if-none-match和if-modified-since.

谢谢你的帮助.

ssl etag caching last-modified http-caching

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

Retrofit + Okhttp是否使用httpCaching作为Android的默认设置?

我用改造okhttp在我们的应用程序之一.

我无法找到Retrofit默认行为的好解释.

如果Okhttp在类路径上,它将自动使用.但据我所知,默认的HttpResponseCache为null.

我是否需要使用Retrofit和Okhttp显式启用缓存?

android http http-caching retrofit okhttp

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

当服务器使用Retrofit返回相同的响应时,如何避免解析?

我用来避免解析遍地的服务器响应,如果它也不会改变通过计算响应的哈希值:

public class HttpClient {

    protected OkHttpClient mClient = new OkHttpClient();

    public String get(final URL url, final String[] responseHash)
        throws IOException {
        HttpURLConnection connection = new OkUrlFactory(mClient).open(url);
        InputStream inputStream = null;
        MessageDigest messageDigest = null;
        try {
            messageDigest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        assert messageDigest != null;
        try {
            // Read the response.
            inputStream = connection.getInputStream();
            byte[] response = readFully(inputStream);
            final byte[] digest = messageDigest.digest(response);
            responseHash[0] = Base64.encodeToString(digest, Base64.DEFAULT);
            return …
Run Code Online (Sandbox Code Playgroud)

response http-caching http-headers retrofit okhttp

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

如何禁用所有 WebApi 响应的缓存以避免 IE 使用(来自缓存)响应

我有一个简单的 ASP.NET Core 2.2 Web Api 控制器:

[ApiVersion("1.0")]
[Route("api/[controller]")]
[ApiController]
public class TestScenariosController : Controller
{
   [HttpGet("v2")]
    public ActionResult<List<TestScenarioItem>> GetAll()
    {
        var entities = _dbContext.TestScenarios.AsNoTracking().Select(e => new TestScenarioItem
        {
            Id = e.Id,
            Name = e.Name,
            Description = e.Description,
        }).ToList();

        return entities;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我使用@angular/common/http以下命令从 angular 应用程序查询此操作时:

this.http.get<TestScenarioItem[]>(`${this.baseUrl}/api/TestScenarios/v2`);
Run Code Online (Sandbox Code Playgroud)

在 IE11 中,我只得到缓存的结果。

如何禁用所有 web api 响应的缓存?

在此处输入图片说明

在此处输入图片说明

c# caching http-caching asp.net-core asp.net-core-webapi

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