CORS Decision Lab
Switch between request shapes and policy outcomes to see when the browser sends the request, preflights it, or exposes the response.
Caller: https://shop.milan.example issues GET https://api.berlin.example/customers
Cross-origin GET, no custom headers, no credentials
The request can still happen even though the browser refuses to hand the answer to the page.
Simple request. No preflight. Browser sends the GET directly.
Credentials: No ambient credentials are involved here, so the main question is response readability.
None. This request stays in the simple bucket because the method and headers are safelisted.
API returns `200 OK` with JSON but sends no `Access-Control-Allow-Origin` header.
Server logs show a normal request. JavaScript gets a CORS failure and cannot read the JSON body.
No preflight cache is involved. Shared caches can still store the body, but script access remains blocked without CORS.
CORS only matters because the caller and the target are on different origins. The browser starts by comparing scheme, host, and port.
Scenario focus: No CORS headers
Arrow keys to navigate · R to reset
Tap dots to jump to any step