Penyelesaian masalah CORS - Amazon Simple Storage Service

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

Penyelesaian masalah CORS

Topik berikut dapat membantu Anda memecahkan masalah beberapa masalah CORS umum yang terkait dengan S3.

403 Kesalahan terlarang: CORS tidak diaktifkan untuk ember ini

403 ForbiddenKesalahan berikut terjadi saat permintaan lintas asal dikirim ke Amazon S3 tetapi CORS tidak dikonfigurasi pada bucket S3 Anda.

Kesalahan: HTTP/1.1 403 Respons CORS Terlarang: CORS tidak diaktifkan untuk bucket ini.

Konfigurasi CORS adalah dokumen atau kebijakan dengan aturan yang mengidentifikasi asal yang Anda izinkan untuk mengakses bucket, operasi (metode HTTP) yang akan Anda dukung untuk setiap asal, dan informasi spesifik operasi lainnya. Lihat cara mengonfigurasi CORS di S3 dengan menggunakan konsol Amazon S3 AWS SDKs, dan REST API. Untuk informasi lebih lanjut tentang CORS dan contoh konfigurasi CORS, lihat Elemen CORS.

403 Kesalahan terlarang: Permintaan CORS ini tidak diizinkan

403 ForbiddenKesalahan berikut diterima ketika aturan CORS dalam konfigurasi CORS Anda tidak cocok dengan data dalam permintaan Anda.

Kesalahan: HTTP/1.1 403 Tanggapan CORS Terlarang: Permintaan CORS ini tidak diizinkan.

Akibatnya, 403 Forbidden kesalahan ini dapat terjadi karena berbagai alasan:

  • Asal tidak diperbolehkan.

  • Metode tidak diperbolehkan.

  • Header yang diminta tidak diperbolehkan.

Untuk setiap permintaan yang diterima Amazon S3, Anda harus memiliki aturan CORS dalam konfigurasi CORS yang cocok dengan data dalam permintaan Anda.

Asal tidak diperbolehkan

OriginHeader dalam permintaan CORS ke bucket Anda harus cocok dengan asal AllowedOrigins elemen dalam konfigurasi CORS Anda. Karakter wildcard ("*") dalam AllowedOrigins elemen akan cocok dengan semua metode HTTP. Untuk informasi selengkapnya tentang cara memperbarui AllowedOrigins elemen, lihat Mengonfigurasi berbagi sumber daya lintas asal (CORS).

Misalnya, jika hanya http://www.example1.com domain yang disertakan dalam AllowedOrigins elemen, maka permintaan CORS yang dikirim dari http://www.example2.com domain akan menerima 403 Forbidden kesalahan.

Contoh berikut menunjukkan bagian dari konfigurasi CORS yang menyertakan http://www.example1.com domain dalam AllowedOrigins elemen.

"AllowedOrigins":[ "http://www.example1.com" ]

Agar permintaan CORS yang dikirim dari http://www.example2.com domain berhasil, http://www.example2.com domain harus disertakan dalam AllowedOrigins elemen konfigurasi CORS.

"AllowedOrigins":[ "http://www.example1.com" "http://www.example2.com" ]

Metode tidak diperbolehkan

Metode HTTP yang ditentukan dalam permintaan CORS ke bucket Anda harus cocok dengan metode atau metode yang tercantum dalam AllowedMethods elemen dalam konfigurasi CORS Anda. Access-Control-Request-Method Karakter wildcard ("*") di AllowedMethods akan cocok dengan semua metode HTTP. Untuk informasi selengkapnya tentang cara memperbarui AllowedOrigins elemen, lihat Mengonfigurasi berbagi sumber daya lintas asal (CORS).

Dalam konfigurasi CORS, Anda dapat menentukan metode berikut dalam AllowedMethods elemen:

  • GET

  • PUT

  • POST

  • DELETE

  • HEAD

Contoh berikut menunjukkan bagian dari konfigurasi CORS yang mencakup GET metode dalam AllowedMethods elemen. Hanya permintaan termasuk GET metode yang akan berhasil.

"AllowedMethods":[ "GET" ]

Jika metode HTTP (misalnya,PUT) digunakan dalam permintaan CORS atau disertakan dalam permintaan CORS pra-penerbangan ke bucket Anda tetapi metode tersebut tidak ada dalam konfigurasi CORS Anda, permintaan tersebut akan menghasilkan kesalahan. 403 Forbidden Untuk mengizinkan permintaan CORS atau permintaan pra-penerbangan CORS ini, PUT metode harus ditambahkan ke konfigurasi CORS Anda.

"AllowedMethods":[ "GET" "PUT" ]

Header yang diminta tidak diperbolehkan

Header yang tercantum di Access-Control-Request-Headers header dalam permintaan pra-penerbangan harus cocok dengan header dalam AllowedHeaders elemen dalam konfigurasi CORS Anda. Untuk daftar header umum yang dapat digunakan dalam permintaan ke Amazon S3, lihat Header Permintaan Umum. Untuk informasi selengkapnya tentang cara memperbarui AllowedHeaders elemen, lihat Mengonfigurasi berbagi sumber daya lintas asal (CORS).

Contoh berikut menunjukkan bagian dari konfigurasi CORS yang menyertakan Authorization header dalam AllowedHeaders elemen. Hanya permintaan untuk Authorization header yang akan berhasil.

"AllowedHeaders": [ "Authorization" ]

Jika header (misalnya Content-MD5 disertakan dalam permintaan CORS tetapi header tidak ada dalam konfigurasi CORS Anda, permintaan tersebut akan menghasilkan kesalahan. 403 Forbidden Untuk mengizinkan permintaan CORS ini, Content-MD5 header harus ditambahkan ke konfigurasi CORS Anda. Jika Anda ingin meneruskan keduanya Authorization dan Content-MD5 header dalam permintaan CORS ke bucket Anda, konfirmasikan bahwa kedua header disertakan dalam AllowedHeaders elemen dalam konfigurasi CORS Anda.

"AllowedHeaders": [ "Authorization" "Content-MD5" ]

Header tidak ditemukan dalam respons CORS

ExposeHeadersElemen dalam konfigurasi CORS Anda mengidentifikasi header respons mana yang ingin Anda akses ke skrip dan aplikasi yang berjalan di browser, sebagai tanggapan atas permintaan CORS.

Jika objek yang disimpan di bucket S3 memiliki metadata yang ditentukan pengguna (misalnya,x-amz-meta-custom-header) beserta data respons, header kustom ini dapat berisi metadata atau informasi tambahan yang ingin diakses dari kode sisi klien. JavaScript Namun, secara default, browser memblokir akses ke header khusus untuk alasan keamanan. Untuk memungkinkan sisi klien Anda JavaScript mengakses header khusus, Anda harus menyertakan header dalam konfigurasi CORS Anda.

Pada contoh di bawah ini, x-amz-meta-custom-header1 header disertakan dalam ExposeHeaders elemen. x-amz-meta-custom-header2Tidak termasuk dalam ExposeHeaders elemen dan hilang dari konfigurasi CORS. Sebagai tanggapan, hanya nilai yang termasuk dalam ExposeHeaders elemen yang akan dikembalikan. Jika permintaan menyertakan x-amz-meta-custom-header2 header di Access-Control-Expose-Headers header, respons akan tetap mengembalikan a200 OK. Namun, hanya header yang diizinkan, Misalnya x-amz-meta-custom-header akan dikembalikan dan ditampilkan dalam respons.

"ExposeHeaders": [ "x-amz-meta-custom-header1" ]

Untuk memastikan semua header muncul dalam respons, tambahkan semua header yang diizinkan ke ExposeHeaders elemen dalam konfigurasi CORS Anda seperti yang ditunjukkan di bawah ini.

"ExposeHeaders": [ "x-amz-meta-custom-header1", "x-amz-meta-custom-header2" ]

Pertimbangan CORS pada integrasi proxy S3

Jika Anda mengalami kesalahan dan telah memeriksa konfigurasi CORS di bucket S3 Anda, dan permintaan lintas asal dikirim ke proxy seperti AWS CloudFront, coba yang berikut ini:

  • Konfigurasikan pengaturan untuk memungkinkan OPTIONS metode untuk permintaan HTTP.

  • Konfigurasikan proxy untuk meneruskan header berikut:Origin,Access-Control-Request-Headers, danAccess-Control-Request-Method.

  • Konfigurasikan pengaturan proxy untuk memasukkan header asal dalam kunci cache-nya. Ini penting karena proxy caching yang tidak menyertakan header asal dalam kunci cache mereka dapat menyajikan respons cache yang tidak menyertakan header CORS yang sesuai untuk asal yang berbeda.

Beberapa proxy menyediakan fitur yang telah ditentukan sebelumnya untuk permintaan CORS. Misalnya, di CloudFront, Anda dapat mengonfigurasi kebijakan yang menyertakan header

yang mengaktifkan permintaan berbagi sumber daya lintas asal (CORS) saat asalnya adalah bucket Amazon S3.

Kebijakan ini memiliki pengaturan berikut:

  • Header yang disertakan dalam permintaan asal:

    Origin

    Access-Control-Request-Headers

    Access-Control-Request-Method

  • Cookie yang disertakan dalam permintaan asal: Tidak ada

  • String kueri yang disertakan dalam permintaan asal: Tidak ada

Untuk informasi selengkapnya, lihat Mengontrol permintaan asal dengan kebijakan dan Menggunakan kebijakan permintaan asal terkelola di Panduan CloudFront Pengembang.