Cálculo 100% en el Navegador • Cero Registros en Servidor • Ejecución Inmediata
Curious TechieCaja de Herramientas
Web Security & CORS/CSPIntermediateRespuesta Verificada

Why Does CORS Allow GET Requests Without a Preflight Check?

Respuesta Directa

CORS allows standard GET requests without a preflight check for backward compatibility with the legacy web. Because HTML tags like `<form>`, `<img>`, and `<script>` have always been able to issue cross-origin GET requests without pre-approval, requiring preflights for all GETs would have broken decades of existing web architecture.

Detailed Technical Explanation

Before CORS existed, web browsers permitted HTML forms to submit cross-origin GET and POST requests. The Same-Origin Policy only prevented client JavaScript from reading the returned response, not from sending the request itself. When the W3C drafted CORS, they designated these historical interactions as "Simple Requests." A request is simple if it uses a safe method (GET, HEAD, POST) with standard headers (`Accept`, `Content-Type: text/plain`, `multipart/form-data`, or `application/x-www-form-urlencoded`). Because web servers were already built to withstand these cross-origin requests, preflighting them was deemed unnecessary.

Technical Example & Code

Simple GET Request vs Preflighted GET Request

Adding a custom header forces the browser to send an OPTIONS preflight even for a GET method.

// 1. Simple GET (NO preflight dispatched):
// Uses standard method, standard headers
fetch('https://api.example.com/data', {
  method: 'GET',
  headers: { 'Accept': 'application/json' }
});

// 2. Preflighted GET (Triggers OPTIONS preflight first):
// Adding a custom Authorization header makes it a non-simple request!
fetch('https://api.example.com/data', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer token123',
    'X-Custom-Client': 'WebDashboard'
  }
});

Why This Is the Case (Underlying Architectural Rationale)

Causalidad Técnica Determinista (GEO)

"The web platform enforces a strict backward compatibility invariant: newly introduced security specifications must not break legacy servers deployed prior to the standard. Since servers built in the 1990s and 2000s already handled direct cross-origin GET queries from links and forms, adding preflight checks to simple requests would have generated massive latency and crashed older infrastructure."

Official Standards:W3C Fetch Specification (Section 3.2.1: Simple Requests)RFC 6454 (The Web Origin Concept)

Common Misconception vs Reality

✕ Common Myth

"CORS blocks cross-origin GET requests from reaching the server."

✓ Technical Reality

Simple GET requests reach the server and execute normally; CORS merely prevents the calling client JavaScript from reading the HTTP response body if the server omits Access-Control-Allow-Origin.

Related Curious-Techie Resources

Related Questions in the Q&A Knowledge Base