406 Not Acceptable

Ż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 Acceptable

Jak go wysłać

Node.js / Expressres.status(406).end()
Python / Flaskreturn '', 406
nginxreturn 406;

Jak go sprawdzić

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

Otwórz narzędzie Kody statusu HTTP