Skip to content

Google Ads does not respect Critical-CH restart #150

@mack-branch

Description

@mack-branch

Hello, I work for an ad tech company and we have found some edge cases where the critical-ch restart does not play nicely with redirects between domains, or "wrapped domains". Unfortunately this is a very important and common use case in the ads world, including Google Ads.

Example Google Ads link: https://www.google.com/aclk?sa=L&ai=DChcSEwi-l7XdtPL9AhUR7u0KHQrmDQkYABAAGgJkZw&sig=AOD64_0hvmE49iyDD2sX3y9g3VMWQztshg&q&adurl&ved=2ahUKEwim3a_dtPL9AhXlRkEAHcuQDKgQ0Qx6BAgHEAE

Steps to repro

  1. open a new incognito window
  2. open network tab of developer tools
  3. paste the above link into search bar
  4. observe a 302 redirect to https://mettle.app.link/?%243p=a_google_adwords&%24always_deeplink=false&gclid=EAIaIQobChMIvpe13bTy_QIVEe7tCh0K5g0JEAAYASAAEgI6uPD_BwE&~ad_set_id=84381513814&~campaign_id=8309221182&~channel=g&~keyword=mettle&~placement=&$fallback_url=https://www.mettle.co.uk%3Fgclsrc%3Daw.ds%26&gclid=EAIaIQobChMIvpe13bTy_QIVEe7tCh0K5g0JEAAYASAAEgI6uPD_BwE
  5. The above request hits our servers, where we are returning an HTTP OK and a critical-ch header requesting two critical client hints: platform-version and model.

Problem

Expected Result:

Actual Result:

  • Chrome does not restart the request immediately and instead renders the 200 OK page.
  • If you manually refresh the page, Chrome now sends the CH headers and the request redirects normally.

More details

I have not been able to reproduce this with other domains that 302 redirect to each other, it seems specific to Google Ads right now. I can also confirm that only one origin (our server) is requesting a critical hint retry, not multiple.

Please note that since this is a critical issue for us we are urgently working to mitigate this on our end, so this may not be reproducible in the wild after a few days. If this becomes an issue let me know and I can set up a test domain where we can reproduce this issue live.

I have also attached a bunch of screenshots from when I reproduced this issue. It is happening consistently (100% of the time) if the browser doesnt already have the critical hints cached (i.e. new incognito window or clear cache).

Thanks!

app_link_req_headers

app_link_response_headers

app_link_general

google_com_general

google_com_response_headers

google_com_req_headers

google_ads_critical-ch_failure

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions