Zawartość

    Odpowiedź serwera 406 Not Acceptable

    HTTP Status Code 406: Not Acceptable

    Status kod 406 (Not Acceptable) oznacza, że serwer nie może dostarczyć odpowiedzi w formacie, który klient określił w nagłówku Accept. Może to wynikać z różnych powodów, w tym błędnych nagłówków żądania lub braku wsparcia dla żądanego formatu po stronie serwera.

    406 - Not Acceptable

    Definicja i przyczyny występowania

    Status 406 jest wywoływany, gdy serwer nie jest w stanie zwrócić odpowiedzi w formacie, który jest akceptowany przez klienta. Może to być spowodowane:

    • Nieprawidłowymi nagłówkami Accept w żądaniu.
    • Brakiem wsparcia dla określonego formatu danych na serwerze.
    • Niekompatybilnością między żądanym a dostępnym formatem danych.

    Sytuacje, w których klient może się spotkać z kodem 406

    Klient może napotkać status 406 w różnych scenariuszach, takich jak:

    1. Próba zażądania zasobu, który nie jest dostępny w akceptowalnym formacie.
    2. Wysyłanie żądania do API, które nie obsługuje żądanego typu danych.
    3. Podanie nagłówka Accept, który nie jest zgodny z obsługiwanymi formatami serwera.

    Różnice między statusem 406 a innymi statusami

    Warto zauważyć różnicę między statusem 406 a innymi statusami, takimi jak:

    Status Opis
    406 Not Acceptable Serwer nie może dostarczyć odpowiedzi w żądanym formacie.
    415 Unsupported Media Type Serwer nie obsługuje formatu danych, które klient wysłał w żądaniu.

    Praktyczne przykłady

    Przykład 1: Błąd przy żądaniu obrazu w nieobsługiwanym formacie

    Klient może próbować zażądać obrazu w formacie, który serwer nie obsługuje, np. żądanie formatu image/webp, podczas gdy serwer obsługuje jedynie image/jpeg.

    Przykład 2: Błąd przy żądaniu dokumentu tekstowego z nieprawidłowym formatem

    Jeśli klient wysyła żądanie z nagłówkiem Accept: application/xml, ale serwer może dostarczyć jedynie application/json, wówczas wystąpi status 406.

    Przykład 3: Jak błędny nagłówek Accept może prowadzić do statusu 406

    Na przykład, jeśli klient wysyła żądanie z nagłówkiem Accept: application/xhtml+xml, ale serwer nie obsługuje tego formatu, wynik będzie 406.

    Naprawa błędu w różnych językach programowania

    JavaScript (Node.js)

    Przykład kodu, w którym występuje błąd 406:

    
    const express = require('express');
    const app = express();
    
    app.get('/example', (req, res) => {
        res.status(406).send('Not Acceptable');
    });
    

    Sprawdzenie i ustawienie nagłówka Accept:

    
    app.get('/example', (req, res) => {
        if (req.accepts('json')) {
            res.json({ message: 'Accepted' });
        } else {
            res.status(406).send('Not Acceptable');
        }
    });
    

    Python (Flask)

    Przykład kodu z wywołaniem API, które zwraca status 406:

    
    from flask import Flask, request, jsonify
    
    app = Flask(__name__)
    
    @app.route('/example', methods=['GET'])
    def example():
        if request.accept_mimetypes['application/json']:
            return jsonify(message='Accepted')
        else:
            return 'Not Acceptable', 406
    

    Dodanie wsparcia dla wymaganego formatu odpowiedzi:

    
    @app.route('/example', methods=['GET'])
    def example():
        return jsonify(message='Accepted'), 200
    

    PHP

    Przykład kodu z błędem 406:

    
    header('Content-Type: application/xml');
    http_response_code(406);
    echo 'Not Acceptable';
    

    Zmiana nagłówków lub konfiguracja tras, aby wspierać formaty:

    
    header('Content-Type: application/json');
    echo json_encode(['message' => 'Accepted']);
    

    Rekomendacje dotyczące zapobiegania występowaniu statusu 406

    • Sprawdzanie nagłówków Accept przed wysłaniem żądania.
    • Konfiguracja serwera dla wsparcia różnych formatów odpowiedzi.
    • Testowanie API z różnymi parametrami żądania.

    Praktyczne zastosowanie statusu 406

    Status 406 może być użyteczny dla programistów, ponieważ informuje ich o problemach z formatem odpowiedzi, co pozwala na szybszą diagnozę i naprawę błędów. Użytkownicy API powinni być świadomi, że mogą napotkać ten status, i powinni być gotowi do dostosowania swoich żądań.

    Właściwe przetwarzanie nagłówków Accept jest kluczowe dla zapewnienia, że żądania trafiają do serwera w odpowiednim formacie. Programiści powinni zapewnić, że ich aplikacje poprawnie obsługują te nagłówki, aby zminimalizować występowanie błędów 406.

    Dodatkowe kody

    KodOpis
    406.0Nieakceptowalne - Żądany typ MIME jest niedozwolony.