I built Laravel APIs and hosted on namecheap. I have set up the handleCORS file with these attributes:
'paths' => ['api/*'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => ['*'],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => true,
On the frontend, my requests are made using axios with the only header set being the content-type: application/json. Making a request when the server was on localhost works fine. But pushing to namecheap and pushing the frontend to vercel, I keep getting this error:
Access to XMLHttpRequest at 'https://landearn.bumasys.com/api/signup' from origin 'https://landearn-web.vercel.app' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
And these are my response headers:
cache-control: private, no-cache, no-store, must-revalidate, max-age=0
content-length: 1238
content-type: text/html
date: Tue, 14 Sep 2021 09:49:28 GMT
pragma: no-cache
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
The problem is that I have tried so many solutions, used a custom CORS middleware with these configurations:
$headers = [
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods'=> 'POST, GET, OPTIONS, PUT, DELETE',
'Access-Control-Allow-Headers'=> 'Authorization, Content-Type, X-Auth-Token, Bearer, Origin',
'Cache-Control' => 'no-cache, private',
'X-RateLimit-Limit' => '60',
'X-RateLimit-Remaining' => '59',
];
return response('OK', 200, $headers);
if($request->getMethod() == "OPTIONS") {
// The client-side application can set only headers allowed in Access-Control-Allow-Headers
return response('OK', 200, $headers);
}
$response = $next($request);
foreach($headers as $key => $value)
$response->header($key, $value);
return $response;
I even added a preflight middleware that captures every OPTIONS request and sends an empty response to the browser requesting resource, here:
public function handle($request, Closure $next )
{
if ($request->getMethod() === "OPTIONS") {
return response('');
}
return $next($request);
}
Have I sought for solutions, yes I have. I don't know why this is happening, and in time past I have been restricted to using only one Laravel application I configured back then for my API requests, but it's too clustered and not good enough for me to continue using, funny part is that if I reproduce that same project into another domain by zipping and extracting it, I still get the same CORS problem, am now really lost on how to permanently fix this CORS madness, I really can't continue this way.