All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.dropwizard.jersey.caching.CacheControl Maven / Gradle / Ivy

package io.dropwizard.jersey.caching;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * An annotation which adds a constant {@code Cache-Control} header to the response produced by
 * the annotated method.
 */
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CacheControl {
    /**
     * If set, adds a {@code Cache-Control} header to the response which indicates the response is
     * immutable and should be kept in cache for as long as possible. (Technically, this corresponds
     * to a {@code max-age} of one year.
     *
     * @see #maxAge()
     * @return {@code true} if the response should be considered immutable and cached indefinitely
     */
    boolean immutable() default false;

    /**
     * Controls the {@code private} setting of the {@code Cache-Control} header.
     *
     * 

From the HTTPbis spec:

*
* The private response directive indicates that the response message is intended for a * single user and MUST NOT be stored by a shared cache. A private cache MAY store the * response. * * If the private response directive specifies one or more field-names, this requirement is * limited to the field-values associated with the listed response header fields. That is, * a shared cache MUST NOT store the specified field-names(s), whereas it MAY store the * remainder of the response message. * * Note: This usage of the word "private" only controls where the response can be stored; it * cannot ensure the privacy of the message content. Also, private response directives with * field-names are often handled by implementations as if an unqualified private directive * was received; i.e., the special handling for the qualified form is not widely * implemented. *
* * @return {@code true} if the response must not be stored by a shared cache */ boolean isPrivate() default false; /** * Controls the {@code no-cache} setting of the {@code Cache-Control} header. * *

From the HTTPbis spec:

*
* The no-cache response directive indicates that the response MUST NOT be used to satisfy a * subsequent request without successful validation on the origin server. This allows an * origin server to prevent a cache from using it to satisfy a request without contacting * it, even by caches that have been configured to return stale responses. * * If the no-cache response directive specifies one or more field-names, then a cache MAY * use the response to satisfy a subsequent request, subject to any other restrictions on * caching. However, any header fields in the response that have the field-name(s) listed * MUST NOT be sent in the response to a subsequent request without successful revalidation * with the origin server. This allows an origin server to prevent the re-use of certain * header fields in a response, while still allowing caching of the rest of the response. * * Note: Most HTTP/1.0 caches will not recognize or obey this directive. Also, no-cache * response directives with field-names are often handled by implementations as if an * unqualified no-cache directive was received; i.e., the special handling for the qualified * form is not widely implemented. *
* * @return {@code true} if the response must not be cached */ boolean noCache() default false; /** * Controls the {@code no-store} setting of the {@code Cache-Control} header. * *

From the HTTPbis spec:

*
* The no-store response directive indicates that a cache MUST NOT store any part of either * the immediate request or response. This directive applies to both private and shared * caches. "MUST NOT store" in this context means that the cache MUST NOT intentionally * store the information in non-volatile storage, and MUST make a best-effort attempt to * remove the information from volatile storage as promptly as possible after forwarding it. * * This directive is NOT a reliable or sufficient mechanism for ensuring privacy. In * particular, malicious or compromised caches might not recognize or obey this directive, * and communications networks might be vulnerable to eavesdropping. *
* * @return {@code true} if the response must not be stored */ boolean noStore() default false; /** * Controls the {@code no-transform} setting of the {@code Cache-Control} header. * *

From the HTTPbis spec:

*
* The no-transform response directive indicates that an intermediary (regardless of whether * it implements a cache) MUST NOT change the Content-Encoding, Content-Range or * Content-Type response header fields, nor the response representation. *
* * @return {@code true} if the response must not be transformed by intermediaries */ boolean noTransform() default true; /** * Controls the {@code must-revalidate} setting of the {@code Cache-Control} header. * *

From the HTTPbis spec:

*
* The must-revalidate response directive indicates that once it has become stale, a cache * MUST NOT use the response to satisfy subsequent requests without successful validation on * the origin server. * * The must-revalidate directive is necessary to support reliable operation for certain * protocol features. In all circumstances a cache MUST obey the must-revalidate directive; * in particular, if a cache cannot reach the origin server for any reason, it MUST generate * a 504 (Gateway Timeout) response. * * The must-revalidate directive ought to be used by servers if and only if failure to * validate a request on the representation could result in incorrect operation, such as a * silently unexecuted financial transaction. *
* * @return {@code true} if caches must revalidate the content when it becomes stale */ boolean mustRevalidate() default false; /** * Controls the {@code proxy-revalidate} setting of the {@code Cache-Control} header. * *

From the HTTPbis spec:

*
* The proxy-revalidate response directive has the same meaning as the must-revalidate * response directive, except that it does not apply to private caches. *
* * @return {@code true} if only proxies must revalidate the content when it becomes stale */ boolean proxyRevalidate() default false; /** * Controls the {@code max-age} setting of the {@code Cache-Control} header. The unit of this * amount is determined by {@link #maxAgeUnit()}. * *

From the HTTPbis spec:

*
* The max-age response directive indicates that the response is to be considered stale * after its age is greater than the specified number of seconds. *
* * @see #maxAgeUnit() * @return the number of {@link #maxAgeUnit()}s for which the response should be considered * fresh */ int maxAge() default -1; /** * The time unit of {@link #maxAge()}. * * @return the time unit of {@link #maxAge()} */ TimeUnit maxAgeUnit() default TimeUnit.SECONDS; /** * Controls the {@code stale-while-revalidate} setting of the {@code Cache-Control} header. The unit of this * amount is determined by {@link #staleWhileRevalidateUnit()}}. * *

From the HTTPbis spec:

*
* The stale-while-revalidate HTTP response Cache-Control extension allows servers to instruct caches to serve stale responses while validating them, * to avoid latency in some situations. *
* * @see #staleWhileRevalidateUnit() * @return the number of {@link #staleWhileRevalidateUnit()}}s for which the response should be served while revalidating * */ int staleWhileRevalidate() default -1; /** * The time unit of {@link #staleWhileRevalidate()}. * * @return the time unit of {@link #staleWhileRevalidate()} */ TimeUnit staleWhileRevalidateUnit() default TimeUnit.SECONDS; /** * Controls the {@code s-max-age} setting of the {@code Cache-Control} header. The unit of this * amount is controlled by {@link #sharedMaxAgeUnit()}. * *

From the HTTPbis spec:

*
* The s-maxage response directive indicates that, in shared caches, the maximum age * specified by this directive overrides the maximum age specified by either the max-age * directive or the Expires header field. The s-maxage directive also implies the semantics * of the proxy-revalidate response directive. *
* * @return the number of {@link #sharedMaxAgeUnit()}s for which the response should be * considered fresh */ int sharedMaxAge() default -1; /** * The time unit of {@link #sharedMaxAge()}. * * @return the time unit of {@link #sharedMaxAge()} */ TimeUnit sharedMaxAgeUnit() default TimeUnit.SECONDS; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy