I created a web-based Roku remote using ECP that I've been using for over a year. Recently it stopped working in Google Chrome because requests from public hosts to private networks has been deprecated (CORS-RFC1918).
What I did to resolve this was to replace my fetch / XMLHttpRequests with form posts. A simple service that creates a form element via document.createElement('form'), then sets it's method to POST, it's action to the desired Roku endpoint (e.g. "http://192.168.1.25:8060/keypress/Play") and finally, calls submit() on the form.
That fixes that, yes, but Roku is now evidently inspecting the host and/or referrer header to make sure that the request comes from the same network, and throwing 403 forbidden otherwise.
I'm using a website on another network to show the web gui, and although it is technically the local client doing the requests directly to 192.168.x.x, the Roku is somehow seeing the website address and throwing 403.
If I run the exact same html manually/directly from chrome instead of loading it from the website, it works properly.