简体   繁体   中英

Is it possible to prevent caching based on the size of the backend response in Varnish?

We're caching for a problematic IIS server that sometimes just sends empty responses (0 bytes) instead of proper ones. Caching these responses would be a disaster, and we have no way of fixing the problem as it's not our server. Instead I'd like to instruct Varnish to not cache responses from the backend if they are empty (0 bytes).

Reading the VCL reference ( https://www.varnish-cache.org/docs/4.0/reference/vcl.html ) I can't see any obvious way of solving this.

Can it be done?

If you wanted to use it as a integer to see if greater then or less then value, use std.

import std; 

if (std.integer(beresp.http.content-length, 0) < 500) {
  #logic here 
}

The size of the response should be available as a HTTP header.

Example (in vcl_backend_response ):

if (beresp.http.Content-Length == "0") {
    return(retry);   # Retries the request
}

or:

if (beresp.http.Content-Length == "0") {
    beresp.uncacheable = true;   # Prevents object from being cached
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM