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

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.

Hi @Gregor

I am experiencing the same behaviour than @SaravananPeriyasamy with this upstream control in a GET request.

Did you get the answer for this issue?

Regards

I didn´t understand the x-tyk-cache-action-set header. Now it is working for GET request but I am in the same way than @SaravananPeriyasamy with POST requests.

hi @Hector_Garcia and welcome to the community!
also tagging @SaravananPeriyasamy

can you validate your returned headers like saravanan showed above?

also, I believe the line below needs to be non null and should at least state ,