Join our Newsletter — 33% off our NHI Course

No-CORS

No-CORS is a fetch mode in web security that lets a browser make a cross-origin request without giving the calling script access to most of the response details. It is used for limited outbound requests where the browser enforces an opaque response, so the page cannot read headers or body unless the target explicitly allows it.

How No-CORS Fits the Browser Security Model

No-cors is not a relaxed trust mode, it is a constrained request mode. The browser still sends the request, but it withholds most response details from script, which makes the fetch useful for limited outbound communication without granting read access.

That design matters because the web platform treats network reachability and response visibility as separate questions. A page may be allowed to trigger a request while still being blocked from learning what came back, which is why opaque responses are a normal part of the model rather than a failure state.

For the broader browser boundary model, see Same-Origin Policy and Browser Security Model Guide.

What Opaque Responses Mean in Practice

With No-CORS, the calling script generally cannot inspect status, headers, or body in a meaningful way. That is why it is suitable for beacons, pixel-style requests, and other cases where the sender only needs to emit a request, not consume the result.

The opaque response is the security boundary. It prevents a cross-origin destination from becoming a readable data source unless the destination explicitly opts into sharing that data with the caller through the normal cross-origin controls.

Because No-CORS is often discussed alongside other web platform controls, the standards context at W3C is the right reference point for browser behaviour and fetch semantics.

Where No-CORS Is Commonly Used

Teams typically encounter No-CORS when they need a one-way browser request to a third-party endpoint, telemetry sink, or legacy service that cannot support a full cross-origin exchange. It is also seen in integrations where the browser is only acting as a transport path and the application does not need response handling.

That convenience comes with a design trade-off: if the application later depends on response content, No-CORS will not provide it. In other words, this mode can hide integration fragility during development if engineers assume a successful network send also means usable application data.

When teams are debugging cross-origin behaviour, the underlying browser model is usually more important than the fetch flag itself, which is why this topic belongs next to origin semantics, response visibility, and browser isolation rules.

Why No-CORS Is Easy to Misunderstand

No-CORS is sometimes mistaken for a way to bypass cross-origin restrictions. It does not do that. It narrows what the script can observe, so the page can trigger limited cross-origin traffic without turning the remote endpoint into a readable same-origin resource.

The practical mistake is to treat the request as if it were a normal API call. It is better understood as an intentionally blinded request path, where the browser enforces opacity so the application cannot rely on response semantics that it has not been granted.

That distinction is especially important in code reviews and security reviews, because a developer may see a successful network transaction and assume the browser also delivered trustworthy application data.

Risk and Threat Considerations

No-CORS can hide integration failures, weaken observability, and encourage unsafe assumptions about whether a cross-origin request really produced usable data. It is also easy to misuse in patterns that look functional in testing but fail when the application later needs verification, telemetry, or response-based decisions.

Failure mechanism: The browser allows the outbound request but returns an opaque response, so the caller cannot validate headers, body, or status in the way it would for a normal cross-origin exchange. That can mask logic errors and create false confidence in client-side workflows.

Impact: Applications may silently lose assurance about what was received, miss failed interactions, or build fragile integrations that only appear to work because the network send succeeded.

Standards & Framework Alignment

This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.

OWASP ASVS and NIST CSF 2.0 set the technical controls, while ISO/IEC 27001:2022 defines the regulatory obligations.

Framework Control / Reference Relevance
OWASP ASVS V12 — Secure Communication No-CORS is a browser communication mode with cross-origin response restrictions.
Recommendation — Verify cross-origin request handling and response visibility rules in client-server flows.
NIST CSF 2.0 PR.DS-01 — Data-at-rest is protected Cross-origin browser exchanges affect how data is exposed to scripts and users.
Recommendation — Define browser data exposure boundaries for web applications.
ISO/IEC 27001:2022 A.8.24 — Use of cryptography No-CORS sits within secure web communication and controlled exposure of response data.
Recommendation — Specify browser-facing communication controls that limit unintended data disclosure.

Practitioner Guidance

Common misunderstanding: Treat No-CORS as a transport-only pattern, not as a substitute for cross-origin access design. If the page needs to read response data, the endpoint must explicitly support the relevant browser sharing rules instead of relying on an opaque exchange.

What to watch for: Review uses of No-CORS whenever code appears to depend on response content, request confirmation, or cross-origin state changes. If the integration must be observable, testable, or authorization-sensitive, the browser mode should match that requirement rather than hiding it.