Kode Status 406 Not Acceptable: Penyebab dan Cara Mengatasi

INEZA Felin-Michel

INEZA Felin-Michel

30 September 2025

Kode Status 406 Not Acceptable: Penyebab dan Cara Mengatasi

Dalam kosakata kaya kode status HTTP, beberapa kode lebih menonjol daripada yang lain, sementara beberapa lainnya secara diam-diam menjalankan peran penting dalam memastikan komunikasi klien-server yang lancar. Kode status 406 Not Acceptable adalah salah satu pahlawan yang kurang dikenal tersebut. Mungkin tidak muncul sesering 404 atau 500 yang populer, tetapi memahami tujuannya dapat secara dramatis meningkatkan pemahaman Anda tentang negosiasi konten dan meningkatkan fleksibilitas aplikasi web dan API Anda.

Kode status 406 Not Acceptable dapat terasa seperti pesan samar dari server Anda. Tetapi begitu Anda memahami artinya, itu menjadi sinyal kuat yang membantu Anda merancang API yang lebih bersih, lebih dapat diprediksi, dan lebih ramah pengguna.

Kode status ini merepresentasikan kegagalan komunikasi dalam proses negosiasi konten yang canggih, di mana klien dan server menyepakati format terbaik untuk pertukaran data.

Dalam postingan blog ini, kita akan menyelami lebih dalam apa arti HTTP 406 Not Acceptable, mengapa itu terjadi, bagaimana negosiasi konten memengaruhinya, dan bagaimana Anda, sebagai pengembang atau konsumen API, dapat menanganinya secara efektif. Debugging kesalahan aneh seperti 406 Not Acceptable bisa memakan waktu tanpa alat yang tepat. Itulah mengapa saya merekomendasikan Apidog. Ini adalah platform API all-in-one gratis yang memungkinkan Anda merancang, membuat mock, menguji, mendebug, dan mendokumentasikan API dengan mudah sehingga Anda akan tahu persis mengapa Anda mendapatkan 406 dan cara memperbaikinya dengan cepat.

💡
Jika Anda ingin menjelajahi dan menguji API dengan mulus termasuk respons dengan status 406, unduh Apidog secara gratis. Apidog adalah alat pengujian dan dokumentasi API penting yang membuat investigasi kode status HTTP seperti 406 menjadi mudah dan efektif.
button

Sekarang, mari kita jelajahi dunia negosiasi konten dan kode status HTTP 406 Not Acceptable.

Masalahnya: Setiap Orang Menginginkan Data dengan Cara Mereka Sendiri

Di masa-masa awal web, server biasanya menawarkan satu format untuk sumber daya mereka, biasanya HTML. Tetapi seiring perkembangan web, klien yang berbeda muncul dengan kebutuhan yang berbeda:

Kode status 406 ada karena terkadang klien meminta format yang tidak dapat disediakan oleh server untuk sumber daya tertentu.

Apa Sebenarnya Arti HTTP 406 Not Acceptable?

Kode status 406 Not Acceptable menunjukkan bahwa server tidak dapat menghasilkan respons yang cocok dengan daftar nilai yang dapat diterima yang ditentukan dalam header negosiasi konten proaktif permintaan, dan bahwa server tidak bersedia menyediakan representasi default.

Secara lebih sederhana: "Anda telah memberi tahu saya format apa saja yang akan Anda terima, dan saya tidak dapat menyediakan sumber daya dalam salah satu format tersebut."

Respons 406 yang tepat harus menyertakan informasi tentang format apa yang dapat disediakan server untuk sumber daya yang diminta. Ini biasanya dilakukan dengan header atau di badan respons.

Berikut adalah tampilan respons 406:

HTTP/1.1 406 Not AcceptableContent-Type: text/htmlVary: Accept
<html><head><title>406 Not Acceptable</title></head><body><h1>Not Acceptable</h1><p>Sumber daya ini tersedia dalam format berikut:</p><ul><li>application/json</li><li>application/xml</li></ul></body></html>

Untuk API, lebih membantu untuk mengembalikan respons terstruktur:

HTTP/1.1 406 Not AcceptableContent-Type: application/jsonVary: Accept
{
  "error": "not_acceptable",
  "message": "Sumber daya yang diminta tidak tersedia dalam format yang diminta.",
  "available_formats": [
    "application/json",
    "application/xml"
  ]
}

Ini bukan tentang apakah permintaan itu valid. Ini tentang apakah jenis responsnya dapat diterima.

Keajaiban Negosiasi Konten: Cara Kerja Header Accept

Untuk memahami 406, kita perlu memahami bagaimana klien memberi tahu server format apa yang mereka sukai. Ini terjadi melalui header Accept.

Header Accept dalam Tindakan

Ketika klien membuat permintaan, ia dapat menentukan jenis konten apa yang dapat ditanganinya dan mana yang disukainya:

Contoh sederhana:

GET /api/users/123 HTTP/1.1Accept: application/json

Ini mengatakan: "Saya ingin data pengguna, dan saya hanya mengerti JSON."

Contoh yang lebih canggih:

