A decade-plus ago, this was common in single-page apps. It was the only way to do it before the history API existed, and enough people were doing it that Google was pushing a fragment-url thing [0] that allowed server-side rendering. You'd make such links in a certain way, then the crawler would hope a simple modification of the URL could be rendered by the server and load that.
(Per a comment on that source, it's not been a thing since 2015, since the google crawler can now handle javascript)
[0] https://stackoverflow.com/questions/6001433/does-google-igno...
https://github.com/Cyphrme/URLFormJS
I use it in a lot of places, like: https://convert.zamicol.com/#?inAlph=Text&in=Hello%20world!&...
https://cyphr.me/ed25519_applet/ed.html#?msg=Hello%20World!&...
https://cyphr.me/coze#?verify&input={%22pay%22:{%22root%22:%...
You'd need to read state off the url fragment (location.hash). You can feed that into your appropriate state management system, I suppose. Some (like react router) I think support hash routing, but I don't know that they support both has routing and history routing at the same time, so that may not be quite up to task if thats the case.
Still though I suppose you could probably gzip it before base64 encoding it for some additional optimization.
Extremely long URLs have other UX issues, e.g. sending them on chat apps and having them eat up multiple scroll pages in one URL, like:
"Check out this event:
http://..... ... ... (500 scroll-screen-lengths of just URL) ... ...
Here's another event on the same day:
http://..... ... ... (500 scroll-screen-lengths of just URL) ... ...
Can you let me know what you think and which one you'd like to go to?"
(1) https://support.microsoft.com/en-us/topic/maximum-url-length...
My reading is you were worried about length of encoding one state, so you moved to encapsulating states in a dictionary with keys of hash of State and objects of State
And this led to a decrease in size of the URL?
My guess at my misunderstanding: you kept the state dictionary server-side or at least some other storage method than the URL, and just used the URL to identify which state to use from the dictionary. I e. The bit you add to the URL is just the hash of the state, or dictionary key
IE was all about limitations Nothing surprised me about IE limitations.