Caching - Upstream Control is not working

Hi Team,

I’m implementing upstream control caching by following the below document. In order to override the tyk’s safe mode caching, as per document following headers has to come from the target(backend) application.

  • x-tyk-cache-action-set = 1

  • x-tyk-cache-action-set-ttl : 300

https://tyk.io/docs/basic-config-and-security/reduce-latency/caching/#upstream-control

Required headers are returned by the backend application but still caching is not happening. POST method was used for testing. I believe through upstream control, caching for POST is supported. Please correct me here.

{
"name": "Inventory",
"slug": "",
"listen_port": 0,
"protocol": "http",
"enable_proxy_protocol": false,
"api_id": "ZGVmYXVsdC9pbnZlbnRvcnk=",
"org_id": "oss",
"use_keyless": true,
"use_oauth2": false,
"use_openid": false,
"openid_options": {
    "providers": null,
    "segregate_by_client": false
},
"oauth_meta": {
    "allowed_access_types": null,
    "allowed_authorize_types": null,
    "auth_login_redirect": ""
},
"auth": {
    "use_param": false,
    "param_name": "",
    "use_cookie": false,
    "cookie_name": "",
    "auth_header_name": "",
    "use_certificate": false,
    "validate_signature": false,
    "signature": {
        "algorithm": "",
        "header": "",
        "secret": "",
        "allowed_clock_skew": 0,
        "error_code": 0,
        "error_message": ""
    }
},
"auth_configs": null,
"use_basic_auth": false,
"basic_auth": {
    "disable_caching": false,
    "cache_ttl": 0,
    "extract_from_body": false,
    "body_user_regexp": "",
    "body_password_regexp": ""
},
"use_mutual_tls_auth": false,
"client_certificates": null,
"upstream_certificates": null,
"pinned_public_keys": null,
"enable_jwt": false,
"use_standard_auth": false,
"use_go_plugin_auth": false,
"enable_coprocess_auth": false,
"jwt_signing_method": "",
"jwt_source": "",
"jwt_identity_base_field": "",
"jwt_client_base_field": "",
"jwt_policy_field_name": "",
"jwt_default_policies": null,
"jwt_issued_at_validation_skew": 0,
"jwt_expires_at_validation_skew": 0,
"jwt_not_before_validation_skew": 0,
"jwt_skip_kid": false,
"jwt_scope_to_policy_mapping": null,
"jwt_scope_claim_name": "",
"notifications": {
    "shared_secret": "",
    "oauth_on_keychange_url": ""
},
"enable_signature_checking": false,
"hmac_allowed_clock_skew": 0,
"hmac_allowed_algorithms": null,
"request_signing": {
    "is_enabled": false,
    "secret": "",
    "key_id": "",
    "algorithm": "",
    "header_list": null,
    "certificate_id": "",
    "signature_header": ""
},
"base_identity_provided_by": "",
"definition": {
    "location": "",
    "key": "",
    "strip_path": false
},
"version_data": {
    "not_versioned": true,
    "default_version": "Default",
    "versions": {
        "Default": {
            "name": "Default",
            "expires": "",
            "paths": {
                "ignored": null,
                "white_list": null,
                "black_list": null
            },
            "use_extended_paths": true,
            "extended_paths":{
                "cache": [
                    "availability"
                ]
            },
            "global_headers": null,
            "global_headers_remove": null,
            "global_response_headers": null,
            "global_response_headers_remove": null,
            "ignore_endpoint_case": false,
            "global_size_limit": 0,
            "override_target": ""
        }
    }
},
"uptime_tests": {
    "check_list": null,
    "config": {
        "expire_utime_after": 0,
        "service_discovery": {
            "use_discovery_service": false,
            "query_endpoint": "",
            "use_nested_query": false,
            "parent_data_path": "",
            "data_path": "",
            "port_data_path": "",
            "target_path": "",
            "use_target_list": false,
            "cache_timeout": 0,
            "endpoint_returns_list": false
        },
        "recheck_wait": 0
    }
},
"proxy": {
    "preserve_host_header": false,
    "listen_path": "/inventory",
    "target_url": "https://example.com/inventory",
    "disable_strip_slash": false,
    "strip_listen_path": true,
    "enable_load_balancing": false,
    "target_list": null,
    "check_host_against_uptime_tests": false,
    "service_discovery": {
        "use_discovery_service": false,
        "query_endpoint": "",
        "use_nested_query": false,
        "parent_data_path": "",
        "data_path": "",
        "port_data_path": "",
        "target_path": "",
        "use_target_list": false,
        "cache_timeout": 0,
        "endpoint_returns_list": false
    },
    "transport": {
        "ssl_insecure_skip_verify": false,
        "ssl_ciphers": null,
        "ssl_min_version": 0,
        "ssl_force_common_name_check": false,
        "proxy_url": ""
    }
},
"disable_rate_limit": false,
"disable_quota": false,
"custom_middleware": {
    "pre": null,
    "post": null,
    "post_key_auth": null,
    "auth_check": {
        "name": "",
        "path": "",
        "require_session": false,
        "raw_body_only": false
    },
    "response": null,
    "driver": "",
    "id_extractor": {
        "extract_from": "",
        "extract_with": "",
        "extractor_config": {}
    }
},
"custom_middleware_bundle": "",
"cache_options": {
    "cache_timeout": 600,
    "enable_cache": true,
    "cache_all_safe_requests": false,
    "cache_response_codes": null,
    "enable_upstream_cache_control": true,
    "cache_control_ttl_header": "600",
    "cache_by_headers": null
},
"session_lifetime": 0,
"active": true,
"internal": false,
"auth_provider": {
    "name": "",
    "storage_engine": "",
    "meta": null
},
"session_provider": {
    "name": "",
    "storage_engine": "",
    "meta": null
},
"event_handlers": {
    "events": null
},
"enable_batch_request_support": false,
"enable_ip_whitelisting": false,
"allowed_ips": null,
"enable_ip_blacklisting": false,
"blacklisted_ips": null,
"dont_set_quota_on_create": false,
"expire_analytics_after": 0,
"response_processors": null,
"CORS": {
    "enable": false,
    "allowed_origins": null,
    "allowed_methods": null,
    "allowed_headers": null,
    "exposed_headers": null,
    "allow_credentials": false,
    "max_age": 0,
    "options_passthrough": false,
    "debug": false
},
"domain": "",
"certificates": null,
"do_not_track": true,
"tags": null,
"enable_context_vars": false,
"config_data": null,
"tag_headers": null,
"global_rate_limit": {
    "rate": 0,
    "per": 0
},
"strip_auth_data": false,
"enable_detailed_recording": false,
"graphql": {
    "enabled": false,
    "execution_mode": "",
    "schema": "",
    "type_field_configurations": null,
    "playground": {
        "enabled": false,
        "path": ""
    }
}

}

hi @SaravananPeriyasamy
You are correct in that POST caching is permissable with the correct header values being returned. Are you sure that you want to cache POSTs though? It’s generally not a good idea if th POST contains sensitive data.
Does the same behaviour exist with a GET request?

Hi @Gregor ,

Agreed that POST is not best practice for caching but i was trying to implement upstream caching concept.

I have attached the response header details returned by upstream system which passed through Tyk gateway and sent back to consumer as well.

Already i have shared the API Definition configurations where upstream control settings was enabled to cache the upstream response based on the headers returned.

Please let me know if something is missed in the config and why it is not working.

Regards,
Saravanan Periyasamy.