GET /api/users/123 HTTP/1.1Accept: application/json, text/html;q=0.9, application/xml;q=0.8

Ini mengatakan: "Saya lebih suka JSON, tetapi saya juga dapat menangani HTML (dengan preferensi 90%) dan XML (dengan preferensi 80%)."

Parameter q (nilai kualitas) berkisar dari 0 hingga 1, dengan 1 menjadi yang paling disukai.

Ketika Negosiasi Gagal

Kesalahan 406 terjadi ketika server melihat header Accept dan menyadari:

  1. Ia memiliki sumber daya yang diinginkan klien
  2. Ia tidak dapat menyediakannya dalam format apa pun yang ditentukan klien
  3. Ia tidak bersedia mengirim format default (seperti mengirim JSON ke klien yang hanya menerima XML)

Bagaimana 406 Not Acceptable Cocok dalam Negosiasi Konten?

Ketika klien mengirim permintaan HTTP termasuk header Accept yang menentukan jenis media yang dapat diterima (misalnya, hanya meminta respons JSON), server akan mencoba mengirimkan konten sesuai dengan itu.

Jika server tidak dapat menyediakan konten yang dapat diterima yang sesuai dengan kriteria, ia merespons dengan:

textHTTP/1.1 406 Not Acceptable Content-Type: text/html

Pada titik ini, itu berarti server menolak permintaan karena tidak ada representasi konten yang tersedia yang cocok dengan preferensi klien.

Mengapa Server Mengembalikan 406 Daripada 200 OK

Anda mungkin berpikir: mengapa tidak mengembalikan sesuatu saja, meskipun itu bukan format yang disukai?

Inilah mengapa server mengembalikan 406:

Penyebab Umum Respons 406

Berikut adalah beberapa alasan umum Anda akan melihat 406 Not Acceptable:

Skenario Dunia Nyata yang Memicu Kesalahan 406

1. Konflik Pembuatan Versi API

Bayangkan sebuah API yang hanya menyajikan JSON di v2-nya, tetapi klien masih mengharapkan XML dari v1:

GET /v2/products/456 HTTP/1.1Accept: application/xmlHTTP/1.1 406 Not AcceptableContent-Type: application/json
{
  "error": "Versi API ini hanya mendukung JSON",
  "available_formats": ["application/json"]
}

2. Konfigurasi Klien yang Terlalu Restriktif

Aplikasi seluler mungkin dikodekan secara keras untuk hanya menerima JSON, tetapi menemukan server yang hanya menyajikan sumber daya tertentu sebagai XML:

GET /reports/quarterly-sales HTTP/1.1Accept: application/jsonHTTP/1.1 406 Not Acceptable

(Laporan mungkin hanya tersedia sebagai CSV atau PDF)

3. Kegagalan Default yang Hilang

Beberapa server dikonfigurasi untuk ketat tentang negosiasi konten dan menolak untuk menebak format apa yang akan dikembalikan ketika negosiasi gagal.

Bagaimana Server Biasanya Menangani 406?

Menariknya, beberapa server mengabaikan negosiasi konten yang ketat dan kembali ke respons default daripada merespons dengan 406.

Namun, API RESTful yang ketat atau layanan yang menekankan komunikasi yang tepat mungkin mengembalikan 406 ketika persyaratan klien tidak dapat dipenuhi.

406 Not Acceptable vs Kode Status Terkait

Untuk mengklarifikasi peran 406, mari kita lihat status HTTP terkait:

Kode Status Arti Kapan Digunakan
400 Bad Request Sintaks yang salah atau permintaan tidak valid Permintaan tidak dapat dipahami
406 Not Acceptable Permintaan valid tetapi server tidak dapat memenuhi header accept Kegagalan negosiasi konten
415 Unsupported Media Type Server tidak dapat memproses jenis konten yang dikirimkan oleh klien Jenis media badan permintaan tidak valid
Perbedaan 406 vs 415 406 berkaitan dengan jenis respons, 415 berkaitan dengan jenis badan permintaan

Bagaimana Klien Seharusnya Menangani Respons 406?

Klien yang menerima 406 harus:

Apa yang Dapat Dilakukan Pengembang untuk Menghindari atau Menangani 406?

Halaman dan Pesan Kesalahan 406 Kustom

Untuk situs web dan API, menyajikan respons kesalahan 406 yang bermakna dan membantu meningkatkan pengalaman pengembang dan pengguna:

Menguji Negosiasi Konten dengan Apidog

Menguji bagaimana API Anda menangani header Accept yang berbeda sangat penting untuk membangun aplikasi yang kuat. Apidog membuat proses ini mudah dan efisien.

