🖍️
Developer Note
  • Welcome
  • Git
    • Eslint & Prettier & Stylelint & Husky
  • Programming Language
    • JavaScript
      • Script Async vs Defer
      • Module
      • Const VS Let VS Var
      • Promise
      • Event Loop
      • Execution Context
      • Hoisting
      • Closure
      • Event Buddling and Capturing
      • Garbage Collection
      • This
      • Routing
      • Debounce and Throttle
      • Web Component
      • Iterator
      • Syntax
      • String
      • Array
      • Object
      • Proxy & Reflect
      • ProtoType
      • Class
      • Immutability
      • Typeof & Instanceof
      • Npm (Node package manager)
    • TypeScript
      • Utility Type
      • Type vs Interface
      • Any vs Unknown vs Never
      • Void and undefined
      • Strict Mode
      • Namespace
      • Enum
      • Module
      • Generic
    • Python
      • Local Development
      • Uv
      • Asyncio & Event loop
      • Context Manager
      • Iterator & Generator
      • Fast API
      • Pydantic & Data Class
    • Java
      • Compilation and Execution
      • Data Type
      • Enumeration
      • Data Structure
      • Try Catch
      • InputStream and OutputStream
      • Concurrent
      • Unicode Block
      • Build Tools
      • Servlet
      • Java 8
  • Coding Pattern
    • MVC vs MVVM
    • OOP vs Functional
    • Error Handling
    • MVC vs Flux
    • Imperative vs Declarative
    • Design Pattern
  • Web Communication
    • REST API
      • Web Hook
      • CORS issue
    • HTTPS
    • GraphQL
      • REST API vs GraphQL
      • Implementation (NodeJS + React)
    • Server-Sent Event
    • Web Socket
    • IP
    • Domain Name System (DNS)
  • Frontend
    • Progressive Web App (PWA)
    • Single Page & Multiple Page Application
    • Search Engine Optimiaztion (SEO)
    • Web bundling & Micro-frontend
      • Webpack
        • Using Webpack to build React Application
        • Using Webpack to build react library
      • Vite
      • Using rollup to build react library
      • Implementing micro frontend
    • Web Security
      • CSRF & Nonce
      • XSS
      • Click hijacking
    • Cypress
    • CSS
      • Core
        • Box Model
        • Inline vs Block
        • Flexbox & Grid
        • Pseudo Class
        • Position
      • Tailwind CSS
        • Shadcn
      • CSS In JS
        • Material UI
    • React
      • Core
        • Component Pattern
        • React Lazy & Suspense
        • React Portal
        • Error Boundary
        • Rendering Methods
        • Environment Variable
        • Conditional CSS
        • Memo
        • Forward Reference
        • High Order Component (HOC) & Custom Hook
        • TypeScript
      • State Management
        • Redux
        • Recoil
        • Zustand
      • Routing
        • React Router Dom
      • Data Fetching
        • Axios & Hook
        • React Query
        • Orval
      • Table
        • React Table
      • Form & Validation
        • React Hook Form
        • Zod
      • NextJS
        • Page Router
        • App Router
      • React Native
    • Angular
    • Svelte
      • Svelte Kit
  • Backend
    • Cache
      • Browser Cache
      • Web Browser Storage
      • Proxy
      • Redis
    • Rate limit
    • Monitoring
      • Logging
      • Distributed Tracing
    • Load Test
    • Encryption
    • Authentication
      • Password Protection
      • Cookie & Session
      • JSON Web Token
      • SSO
        • OAuth 2.0
        • OpenID Connect (OIDC)
        • SAML
    • Payment
      • Pre-built
      • Custom
    • File Handling
      • Upload & Download (Front-end)
      • Stream & Buffer
    • Microservice
      • API Gateway
      • Service Discovery
      • Load Balancer
      • Circuit Breaker
      • Message Broker
      • BulkHead & Zipkin
    • Elastic Search
    • Database
      • SQL
        • Group By vs Distinct
        • Index
        • N + 1 problem
        • Normalization
        • Foreign Key
        • Relationship
        • Union & Join
        • User Defined Type
      • NOSQL (MongoDB)
      • Transaction
      • Sharding
      • Lock (Concurrency Control)
    • NodeJS
      • NodeJS vs Java Spring
      • ExpressJS
      • NestJS
        • Swagger
        • Class Validator & Validation Pipe
        • Passport (Authentication)
      • Path Module
      • Database Connection
        • Integrating with MYSQL
        • Sequalize
        • Integrating with MongoDB
        • Prisma
        • MikroORM
        • Mongoose
      • Streaming
      • Worker Thread
      • Passport JS
      • JSON Web Token
      • Socket IO
      • Bull MQ
      • Pino (Logging)
      • Yeoman
    • Spring
      • Spring MVC
      • Spring REST
      • Spring Actuator
      • Aspect Oriented Programming (AOP)
      • Controller Advice
      • Filter
      • Interceptor
      • Concurrent
      • Spring Security
      • Spring Boot
      • Spring Cloud
        • Resilience 4j
      • Quartz vs Spring Batch
      • JPA and Hibernate
      • HATEOS
      • Swagger
      • Unit Test (Java Spring)
      • Unit Test (Spring boot)
  • DevOp
    • Docker
    • Kubernetes
      • Helm
    • Nginx
    • File System
    • Cloud
      • AWS
        • EC2 (Virtual Machine)
        • Network
        • IAM
          • Role-Service Binding
        • Database
        • Route 53
        • S3
        • Message Queue
        • Application Service
        • Serverless Framework
        • Data Analysis
        • Machine Learning
        • Monitoring
        • Security
      • Azure
        • Identity
        • Compute Resource
        • Networking
        • Storage
        • Monitoring
      • Google Cloud
        • IAM
          • Workload Identity Federation
        • Compute Engine
        • VPC Network
        • Storage
        • Kubernetes Engine
        • App Engine
        • Cloud function
        • Cloud Run
        • Infra as Code
        • Pub/Sub
    • Deployment Strategy
    • Jenkins
    • Examples
      • Deploy NextJS on GCP
      • Deploy Spring on Azure
      • Deploy React on Azure
  • Domain Knowledge
    • Web 3
      • Blockchain
      • Cryptocurrency
    • AI
      • Prompt
      • Chain & Agent
      • LangChain
      • Chunking
      • Search
      • Side Products
