Skip to content

Negative caching only applies to small number of errors #3211

@mlibbey

Description

@mlibbey

https://docs.trafficserver.apache.org/en/7.1.x/admin-guide/files/records.config.en.html#proxy-config-http-negative-caching-enabled
says, "The following negative responses are cached by Traffic Server:" followed by a list of specific status codes. This is incorrect.

  • the list doesn't completely match the code:
    case HTTP_STATUS_NO_CONTENT:
    case HTTP_STATUS_USE_PROXY:
    case HTTP_STATUS_BAD_REQUEST:
    case HTTP_STATUS_FORBIDDEN:
    case HTTP_STATUS_NOT_FOUND:
    case HTTP_STATUS_METHOD_NOT_ALLOWED:
    case HTTP_STATUS_REQUEST_URI_TOO_LONG:
    case HTTP_STATUS_INTERNAL_SERVER_ERROR:
    case HTTP_STATUS_NOT_IMPLEMENTED:
    case HTTP_STATUS_BAD_GATEWAY:
    case HTTP_STATUS_SERVICE_UNAVAILABLE:
    case HTTP_STATUS_GATEWAY_TIMEOUT:
    For instance, case HTTP_STATUS_REQUEST_URI_TOO_LONG is status code 414. which isn't listed
  • non-listed 4xx errors are cached based on proxy.config.http.cache.heuristic_min_lifetime, which defaults to 1hour.

(remap.config maps http://httpbin.org to a local instance of httpbin)

$ traffic_ctl config get proxy.config.http.negative_caching_lifetime
proxy.config.http.negative_caching_lifetime: 10
$ for status in `seq 400 499`; do 
echo "####status code=$status####"; 
for retry in `seq 3`; do 
  result=$(curl -sD- -o/dev/null -x 127.0.0.1:80 "http://httpbin.org/status/$status" | egrep "(Age|X-Cache)"); 
  if [[ $retry < 3 ]]; then 
    sleep 6; 
  else if [[ "$result" == *"Age: 0"* ]]; then 
      echo "$status code works"; 
    else 
      echo "$status is cached too long"; 
    fi;
  fi; 
  done; 
done
####status code=400####
400 code works
####status code=401####
401 code works
####status code=402####
402 is cached too long
####status code=403####
403 is cached too long
####status code=404####
404 code works
####status code=405####
405 code works
####status code=406####
406 is cached too long
####status code=407####
407 is cached too long
####status code=408####
408 is cached too long
####status code=409####
409 is cached too long
####status code=410####
410 is cached too long
####status code=411####
411 is cached too long
####status code=412####
412 is cached too long
####status code=413####
413 is cached too long
####status code=414####
414 code works
####status code=415####
415 is cached too long
####status code=416####
416 code works
####status code=417####
417 is cached too long
####status code=418####
418 is cached too long
####status code=419####
419 is cached too long
####status code=420####
420 is cached too long
####status code=421####
421 is cached too long
####status code=422####
422 is cached too long
####status code=423####
423 is cached too long
####status code=424####
424 is cached too long
####status code=425####
425 is cached too long
####status code=426####
426 is cached too long
####status code=427####
427 is cached too long
####status code=428####
428 is cached too long
####status code=429####
429 is cached too long
####status code=430####
430 is cached too long
####status code=431####
431 is cached too long
####status code=432####
432 is cached too long
####status code=433####
433 is cached too long
####status code=434####
434 is cached too long
####status code=435####
435 is cached too long
####status code=436####
436 is cached too long
####status code=437####
437 is cached too long
####status code=438####
438 is cached too long
####status code=439####
439 is cached too long
####status code=440####
440 is cached too long
####status code=441####
441 is cached too long
####status code=442####
442 is cached too long
####status code=443####
443 is cached too long
####status code=444####
444 is cached too long
####status code=445####
445 is cached too long
####status code=446####
446 is cached too long
####status code=447####
447 is cached too long
####status code=448####
448 is cached too long
####status code=449####
449 is cached too long
####status code=450####
450 is cached too long
####status code=451####
451 is cached too long
####status code=452####
452 is cached too long
####status code=453####
453 is cached too long
####status code=454####
454 is cached too long
####status code=455####
455 is cached too long
####status code=456####
456 is cached too long
####status code=457####
457 is cached too long
####status code=458####
458 is cached too long
####status code=459####
459 is cached too long
####status code=460####
460 is cached too long
####status code=461####
461 is cached too long
####status code=462####
462 is cached too long
####status code=463####
463 is cached too long
####status code=464####
464 is cached too long
####status code=465####
465 is cached too long
####status code=466####
466 is cached too long
####status code=467####
467 is cached too long
####status code=468####
468 is cached too long
####status code=469####
469 is cached too long
####status code=470####
470 is cached too long
####status code=471####
471 is cached too long
####status code=472####
472 is cached too long
####status code=473####
473 is cached too long
####status code=474####
474 is cached too long
####status code=475####
475 is cached too long
####status code=476####
476 is cached too long
####status code=477####
477 is cached too long
####status code=478####
478 is cached too long
####status code=479####
479 is cached too long
####status code=480####
480 is cached too long
####status code=481####
481 is cached too long
####status code=482####
482 is cached too long
####status code=483####
483 is cached too long
####status code=484####
484 is cached too long
####status code=485####
485 is cached too long
####status code=486####
486 is cached too long
####status code=487####
487 is cached too long
####status code=488####
488 is cached too long
####status code=489####
489 is cached too long
####status code=490####
490 is cached too long
####status code=491####
491 is cached too long
####status code=492####
492 is cached too long
####status code=493####
493 is cached too long
####status code=494####
494 is cached too long
####status code=495####
495 is cached too long
####status code=496####
496 is cached too long
####status code=497####
497 is cached too long
####status code=498####
498 is cached too long
####status code=499####
499 is cached too long

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions