506 Variant Also Negotiates
Penggunaan
Kode status 506 Variant Also Negotiates muncul selama Transparent Content Negotiation, yaitu ketika protokol memilih varian terbaik dari sumber daya tujuan untuk klien ketika tersedia beberapa varian.
Varian adalah versi-versi berbeda dari sumber daya yang bersangkutan. Sebagai contoh, sebuah sumber daya yang tersedia dalam beberapa bahasa memiliki satu varian untuk masing-masing bahasa. Transparent Content Negotiation secara otomatis memilih varian terbaik ketika sebuah permintaan GET atau HEAD dilakukan.
Error 506 berarti varian yang terpilih itu sendiri dikonfigurasi untuk melakukan negosiasi, sehingga menghasilkan perulangan yang kemudian dihentikan oleh server.
Catatan
Protokol ini dideskripsikan sebagai eksperimental pada tahun 1998 dan belum pernah diadopsi secara resmi sebagai standar.
Dampak SEO
Mesin pencari memperlakukan 506 sama seperti error server 5xx lainnya. Kegagalan yang terus-menerus menurunkan laju perayapan dan pada akhirnya menghapus URL terdampak dari indeks.
Contoh
Klien mengirim permintaan GET dengan header Accept. Server mencoba melakukan content negotiation tetapi menemukan bahwa varian yang dipilih juga merujuk pada negosiasi, sehingga menghasilkan error konfigurasi melingkar.
Permintaan
GET /docs HTTP/1.1
Host: example.com
Accept: text/html, application/xhtml+xml
Respons
HTTP/1.1 506 Variant Also Negotiates
Content-Type: text/html; charset=UTF-8
Content-Length: 191
<html>
<head>
<title>Variant Also Negotiates</title>
</head>
<body>
<p>Content negotiation for the requested
resource resulted in a circular reference.</p>
</body>
</html>
Cara memperbaiki
Penyiapan content negotiation pada server memiliki referensi melingkar: sebuah varian yang terpilih justru dikonfigurasi untuk bernegosiasi lebih lanjut. Putus perulangan tersebut dengan memastikan setiap varian menunjuk ke representasi yang konkret.
Perbaikan khusus Apache:
Perbaikan umum:
Kode status ini bersifat eksperimental dan jarang dijumpai di lingkungan produksi. Sebagian besar aplikasi modern menangani content negotiation di lapisan aplikasi, sehingga sepenuhnya menghindari mekanisme transparent negotiation di tingkat server.
Referensi kode
.NET
HttpStatusCode.VariantAlsoNegotiates
Rust
http::StatusCode::VARIANT_ALSO_NEGOTIATES
Rails
:variant_also_negotiates
Go
http.StatusVariantAlsoNegotiates
Symfony
Response::HTTP_VARIANT_ALSO_NEGOTIATES_EXPERIMENTAL
Python3.5+
http.HTTPStatus.VARIANT_ALSO_NEGOTIATES
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_VARIANT_ALSO_NEGOTIATES
Angular
@angular/common/http/HttpStatusCode.VariantAlsoNegotiates