Failed to execute ‘pushState’ on ‘History’

Written by James McDonald

May 15, 2023

Uncaught (in promise) DOMException: Failed to execute 'pushState' on 'History': A history state object with URL 'http://example.com.au/dev/despatch' cannot be created in a document with origin 'https://example.com.au' and URL 'https://example.com.au/dev/despatch'.

I got the above error when attempting to click an Inertia JS Link.

The problem ended up being that I had

<CakePHP 4 Web Application Served via HTTP>—<Ha Proxy terminating HTTPS>—-Web Client

The issue was CakePHP 4 was creating a full URL but it was http://example.com/dev/despatch

 return Router::url($this->getRequest()->getRequestTarget(), true);

To fix it I modified the $fullBaseUrl code in config/bootstrap.php to detect the front end proxy via a header as follows:

/*
 * Set the full base URL.
 * This URL is used as the base of all absolute links.
 */

// mine is set to App.fullBaseUrl = false;
$fullBaseUrl = Configure::read('App.fullBaseUrl');

if (!$fullBaseUrl) {
    $s = null;
    // HaProxy is passing HTTP_X_FORWARDED_PROTO header back to CakePHP 4
    // read it and change scheme to https
    if (env('HTTPS') || env('HTTP_X_FORWARDED_PROTO') === 'https') {
        $s = 's';
    }

    $httpHost = env('HTTP_HOST');
    if (isset($httpHost)) {
        $fullBaseUrl = 'http' . $s . '://' . $httpHost;
    }
    
    unset($httpHost, $s);
}

if ($fullBaseUrl) {
    Router::fullBaseUrl($fullBaseUrl);
}
unset($fullBaseUrl);

Now it correctly sets the Full Base URL and no longer has the front end error as above.

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.

You May Also Like…

Robocopy exclude Directories

Just trying to copy everything except a couple of directories from a drive to my NAS This is the secret incantation of...