Dengan Apidog, Anda dapat:

  1. Memodifikasi Header dengan Mudah: Dengan cepat menambahkan dan memodifikasi header Accept untuk menguji bagaimana server Anda merespons permintaan jenis konten yang berbeda.
  2. Menguji Berbagai Format: Membuat koleksi tes untuk endpoint yang sama dengan header Accept yang berbeda (JSON, XML, HTML) untuk memastikan cakupan yang komprehensif.
  3. Memvalidasi Respons 406: Dengan sengaja mengirim header Accept yang restriktif untuk memverifikasi bahwa server Anda mengembalikan respons 406 yang tepat dengan informasi kesalahan yang membantu.
  4. Mengotomatiskan Tes Negosiasi Konten: Membuat rangkaian tes yang secara otomatis memverifikasi API Anda menangani berbagai permintaan jenis konten dengan benar dan mengembalikan kode status yang sesuai.
  5. Mendebug Skenario Kompleks: Menggunakan pencatatan terperinci Apidog untuk memahami dengan tepat mengapa kesalahan 406 terjadi dan format apa yang sebenarnya didukung server.
button

Pendekatan sistematis ini memastikan API Anda dapat menangani klien dengan persyaratan format yang berbeda dengan anggun. Singkatnya: alih-alih meraba-raba dalam kegelapan, Anda tahu persis apa yang dapat diterima. Unduh Apidog secara gratis dan tingkatkan produktivitas Anda dalam memecahkan masalah negosiasi konten dan skenario 406.

Praktik Terbaik untuk Menangani Kesalahan 406

Untuk Pengembang Server:

  1. Sediakan Informasi Kesalahan yang Membantu: Saat mengembalikan 406, selalu sertakan informasi tentang format apa yang Anda dukung. Ini membantu pengembang klien memperbaiki permintaan mereka.
  2. Gunakan Header Vary: Sertakan header Vary: Accept dalam respons Anda untuk menunjukkan bahwa konten respons bervariasi berdasarkan nilai header Accept. Ini membantu sistem caching bekerja dengan benar.
  3. Pertimbangkan Perilaku Default: Meskipun spesifikasi HTTP memungkinkan server untuk mengembalikan representasi default, banyak API modern memilih untuk ketat dan mengembalikan 406 untuk memaksa klien untuk eksplisit tentang persyaratan mereka.
  4. Dokumentasikan Format yang Didukung: Dokumentasikan dengan jelas jenis konten apa yang didukung API Anda untuk setiap endpoint.

Untuk Pengembang Klien:

  1. Bersikap Fleksibel dalam Header Accept: Kecuali Anda memiliki alasan khusus, sertakan beberapa format dalam header Accept Anda dengan nilai kualitas yang sesuai.
  2. Tangani 406 dengan Anggun: Ketika Anda menerima 406, periksa respons untuk format yang tersedia dan sesuaikan permintaan Anda atau tampilkan pesan kesalahan yang membantu kepada pengguna.
  3. Miliki Logika Fallback: Pertimbangkan untuk memiliki logika fallback yang dapat menangani format yang berbeda jika format pilihan utama Anda tidak tersedia.

Pahlawan Tak Terlihat dalam Negosiasi Konten

Header Vary sangat penting untuk perilaku caching yang tepat ketika negosiasi konten terlibat. Ketika server menyertakan Vary: Accept dalam responsnya, itu memberi tahu cache bahwa konten respons bergantung pada nilai header Accept.

Ini mencegah cache secara tidak benar menyajikan respons JSON kepada klien yang meminta XML, atau sebaliknya.

Dampak Respons 406 pada SEO

Secara umum, 406 tidak terlalu memengaruhi SEO karena mesin pencari biasanya menangani negosiasi konten dengan kuat dan lebih menyukai respons yang valid. Namun, API atau situs web yang salah konfigurasi yang sering mengembalikan 406 dapat membuat perayap atau pengguna frustrasi.

Desain API Modern dan 406

Dalam desain API RESTful modern, penggunaan 406 telah berkembang:

Namun, 406 tetap relevan untuk:

Memecahkan Masalah Kesalahan 406

Pertimbangan Keamanan Sekitar 406

Kesimpulan: Merangkul HTTP 406 Not Acceptable untuk Komunikasi yang Tepat

Kode status HTTP 406 Not Acceptable merepresentasikan prinsip penting arsitektur web: komunikasi yang jelas antara klien dan server tentang kemampuan dan persyaratan mereka. Ini bukan kesalahan yang harus ditakuti, tetapi mekanisme untuk memastikan bahwa pertukaran data terjadi dalam format yang saling dimengerti.

Meskipun Anda mungkin tidak menemukan 406 setiap hari, memahaminya membuat Anda menjadi warga web yang lebih baik. Ini mengajarkan pentingnya menjadi eksplisit tentang persyaratan format data dan menangani negosiasi format dengan anggun.

Untuk pengembang API, implementasi negosiasi konten dan respons 406 yang tepat mengarah pada API yang lebih kuat dan fleksibel. Untuk pengembang klien, memahami cara bekerja dengan kesalahan 406 memastikan aplikasi Anda dapat beradaptasi dengan kemampuan server yang berbeda.

Di dunia di mana data perlu mengalir di antara berbagai sistem dan platform, kemampuan untuk menegosiasikan format konten lebih berharga dari sebelumnya. Dan ketika Anda perlu menguji dan menyempurnakan negosiasi ini, alat seperti Apidog menyediakan lingkungan yang sempurna untuk memastikan aplikasi Anda berkomunikasi secara efektif, terlepas dari preferensi format.

button

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.