• Resolved pepe80

    (@pepe80)


    I have noticed a very strange behavior on my site. When I submit a form (Contact Form 7) on any subpage, then the home page cache is cleared (only home page). After many hours of research, I came to the fact that this phenomenon occurs only when the Flamingo plugin is enabled. When I turn it off the problem disappears.
    Another strange thing… the problem also disappears when Flamingo plugin is enabled and I turn on debugging:
    Toolbox -> Debug Settings -> Debug Log -> On

    I don’t have any checkboxes checked here:
    Cache -> Purge -> Auto Purge Rules For Publish/Update

    This field is empty:
    Cache -> Purge -> Purge All Hooks

    PHP: 8.0.9
    LiteSpeed plugin: 5.3.1
    LiteSpeed server: 6.0.8
    WP: 5.9.2 (multisite)

Viewing 12 replies - 1 through 12 (of 12 total)
  • Thread Starter pepe80

    (@pepe80)

    I withdraw this sentence:

    Another strange thing… the problem also disappears when Flamingo plugin is enabled and I turn on debugging:
    Toolbox -> Debug Settings -> Debug Log -> On

    Here is debug.log:

    01/22/23 00:38:18.410 [178.xxx.x.xxx:12416 1 tyM] ??</img> ------POST HTTP/1.1 (HTTPS)  /wp-json/contact-form-7/v1/contact-forms/90072/feedback
    01/22/23 00:38:18.410 [178.xxx.x.xxx:12416 1 tyM] Query String: 
    01/22/23 00:38:18.410 [178.xxx.x.xxx:12416 1 tyM] HTTP_REFERER: https://mydomain.com/cache-form-test/
    01/22/23 00:38:18.410 [178.xxx.x.xxx:12416 1 tyM] User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
    01/22/23 00:38:18.410 [178.xxx.x.xxx:12416 1 tyM] Accept: application/json, */*;q=0.1
    01/22/23 00:38:18.410 [178.xxx.x.xxx:12416 1 tyM] Accept Encoding: gzip
    01/22/23 00:38:18.410 [178.xxx.x.xxx:12416 1 tyM] X-LSCACHE: true
    01/22/23 00:38:18.657 [178.xxx.x.xxx:12416 1 tyM] [Router] get_role: 
    01/22/23 00:38:18.657 [178.xxx.x.xxx:12416 1 tyM] [Media] init
    01/22/23 00:38:18.658 [178.xxx.x.xxx:12416 1 tyM] [LQIP] init
    01/22/23 00:38:18.658 [178.xxx.x.xxx:12416 1 tyM] [Optm] init
    01/22/23 00:38:18.658 [178.xxx.x.xxx:12416 1 tyM] [Optm] ?</img> CCSS set to OFF due to missing domain key
    01/22/23 00:38:18.659 [178.xxx.x.xxx:12416 1 tyM] [CDN] init
    01/22/23 00:38:18.659 [178.xxx.x.xxx:12416 1 tyM] ?</img> Task init
    01/22/23 00:38:18.659 [178.xxx.x.xxx:12416 1 tyM] [Router] LSCWP_CTRL bypassed empty
    01/22/23 00:38:18.660 [178.xxx.x.xxx:12416 1 tyM] [GUI] init
    01/22/23 00:38:18.986 [178.xxx.x.xxx:12416 1 tyM] [REST] ?</img> Internal REST ON [filter] rest_request_before_callbacks
    01/22/23 00:38:18.986 [178.xxx.x.xxx:12416 1 tyM] [REST] ?</img> Internal REST OFF [filter] rest_request_after_callbacks
    01/22/23 00:38:18.987 [178.xxx.x.xxx:12416 1 tyM] [REST] ?</img> Internal REST ON [filter] rest_request_before_callbacks
    01/22/23 00:38:18.987 [178.xxx.x.xxx:12416 1 tyM] [REST] ?</img> Internal REST OFF [filter] rest_request_after_callbacks
    01/22/23 00:38:18.988 [178.xxx.x.xxx:12416 1 tyM] [REST] ?</img> Internal REST ON [filter] rest_request_before_callbacks
    01/22/23 00:38:18.988 [178.xxx.x.xxx:12416 1 tyM] [REST] ?</img> Internal REST OFF [filter] rest_request_after_callbacks
    01/22/23 00:38:18.988 [178.xxx.x.xxx:12416 1 tyM] [REST] ?</img> Internal REST ON [filter] rest_request_before_callbacks
    01/22/23 00:38:18.988 [178.xxx.x.xxx:12416 1 tyM] [REST] ?</img> Internal REST OFF [filter] rest_request_after_callbacks
    01/22/23 00:38:18.992 [178.xxx.x.xxx:12416 1 tyM] [Vary] Rest API init disabled vary change
    01/22/23 00:38:19.061 [178.xxx.x.xxx:12416 1 tyM] [REST] ?</img> Internal REST ON [filter] rest_request_before_callbacks
    01/22/23 00:38:20.163 [178.xxx.x.xxx:12416 1 tyM] ??</img>  added * => LiteSpeed\Root::debug(??</img>  added *,8)@46 => LiteSpeed\Purge->_add(ARRAY)@480 => LiteSpeed\Purge::add(ARRAY)@452 => LiteSpeed\Purge->purge_post(90098)@849 => LiteSpeed\Purge->purge_publish(publish,new)@83 => WP_Hook->apply_filters(ARRAY)@307 => WP_Hook->do_action(ARRAY)@331 => 
    /home//mydomain.com/public_html/wp-includes/post.php@474 => 
    /home//mydomain.com/public_html/wp-includes/post.php@5317
    01/22/23 00:38:20.163 [178.xxx.x.xxx:12416 1 tyM] ??</img>  X-LiteSpeed-Purge: public,8051_
    01/22/23 00:38:20.258 [178.xxx.x.xxx:12416 1 tyM] [REST] ?</img> Internal REST OFF [filter] rest_request_after_callbacks
    01/22/23 00:38:20.260 [178.xxx.x.xxx:12416 1 tyM] ??</img> [Tag] Add  --- HTTP.200
    01/22/23 00:38:20.260 [178.xxx.x.xxx:12416 1 tyM] [Core] CHK html bypass: miss footer const
    01/22/23 00:38:20.261 [178.xxx.x.xxx:12416 1 tyM] [Ctrl] not cacheable before ctrl finalize
    01/22/23 00:38:20.261 [178.xxx.x.xxx:12416 1 tyM] [Router] get_role: 
    01/22/23 00:38:20.261 [178.xxx.x.xxx:12416 1 tyM] [Vary] role id: failed, guest
    01/22/23 00:38:20.261 [178.xxx.x.xxx:12416 1 tyM] [Router] get_role: 
    01/22/23 00:38:20.261 [178.xxx.x.xxx:12416 1 tyM] [Router] get_role: 
    01/22/23 00:38:20.261 [178.xxx.x.xxx:12416 1 tyM] [Vary] no custimzed vary
    01/22/23 00:38:20.262 [178.xxx.x.xxx:12416 1 tyM] [Core] Silence Comment due to REST/AJAX
    01/22/23 00:38:20.262 [178.xxx.x.xxx:12416 1 tyM] ??</img> X-LiteSpeed-Cache-Control: no-cache
    01/22/23 00:38:20.262 [178.xxx.x.xxx:12416 1 tyM] ??</img> X-LiteSpeed-Purge: public,8051_
    01/22/23 00:38:20.262 [178.xxx.x.xxx:12416 1 tyM] [Core] CHK html bypass: miss footer const
    01/22/23 00:38:20.263 [178.xxx.x.xxx:12416 1 tyM] [Media] bypass: Not frontend HTML type
    01/22/23 00:38:20.263 [178.xxx.x.xxx:12416 1 tyM] GUI bypassed by no counter
    01/22/23 00:38:20.263 [178.xxx.x.xxx:12416 1 tyM] [Optm] bypass: Not frontend HTML type
    01/22/23 00:38:20.263 [178.xxx.x.xxx:12416 1 tyM] Response headers --- array (
      0 => 'Content-Type: application/json; charset=UTF-8',
      1 => 'X-Robots-Tag: noindex',
      2 => 'Link: <https://mydomain.com/wp-json/>; rel="https://api.w.org/"',
      3 => 'X-Content-Type-Options: nosniff',
      4 => 'Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages, Link',
      5 => 'Access-Control-Allow-Headers: Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type',
      6 => 'Allow: POST',
      7 => 'X-LiteSpeed-Tag: 8051_HTTP.200',
      8 => 'Access-Control-Allow-Origin: https://mydomain.com',
      9 => 'Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, PATCH, DELETE',
      10 => 'Access-Control-Allow-Credentials: true',
      11 => 'Vary: Origin',
      12 => 'X-LiteSpeed-Cache-Control: no-cache',
      13 => 'X-LiteSpeed-Purge: public,8051_',
    )
    01/22/23 00:38:20.263 [178.xxx.x.xxx:12416 1 tyM] End response
    --------------------------------------------------------------------------------
    
    01/22/23 00:38:20.348 [178.xxx.x.xxx:12416 1 362] ??</img> ------GET HTTP/1.1 (HTTPS)  /wp-json/contact-form-7/v1/contact-forms/90072/refill
    01/22/23 00:38:20.348 [178.xxx.x.xxx:12416 1 362] Query String: 
    01/22/23 00:38:20.348 [178.xxx.x.xxx:12416 1 362] HTTP_REFERER: https://mydomain.com/cache-form-test/
    01/22/23 00:38:20.348 [178.xxx.x.xxx:12416 1 362] User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
    01/22/23 00:38:20.348 [178.xxx.x.xxx:12416 1 362] Accept: application/json, */*;q=0.1
    01/22/23 00:38:20.348 [178.xxx.x.xxx:12416 1 362] Accept Encoding: gzip
    01/22/23 00:38:20.348 [178.xxx.x.xxx:12416 1 362] X-LSCACHE: true
    01/22/23 00:38:20.620 [178.xxx.x.xxx:12416 1 362] [Router] get_role: 
    01/22/23 00:38:20.621 [178.xxx.x.xxx:12416 1 362] [Media] init
    01/22/23 00:38:20.621 [178.xxx.x.xxx:12416 1 362] [LQIP] init
    01/22/23 00:38:20.622 [178.xxx.x.xxx:12416 1 362] [Optm] init
    01/22/23 00:38:20.622 [178.xxx.x.xxx:12416 1 362] [Optm] ?</img> CCSS set to OFF due to missing domain key
    01/22/23 00:38:20.622 [178.xxx.x.xxx:12416 1 362] [CDN] init
    01/22/23 00:38:20.623 [178.xxx.x.xxx:12416 1 362] ?</img> Task init
    01/22/23 00:38:20.623 [178.xxx.x.xxx:12416 1 362] [Router] LSCWP_CTRL bypassed empty
    01/22/23 00:38:20.623 [178.xxx.x.xxx:12416 1 362] [GUI] init
    01/22/23 00:38:20.876 [178.xxx.x.xxx:12416 1 362] [REST] ?</img> Internal REST ON [filter] rest_request_before_callbacks
    01/22/23 00:38:20.876 [178.xxx.x.xxx:12416 1 362] [REST] ?</img> Internal REST OFF [filter] rest_request_after_callbacks
    01/22/23 00:38:20.876 [178.xxx.x.xxx:12416 1 362] [REST] ?</img> Internal REST ON [filter] rest_request_before_callbacks
    01/22/23 00:38:20.876 [178.xxx.x.xxx:12416 1 362] [REST] ?</img> Internal REST OFF [filter] rest_request_after_callbacks
    01/22/23 00:38:20.877 [178.xxx.x.xxx:12416 1 362] [REST] ?</img> Internal REST ON [filter] rest_request_before_callbacks
    01/22/23 00:38:20.877 [178.xxx.x.xxx:12416 1 362] [REST] ?</img> Internal REST OFF [filter] rest_request_after_callbacks
    01/22/23 00:38:20.877 [178.xxx.x.xxx:12416 1 362] [REST] ?</img> Internal REST ON [filter] rest_request_before_callbacks
    01/22/23 00:38:20.878 [178.xxx.x.xxx:12416 1 362] [REST] ?</img> Internal REST OFF [filter] rest_request_after_callbacks
    01/22/23 00:38:20.881 [178.xxx.x.xxx:12416 1 362] [Vary] Rest API init disabled vary change
    01/22/23 00:38:20.964 [178.xxx.x.xxx:12416 1 362] [REST] ?</img> Internal REST ON [filter] rest_request_before_callbacks
    01/22/23 00:38:20.981 [178.xxx.x.xxx:12416 1 362] [REST] ?</img> Internal REST OFF [filter] rest_request_after_callbacks
    01/22/23 00:38:20.983 [178.xxx.x.xxx:12416 1 362] ??</img> [Tag] Add  --- HTTP.200
    01/22/23 00:38:20.983 [178.xxx.x.xxx:12416 1 362] [Core] CHK html bypass: miss footer const
    01/22/23 00:38:20.984 [178.xxx.x.xxx:12416 1 362] [Ctrl] not cacheable before ctrl finalize
    01/22/23 00:38:20.984 [178.xxx.x.xxx:12416 1 362] [Router] get_role: 
    01/22/23 00:38:20.984 [178.xxx.x.xxx:12416 1 362] [Vary] role id: failed, guest
    01/22/23 00:38:20.984 [178.xxx.x.xxx:12416 1 362] [Router] get_role: 
    01/22/23 00:38:20.984 [178.xxx.x.xxx:12416 1 362] [Router] get_role: 
    01/22/23 00:38:20.984 [178.xxx.x.xxx:12416 1 362] [Vary] no custimzed vary
    01/22/23 00:38:20.984 [178.xxx.x.xxx:12416 1 362] [Core] Silence Comment due to REST/AJAX
    01/22/23 00:38:20.984 [178.xxx.x.xxx:12416 1 362] ??</img> X-LiteSpeed-Cache-Control: no-cache
    01/22/23 00:38:20.985 [178.xxx.x.xxx:12416 1 362] [Core] CHK html bypass: miss footer const
    01/22/23 00:38:20.985 [178.xxx.x.xxx:12416 1 362] [Media] bypass: Not frontend HTML type
    01/22/23 00:38:20.985 [178.xxx.x.xxx:12416 1 362] GUI bypassed by no counter
    01/22/23 00:38:20.985 [178.xxx.x.xxx:12416 1 362] [Optm] bypass: Not frontend HTML type
    01/22/23 00:38:20.985 [178.xxx.x.xxx:12416 1 362] Response headers --- array (
      0 => 'Content-Type: application/json; charset=UTF-8',
      1 => 'X-Robots-Tag: noindex',
      2 => 'Link: <https://mydomain.com/wp-json/>; rel="https://api.w.org/"',
      3 => 'X-Content-Type-Options: nosniff',
      4 => 'Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages, Link',
      5 => 'Access-Control-Allow-Headers: Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type',
      6 => 'Allow: GET',
      7 => 'X-LiteSpeed-Tag: 8051_HTTP.200',
      8 => 'Vary: Origin',
      9 => 'X-LiteSpeed-Cache-Control: no-cache',
    )
    01/22/23 00:38:20.985 [178.xxx.x.xxx:12416 1 362] End response
    --------------------------------------------------------------------------------
    
    

    Here is debug_purge.log:

    01/22/23 00:38:20.262 [178.xxx.x.xxx:12416 1 tyM] ??</img> ------POST HTTP/1.1 (HTTPS)  /wp-json/contact-form-7/v1/contact-forms/90072/feedback
    01/22/23 00:38:20.262 [178.xxx.x.xxx:12416 1 tyM] Query String: 
    01/22/23 00:38:20.262 [178.xxx.x.xxx:12416 1 tyM] HTTP_REFERER: https://mydomain.com/cache-form-test/
    01/22/23 00:38:20.262 [178.xxx.x.xxx:12416 1 tyM] User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
    01/22/23 00:38:20.262 [178.xxx.x.xxx:12416 1 tyM] Accept: application/json, */*;q=0.1
    01/22/23 00:38:20.262 [178.xxx.x.xxx:12416 1 tyM] Accept Encoding: gzip
    01/22/23 00:38:20.262 [178.xxx.x.xxx:12416 1 tyM] X-LSCACHE: true
    01/22/23 00:38:20.262 [178.xxx.x.xxx:12416 1 tyM] X-LiteSpeed-Purge: public,8051_ => LiteSpeed\LSC->send_headers()@597 => WP_Hook->apply_filters(,ARRAY)@307 => WP_Hook->do_action(ARRAY)@331 => 
    /home//mydomain.com/public_html/wp-includes/load.php@474
    
    Plugin Support qtwrk

    (@qtwrk)

    what does that plugin do ? because from the log , it triggers the post status change

    LiteSpeed\Purge->purge_publish(publish,new)
    Thread Starter pepe80

    (@pepe80)

    @qtwrk this Flamingo plugin is from the author of the “Contact Form 7” plugin: https://www.ads-software.com/plugins/flamingo/

    Is a message storage plugin (store submitted forms data). When form is submitted, the plugin creates a custom post:
    post_type = flamingo_inbound

    But why is the home page being purged?

    Thread Starter pepe80

    (@pepe80)

    @qtwrk I did some testing and the problem with clearing the homepage cache is not only related to the Flamingo plugin, but occurs when any custom post is added. So i have two questions:

    1. Why is the homepage cache cleared after creating a new post if I don’t have any checkboxes checked here:
      Cache -> Purge -> Auto Purge Rules For Publish/Update
    2. How to prevent clearing any cache for the selected post type? Flamingo is a typical “backend” plugin, only for admins and I don’t want to clear cache after adding a new “flamingo_inbound” post.
    Plugin Support qtwrk

    (@qtwrk)

    1) there is also an hardcoded purge , not controllable by setting

    2) it’s gonna be bit of hard for this , please try this code

    function lscwp_suppress_purge_update( $new_status, $old_status, $post ) {
        
    if ( $new_status != 'publish' && $old_status != 'publish' ) {
    return;
    }
    
    
    ob_start( function($buffer) use ($post) {
    @header("X-LiteSpeed-Purge: " . LSWCP_TAG_PREFIX . "_Po." . $post->ID );
    return $buffer;
    } );
    
    }
    
    add_action( 'transition_post_status', 'lscwp_suppress_purge_update', 10, 3 );
    

    to theme’s functions.php , it should suppress all other purge header and only do post id purge , see if this helps.

    Thread Starter pepe80

    (@pepe80)

    @qtwrk thanks for your help.

    1. Hardcoded in Flamingo or LiteSpeed?
    2. This code works all too well ?? The cache is not cleared when I add a page, blog post or other custom posts. I need to get this system behavior:
      – Cache -> Purge -> Auto Purge Rules For Publish/Update: All pages
      – Add/update page: purge all
      – Add/update blog post: purge all
      – Add/update my custom post type: purge all
      – Add/update post_type=flamingo_inbound: not purge
    Plugin Support qtwrk

    (@qtwrk)

    please try add another if statement before ob_start line

    if ( ‘flamingo_inbound’ == get_post_type() ) {

    return;

    }

    assuming flamingo_inbound is the post type name

    Thread Starter pepe80

    (@pepe80)

    @qtwrk The cache is still cleared when a “flamingo_inbound” post is created. To be honest, I don’t understand how this code would prevent cache clearing ??

    function lscwp_suppress_purge_update( $new_status, $old_status, $post ) {
    	
    	if ( $new_status != 'publish' && $old_status != 'publish' ) {
    		return;
    	}
    	
    	if ( $post->post_type == 'flamingo_inbound' ) {
    		file_put_contents('cache.log', $post->post_type . " [old: $old_status] [new: $new_status]\n", FILE_APPEND);
            return;
        }
    	
    	ob_start( function($buffer) use ($post) {
            @header("X-LiteSpeed-Purge: " . LSWCP_TAG_PREFIX . "_Po." . $post->ID );
            return $buffer;
        } );
        
    }
    add_action( 'transition_post_status', 'lscwp_suppress_purge_update', 10, 3 );

    As you can see I added a debug log. After submitting the form, I see in the cache.log:

    flamingo_inbound [old: new] [new: publish]
    Plugin Support qtwrk

    (@qtwrk)

    well , logically , when plugins purges the cache , it sends out a http response header as x-litespeed-purge: xxx, xxx, xxx followed with series of tag that is tagged for each purges , and the any pages contains one of these tags will be purged

    so ideally , I was trying to use @header() function to suppress/override the header sent out by plugin , maybe it didn’t work out as expected , but at this point , will need the server log to verify what is the actual header it received

    Thread Starter pepe80

    (@pepe80)

    @qtwrk I think the if condition is in the wrong place. Shouldn’t it look like this?

    ob_start( function($buffer) use ($post) {
    	if ( $post->post_type == 'flamingo_inbound' ) {
    		// suppress purge
    	}
    	else {
    		// send standard header
    	}
    } );
    

    I just need to know what these headers should look like ??

    Plugin Support qtwrk

    (@qtwrk)

    the header should be like x-litespeed-purge: xxx_Po.1234

    where xxx should the prefix of your site , you can grab it from constant

    LSWCP_TAG_PREFIX

    and 1234 should be the post ID of your custom type post to purge that speicifc post

    Thread Starter pepe80

    (@pepe80)

    This code works as expected. When a post like “flamingo_inbound” appears, the cache is not cleared. I think we can consider the problem solved ??

    function lscwp_suppress_purge_update( $new_status, $old_status, $post ) {
        
        if ( $post->post_type != 'flamingo_inbound' ) {
            return;
        }
    
        
        ob_start( function($buffer) use ($post) {
            @header("X-LiteSpeed-Purge: " . LSWCP_TAG_PREFIX . "_Po." . $post->ID );
            return $buffer;
        } );
        
    }
    add_action( 'transition_post_status', 'lscwp_suppress_purge_update', 10, 3 );
Viewing 12 replies - 1 through 12 (of 12 total)
  • The topic ‘Flamingo plugin and home page cache’ is closed to new replies.