Пример #1
0
  public ClientResponse updateOnNotModified(
      ClientRequest request, BrowserCache.Entry old, BaseClientResponse response) throws Exception {
    old.getHeaders().remove(HttpHeaders.CACHE_CONTROL);
    old.getHeaders().remove(HttpHeaders.EXPIRES);
    old.getHeaders().remove(HttpHeaders.LAST_MODIFIED);
    String cc = (String) response.getResponseHeaders().getFirst(HttpHeaders.CACHE_CONTROL);
    String exp = (String) response.getResponseHeaders().getFirst(HttpHeaders.EXPIRES);
    int expires = -1;

    if (cc != null) {
      CacheControl cacheControl = CacheControl.valueOf(cc);
      if (cacheControl.isNoCache()) {
        return createClientResponse(request, old);
      }
      expires = cacheControl.getMaxAge();
    } else if (exp != null) {
      Date date = DateUtil.parseDate(exp);
      expires = (int) ((date.getTime() - System.currentTimeMillis()) / 1000);
    }

    if (cc != null) {
      old.getHeaders().putSingle(HttpHeaders.CACHE_CONTROL, cc);
    }
    if (exp != null) {
      old.getHeaders().putSingle(HttpHeaders.CACHE_CONTROL, exp);
    }

    String lastModified =
        (String) response.getResponseHeaders().getFirst(HttpHeaders.LAST_MODIFIED);
    String etag = (String) response.getResponseHeaders().getFirst(HttpHeaders.ETAG);

    if (etag == null) etag = old.getHeaders().getFirst(HttpHeaders.ETAG);
    else old.getHeaders().putSingle(HttpHeaders.ETAG, etag);

    if (lastModified != null) {
      old.getHeaders().putSingle(HttpHeaders.LAST_MODIFIED, lastModified);
    }

    if (etag == null && lastModified == null && cc == null && exp == null) // don't cache
    {
      return createClientResponse(request, old);
    }

    BrowserCache.Entry entry =
        cache.put(
            request.getUri(),
            old.getMediaType(),
            old.getHeaders(),
            old.getCached(),
            expires,
            etag,
            lastModified);
    return createClientResponse(request, entry);
  }
Пример #2
0
 private BaseClientResponse createClientResponse(ClientRequest request, BrowserCache.Entry entry) {
   BaseClientResponse response = new BaseClientResponse(new CachedStreamFactory(entry));
   response.setStatus(200);
   response.setHeaders(entry.getHeaders());
   response.setProviderFactory(request.getProviderFactory());
   return response;
 }
Пример #3
0
  public ClientResponse execute(ClientExecutionContext ctx) throws Exception {
    ClientRequest request = ctx.getRequest();
    if (!request.getHttpMethod().equals("GET")) {
      return ctx.proceed();
    }

    BrowserCache.Entry entry = getEntry(request);
    if (entry == null) {
      return cache(request, ctx.proceed());
    }

    if (entry.expired()) {
      cache.remove(request.getUri(), entry.getMediaType());
      BrowserCache.Header[] headers = entry.getValidationHeaders();
      for (BrowserCache.Header header : headers) {
        request.header(header.getName(), header.getValue());
      }
      return handleExpired(ctx, request, entry);
    }

    return createClientResponse(request, entry);
  }
Пример #4
0
 public InputStream getInputStream() throws IOException {
   return new ByteArrayInputStream(entry.getCached());
 }