API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) · Pelajaran

Berbagi Sumber Daya Lintas Asal (CORS)

Terapkan kebijakan CORS pada Nginx untuk mengaktifkan permintaan lintas domain yang aman bagi API Anda.

Pelajaran 2 dari 412 langkah

Berbagi Sumber Daya Lintas Asal (CORS) adalah pelajaran API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway), dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

What is CORS?

Imagine you're building a web application. Your frontend (like a React app) runs on app.example.com, but it needs to fetch data from your API running on api.example.com.

This is where Cross-Origin Resource Sharing (CORS) comes in. It's a security feature implemented by web browsers to control how web pages from one origin can request resources from another origin.

The Same-Origin Policy

CORS is a relaxation of the browser's Same-Origin Policy. This policy is a critical security mechanism that prevents a malicious website from reading sensitive data from another site.

  • Origin is defined by the protocol, host, and port.
  • https://app.example.com:443 is different from http://app.example.com:80 or https://api.example.com:443.

Without CORS, browsers would block your frontend from talking to your API because they have different origins.

How CORS Works

When your browser detects a cross-origin request, it adds an Origin header to the request. The server then needs to respond with specific CORS headers to tell the browser it's allowed.

The most important header is Access-Control-Allow-Origin. If this header is present in the server's response and its value matches the client's origin (or is *), the browser allows the request.

Simple vs. Preflight Requests

CORS requests can be categorized into two types:

  • Simple Requests: These are direct GET, HEAD, or POST requests with specific content types (like text/plain). The browser sends them immediately, expecting CORS headers in the response.
  • Preflight Requests: For more complex requests (e.g., PUT, DELETE, custom headers, or specific content types), the browser first sends an OPTIONS request. This 'preflight' checks with the server if the actual request is safe to send.

Nginx for CORS Headers

Since Nginx often acts as a reverse proxy or API gateway, it's the perfect place to manage CORS headers for your backend services. We can use Nginx directives to add the necessary Access-Control-* headers to responses.

The primary directive for this is add_header, which allows us to inject custom HTTP headers into Nginx responses.

Configuring Allow-Origin

Let's configure Nginx to allow requests from a specific origin, https://app.example.com, to your API.

We'll add the Access-Control-Allow-Origin header within a location block that handles your API requests.

server {
  listen 80;
  server_name api.example.com;

  location /api/ {
    add_header 'Access-Control-Allow-Origin' 'https://app.example.com';
    proxy_pass http://backend_api_service;
  }
}

Handling Multiple Origins

What if you have multiple frontends that need to access your API? You can't list multiple origins in Access-Control-Allow-Origin directly. Instead, you can use Nginx's map directive to dynamically set the header based on the incoming Origin header.

http {
  map $http_origin $cors_origin {
    default "";
    "https://app.example.com" "https://app.example.com";
    "https://dev.example.com" "https://dev.example.com";
  }

  server {
    listen 80;
    server_name api.example.com;

    location /api/ {
      if ($cors_origin ~ ".") {
        add_header 'Access-Control-Allow-Origin' $cors_origin;
      }
      proxy_pass http://backend_api_service;
    }
  }
}

Configuring Preflight Requests

For preflight (OPTIONS) requests, the browser expects specific headers in response to its OPTIONS call. Nginx needs to intercept these requests and respond with the appropriate CORS headers, often without proxying to the backend.

server {
  listen 80;
  server_name api.example.com;

  location /api/ {
    # Handle preflight OPTIONS requests
    if ($request_method = 'OPTIONS') {
      add_header 'Access-Control-Allow-Origin' 'https://app.example.com';
      add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
      add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
      add_header 'Access-Control-Max-Age' 1728000;
      add_header 'Content-Type' 'text/plain charset=UTF-8';
      add_header 'Content-Length' 0;
      return 204;
    }

    # For actual requests
    add_header 'Access-Control-Allow-Origin' 'https://app.example.com';
    proxy_pass http://backend_api_service;
  }
}

Essential CORS Headers

Beyond Access-Control-Allow-Origin, these headers are crucial for full CORS support:

  • Access-Control-Allow-Methods: Specifies allowed HTTP methods (e.g., GET, POST, PUT).
  • Access-Control-Allow-Headers: Lists headers the client is allowed to send (e.g., Content-Type, Authorization).
  • Access-Control-Allow-Credentials: Set to true if the client can send cookies or HTTP authentication.
  • Access-Control-Max-Age: How long the preflight response can be cached by the browser (in seconds).

Comprehensive CORS Setup

Here's a more complete Nginx configuration snippet that handles both simple and preflight CORS requests, allowing a specific origin to interact with your API, including sending credentials.

server {
  listen 80;
  server_name api.example.com;

  location /api/ {
    set $cors_origin "https://app.example.com"; # Or use map directive

    if ($request_method = 'OPTIONS') {
      add_header 'Access-Control-Allow-Origin' "$cors_origin";
      add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
      add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';
      add_header 'Access-Control-Allow-Credentials' 'true';
      add_header 'Access-Control-Max-Age' 1728000;
      add_header 'Content-Type' 'text/plain charset=UTF-8';
      add_header 'Content-Length' 0;
      return 204;
    }

    add_header 'Access-Control-Allow-Origin' "$cors_origin";
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';

    proxy_pass http://backend_api_service;
  }
}

CORS Header Check

Which of the following headers are essential for Nginx to respond correctly to a CORS preflight (OPTIONS) request?

Recap: Nginx CORS

In this lesson, you learned about Cross-Origin Resource Sharing (CORS) and why it's vital for secure web applications. We covered:

  • The Same-Origin Policy and why CORS exists.
  • The difference between simple and preflight requests.
  • How to configure Nginx using add_header and map directives to manage CORS.
  • Key CORS headers like Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers, and Access-Control-Max-Age.

Properly configuring CORS in Nginx ensures your frontend applications can securely communicate with your backend APIs across different domains.

Gratis untuk memulai

Belajar API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
12
Pelajaran
48

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Berbagi Sumber Daya Lintas Asal (CORS)” gratis?

Ya — teks lengkap “Berbagi Sumber Daya Lintas Asal (CORS)” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway), upgrade ke CoddyKit PRO. Kursus API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Berbagi Sumber Daya Lintas Asal (CORS)”?

Terapkan kebijakan CORS pada Nginx untuk mengaktifkan permintaan lintas domain yang aman bagi API Anda. Kamu berlatih API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway)?

Tidak diperlukan pengalaman sebelumnya. API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Berbagi Sumber Daya Lintas Asal (CORS)” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) ini?

Ya. Setiap pelajaran API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pembuatan Versi API dengan Nginx
  2. Berbagi Sumber Daya Lintas Asal (CORS)
  3. Pembatasan Laju dan Pengendalian Arus dengan Nginx
  4. Perutean Berbasis Jalur ke Layanan Mikro
← Kembali ke API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway)