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.
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
- 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-
- 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
- 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 |