Powered by GitBook
On this page
  • Introduction
  • Pre flight
  • Overview
  • Simple Request
  • CORS Response Header
  • Access-Control-Allow-Origin
  • Access-Control-Allow-Methods
  • Access-Control-Allow-Headers
  • Access-Control-Expose-Headers
  • Access-Control-Allow-Credentials
  • Access-Control-Max-Age
  • Solutions
  • Access-Control-Allow-Origin
  • Proxy Server
  • Reference

Was this helpful?

  1. Web Communication
  2. REST API

CORS issue

PreviousWeb HookNextHTTPS

Last updated 6 months ago

Was this helpful?

Introduction

  • For security reason, the browser is implementing same-origin policy behind the scene

  • The browser will compare the origin of the request header with Access-Control-Allow-Origin with the response header to see whether it is matched

  • If not, CORS Error will occur to indicate this domain is not allowed to access server data

Pre flight

Overview

  • The request other than simple request will send the preflight request to see if the CORS protocol is understood and a server is aware using specific methods and headers.

  • It is an request, using two or three HTTP request headers: , , and optionally

Simple Request

Here is the conditions of simple request, all conditions must be met:

  1. HTTP Methods: The request must use an HTTP method that is considered safe, which includes GET, HEAD, and POST.

  2. Custom Headers: The request can only include a limited set of headers that are considered simple headers. Simple headers include common headers like Accept, Accept-Language, Content-Language, and a few others. Custom headers that are not part of the simple headers list will trigger a preflight request.

  3. Content-Type: If the request includes an Content-Type header, it must have one of the following values: application/x-www-form-urlencoded, multipart/form-data, or text/plain.

  4. No Readable Stream: The request body must not contain a readable stream. It should only be in a format that can be easily serialized, such as a string or a form data object.

CORS Response Header

Access-Control-Allow-Origin

  • This header is included in the response from the server to indicate which origins are allowed to access the requested resource. It specifies a single origin or uses the wildcard "*" to allow access from any origin.

Access-Control-Allow-Methods

  • This header specifies the HTTP methods that are allowed when making cross-origin requests. It lists the methods that the server supports for the requested resource.

Access-Control-Allow-Headers

  • This is used in response to a preflight request. It lists the headers that the server supports for the requested resource.

Access-Control-Expose-Headers

  • This header lists the headers that are exposed and can be accessed by the client in the response. By default, only a few headers are accessible in JavaScript, but this header allows additional headers to be exposed.

Access-Control-Allow-Credentials

  • This header indicates whether the request can include credentials (such as cookies, HTTP authentication, or client-side SSL certificates) when making a cross-origin request. It can have a value of "true" to allow credentials or "false" to disallow them.

  • Access-Control-Allow-Origin cannot be set *if it is needed to set true

Access-Control-Max-Age

  • This header specifies the maximum time, in seconds, that the preflight response (OPTIONS request) can be cached by the browser. Caching the preflight response can reduce the number of preflight requests sent to the server.

Solutions

Access-Control-Allow-Origin

  • Whitelist the domain the name by adding Access-Control-Allow-Origin

app.use(
  cors({
    origin: "*",
    methods: ["GET", "POST"],
    allowedHeaders: "Content-Type, Authorization, X-Requested-With",
  })
);

Proxy Server

  • Set up proxy server which is widely opened for domains

  • Then, Make a call to the resource server

  • Doing server-server communication instead of browser-server communication

  • https://cors-anywhere.herokuapp.com is one of the example

Reference

OPTIONS
Access-Control-Request-Method
Origin
Access-Control-Request-Headers
Logo3 Ways to Fix the CORS Error — and How Access-Control-Allow-Origin worksMedium