Żadna reprezentacja nie pasuje do nagłówka Accept.
Kiedy go używać
Klient poprosił o XML z API obsługującego tylko JSON.
Typowe przyczyny i rozwiązania
406 pojawia się, gdy serwer traktuje nagłówek Accept dosłownie: klient prosi o application/xml lub wąski typ vendor, a serwer potrafi zwrócić tylko coś innego. Niektóre frameworki, np. bloki respond_to w Rails i endpointy Springa z produces, zwracają 406, zamiast przejść na format domyślny. Wyślij Accept: application/json albo pomiń ten nagłówek i sprawdź, co Twój klient HTTP wysyła domyślnie.
Na hostingu współdzielonym ModSecurity i podobne firewalle aplikacji webowych (WAF) od dawna odpowiadają na zablokowane żądania kodem 406, co wygląda na problem z negocjacją treści, a w rzeczywistości jest regułą bezpieczeństwa; sprawdź log WAF-a lub zapytaj dostawcę hostingu. Projektując API, pamiętaj, że specyfikacja pozwala zignorować nieobsługiwany Accept i zwrócić format domyślny, co zwykle jest przyjaźniejsze niż 406.
Błąd klienta (4xx)
Kody 4xx to błędy klienta: samo żądanie jest błędne, nieautoryzowane albo wskazuje na coś, czego nie ma. Ponowienie tego samego żądania nic nie da.
Jak to wygląda
HTTP/1.1 406 Not AcceptableJak go wysłać
| Node.js / Express | res.status(406).end() |
|---|---|
| Python / Flask | return '', 406 |
| nginx | return 406; |
Jak go sprawdzić
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/