Hey let’s back up a minute here. We didn’t remove CGI “just because we wanted to”.
A Cgi script added another layer of potential failure for your app. If the app was hung, the cgi script couldn’t tell that and would attempt to launch another copy, which often failed for lack of available ports or memory. If the app was busy but not hung, the script might give up waiting for a response and show another error.
CGI was also the #1 reason we could not offer the built-in HTTP/1.1 server options. There’s no way to offer a persistent socket through a non-persistent script which opens and closes for each request. There was also a performance hit because you literally had to wait for the system to open the script each time.
The CGI script also caused memory issues for the uploader component (or when transferring any large chunk of data). If a user uploaded a big file, the script had to load the entire thing into memory to transfer it to the web app. We actually tried spooling it off to disk in 2015 or 2016 but the performance hit just crippled the already slow http/1.0 server that we had.
I am sorry that you are having trouble with this, but there just was no way forward for us with CGI.