CORSuntuk REST APIs di API Gateway - APIGerbang Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

CORSuntuk REST APIs di API Gateway

Cross-origin resource sharing (CORS) adalah fitur keamanan browser yang membatasi HTTP permintaan lintas asal yang dimulai dari skrip yang berjalan di browser. Untuk informasi lebih lanjut, lihat Apa ituCORS? .

Menentukan apakah akan mengaktifkan CORS dukungan

HTTPPermintaan lintas asal adalah permintaan yang dibuat untuk:

  • Domain yang berbeda (misalnya, dari example.com keamazondomains.com)

  • Subdomain yang berbeda (misalnya, dari example.com kepetstore.example.com)

  • Port yang berbeda (misalnya, dari example.com keexample.com:10777)

  • Protokol yang berbeda (misalnya, dari https://example.com kehttp://example.com)

Jika Anda tidak dapat mengakses API dan menerima pesan kesalahan yang berisiCross-Origin Request Blocked, Anda mungkin perlu mengaktifkanCORS.

HTTPPermintaan lintas asal dapat dibagi menjadi dua jenis: permintaan sederhana dan permintaan non-sederhana.

Mengaktifkan CORS permintaan sederhana

HTTPPermintaan sederhana jika semua kondisi berikut benar:

  • Ini dikeluarkan terhadap API sumber daya yang hanya memungkinkanGET,HEAD, dan POST permintaan.

  • Jika itu adalah permintaan POST metode, itu harus menyertakan Origin header.

  • Jenis konten payload permintaan adalahtext/plain,multipart/form-data, atauapplication/x-www-form-urlencoded.

  • Permintaan tidak berisi header khusus.

  • Persyaratan tambahan apa pun yang tercantum dalam CORSdokumentasi Mozilla untuk permintaan sederhana.

Untuk permintaan POST metode lintas asal sederhana, respons dari sumber daya Anda harus menyertakan header Access-Control-Allow-Origin: '*' atauAccess-Control-Allow-Origin:'origin'.

Semua permintaan lintas asal lainnya adalah HTTP permintaan non-sederhana.

Mengaktifkan CORS permintaan yang tidak sederhana

Jika sumber API daya Anda menerima permintaan yang tidak sederhana, Anda harus mengaktifkan CORS dukungan tambahan tergantung pada jenis integrasi Anda.

Mengaktifkan integrasi CORS non-proxy

Untuk integrasi ini, CORSprotokol mengharuskan browser untuk mengirim permintaan preflight ke server dan menunggu persetujuan (atau permintaan kredensional) dari server sebelum mengirim permintaan yang sebenarnya. Anda harus mengkonfigurasi Anda API untuk mengirim respons yang sesuai untuk permintaan preflight.

Untuk membuat respons preflight:

  1. Buat OPTIONS metode dengan integrasi tiruan.

  2. Tambahkan header respons berikut ke respons metode 200:

    • Access-Control-Allow-Headers

    • Access-Control-Allow-Methods

    • Access-Control-Allow-Origin

  3. Atur perilaku passthrough integrasi keNEVER. Dalam hal ini, permintaan metode dari jenis konten yang tidak dipetakan akan ditolak dengan respons HTTP 415 Jenis Media Tidak Didukung. Untuk informasi selengkapnya, lihat Perilaku passthrough integrasi.

  4. Masukkan nilai untuk header respons. Untuk mengizinkan semua asal, semua metode, dan header umum, gunakan nilai header berikut:

    • Access-Control-Allow-Headers: 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'

    • Access-Control-Allow-Methods: '*'

    • Access-Control-Allow-Origin: '*'

Setelah membuat permintaan preflight, Anda harus mengembalikan Access-Control-Allow-Origin:'origin' header Access-Control-Allow-Origin: '*' or untuk semua metode CORS -enabled untuk setidaknya semua 200 tanggapan.

Mengaktifkan CORS integrasi non-proxy menggunakan AWS Management Console

Anda dapat menggunakan AWS Management Console untuk mengaktifkanCORS. APIGateway membuat OPTIONS metode dan menambahkan Access-Control-Allow-Origin header ke respons integrasi metode yang ada. Ini tidak selalu berhasil, dan terkadang Anda perlu memodifikasi respons integrasi secara manual untuk mengembalikan Access-Control-Allow-Origin header untuk semua metode CORS yang diaktifkan untuk setidaknya semua 200 respons.

Mengaktifkan CORS dukungan untuk integrasi proxy

Untuk integrasi proxy Lambda atau integrasi HTTP proxy, backend Anda bertanggung jawab untuk mengembalikanAccess-Control-Allow-Origin,Access-Control-Allow-Methods, dan Access-Control-Allow-Headers header, karena integrasi proxy tidak mengembalikan respons integrasi.

Contoh berikut fungsi Lambda mengembalikan header yang diperlukanCORS:

Node.js
export const handler = async (event) => { const response = { statusCode: 200, headers: { "Access-Control-Allow-Headers" : "Content-Type", "Access-Control-Allow-Origin": "https://www.example.com", "Access-Control-Allow-Methods": "OPTIONS,POST,GET" }, body: JSON.stringify('Hello from Lambda!'), }; return response; };
Python 3
import json def lambda_handler(event, context): return { 'statusCode': 200, 'headers': { 'Access-Control-Allow-Headers': 'Content-Type', 'Access-Control-Allow-Origin': 'https://www.example.com', 'Access-Control-Allow-Methods': 'OPTIONS,POST,GET' }, 'body': json.dumps('Hello from Lambda!') }