The old server-rendered frameworks (rails, django) never really needed CORS because frontend and backend were on the same origin.
Then lots of CORS issues cropped up when we started putting React frontends on a separate subdomain from the backend.
But these days, frontend and backend are being pushed onto the same origin again by running compute (or a reverse proxy) at the edge. Next.js is a good example that has baked this practice into the framework itself.