Zawartość

    Odpowiedź serwera 416 Range Not Satisfiable

    Status HTTP 416: Zakres nieosiągalny

    Status kodu HTTP 416 (Range Not Satisfiable) to odpowiedź serwera, która wskazuje, że żądany zakres danych nie może być zrealizowany. Dzieje się tak, gdy klient próbuje uzyskać część zasobu, jednak określony zakres wykracza poza dostępne dane. W tej artykule omówimy przyczyny występowania tego kodu statusu, praktyczne przykłady oraz sposoby naprawy błędów w różnych językach programowania.

    416 - Range Not Satisfiable

    Przyczyny wystąpienia statusu 416

    • Nieprawidłowo określony zakres:

      Klient może popełnić błąd przy określaniu zakresu, na przykład żądając zakresu, który przekracza rozmiar pliku. W takim przypadku serwer nie będzie w stanie zrealizować żądania.

    • Brak danych na serwerze:

      W sytuacjach, gdy zasób został usunięty lub zmieniony, a żądany zakres jest większy niż dostępne dane, serwer również zwróci ten status.

    • Nieprawidłowe nagłówki:

      Niepoprawnie skonfigurowane nagłówki Range mogą prowadzić do błędu 416. Klient powinien upewnić się, że nagłówki są zgodne z oczekiwaniami serwera.

    Praktyczne przykłady

    1. Przykład z plikiem audio:

      Klient próbuje uzyskać zakres, który wykracza poza długość pliku audio. W takim przypadku żądanie może wyglądać następująco:

      GET /audio.mp3 HTTP/1.1
      Range: bytes=1000000-
    2. Przykład z obrazem:

      Klient wysyła zapytanie o część obrazu, który został zmieniony, a klient nie jest świadomy nowych rozmiarów. Przykład żądania:

      GET /image.jpg HTTP/1.1
      Range: bytes=5000-10000
    3. Przykład z plikiem tekstowym:

      Klient wysyła żądanie do pliku tekstowego, w którym określony zakres przekracza rozmiar pliku. Żądanie może wyglądać tak:

      GET /document.txt HTTP/1.1
      Range: bytes=200-400

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

    Python (z użyciem biblioteki requests)

    Przykład kodu do sprawdzenia poprawności zakresu przed wysłaniem żądania:

    import requests
    
    url = "http://example.com/file.mp3"
    headers = {"Range": "bytes=1000000-"}
    response = requests.get(url, headers=headers)
    
    if response.status_code == 416:
        print("Błąd: Zakres nieosiągalny.")

    JavaScript (z użyciem Fetch API)

    Przykład kodu pokazujący, jak zażądać zakresu i obsłużyć odpowiedź 416:

    fetch('http://example.com/file.mp3', {
        method: 'GET',
        headers: {'Range': 'bytes=1000000-'}
    })
    .then(response => {
        if (response.status === 416) {
            console.log("Błąd: Zakres nieosiągalny.");
        }
    });

    PHP (z użyciem cURL)

    Przykład kodu do wykonania żądania z nagłówkiem Range i obsługi statusu 416:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://example.com/file.mp3");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Range: bytes=1000000-'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    
    if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 416) {
        echo "Błąd: Zakres nieosiągalny.";
    }
    curl_close($ch);

    Status kodu 416 wskazuje na problemy z dostępnością żądanego zakresu danych. Aby uniknąć tego statusu, istotne jest poprawne określanie zakresów oraz obsługiwanie potencjalnych błędów po stronie klienta.

    Przyczyna Opis Przykład
    Nieprawidłowo określony zakres Żądanie zakresu przekraczającego dostępny rozmiar. GET /file.mp3 HTTP/1.1 Range: bytes=1000000-
    Brak danych na serwerze Usunięty lub zmieniony zasób. GET /image.jpg HTTP/1.1 Range: bytes=5000-10000
    Nieprawidłowe nagłówki Niepoprawnie skonfigurowane nagłówki Range. GET /document.txt HTTP/1.1 Range: bytes=200-400