Serversvar 416 Range Not Satisfiable
HTTP-statuskod 416 (Range Not Satisfiable)
HTTP-statuskod 416, som står för "Range Not Satisfiable", är ett svar från servern som indikerar att begärd dataintervall inte kan tillfredsställas. Detta inträffar när en klient begär en del av en resurs, men det angivna intervallet överskrider tillgängliga data. I denna artikel kommer vi att utforska orsakerna till att denna statuskod uppstår, praktiska exempel samt sätt att åtgärda fel i olika programmeringsspråk.
Orsaker till att statuskod 416 uppstår
- Felaktigt angivet intervall
Kunder kan göra misstag när de anger intervall, till exempel genom att begära ett intervall som överskrider filens storlek. Detta kan hända om klienten inte är medveten om filens exakta längd.
- Avsaknad av data på servern
Det kan finnas situationer där resursen har tagits bort eller ändrats, och det begärda intervallet är större än de tillgängliga data. Detta kan inträffa efter att en fil har raderats eller om den har modifierats och nu är kortare.
- Felaktiga rubriker
Felaktigt konfigurerade "Range"-rubriker kan också leda till att en 416-statuskod returneras. Om rubriken inte är korrekt formaterad eller inte matchar de data som finns på servern, kan detta resultera i en misslyckad begäran.
Praktiska exempel
- Exempel med ljudfil
En klient begär ett intervall som överskrider längden på ljudfilen. Till exempel kan en begäran se ut så här:
GET /audio.mp3 HTTP/1.1 Range: bytes=1000000-
Om ljudfilen är 500000 byte lång kommer servern att svara med statuskod 416.
- Exempel med bild
En klient gör en begäran om en del av en bild som har ändrats, och klienten är inte medveten om de nya dimensionerna. Begäran kan se ut så här:
GET /image.png HTTP/1.1 Range: bytes=0-999999
Om bilden nu bara är 800000 byte ger servern statuskod 416.
- Exempel med textfil
En begäran till en textfil där det angivna intervallet överskrider filens storlek:
GET /textfile.txt HTTP/1.1 Range: bytes=200-300
Om filen är endast 250 byte lång kommer servern att svara med 416.
Python (med hjälp av requests-biblioteket)
import requests url = "http://example.com/resource" headers = {"Range": "bytes=0-1000"} response = requests.get(url, headers=headers) if response.status_code == 416: print("Fel: Begärt intervall kan inte tillfredsställas.") else: print("Data mottagen:", response.content)
JavaScript (med hjälp av Fetch API)
fetch("http://example.com/resource", { headers: { "Range": "bytes=0-1000" } }).then(response => { if (response.status === 416) { console.error("Fel: Begärt intervall kan inte tillfredsställas."); } else { return response.blob(); } }).then(data => { console.log("Data mottagen:", data); });
PHP (med hjälp av cURL)
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://example.com/resource"); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: bytes=0-1000")); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 416) { echo "Fel: Begärt intervall kan inte tillfredsställas."; } else { echo "Data mottagen: " . $response; } curl_close($ch);
Tillgängliga intervall och deras betydelse
Intervall | Betydelse |
---|---|
bytes=0-499 | Första 500 bytes av resursen |
bytes=500-999 | Nästa 500 bytes av resursen |
bytes=1000- | Från 1000 bytes till slutet av resursen |
Statuskod 416 indikerar problem med otillgänglighet av begärda dataintervall. För att undvika denna status är det viktigt att ange intervall korrekt och hantera möjliga fel på klientsidan. Genom noggrann kontroll av begärningar och serverns svar kan utvecklare minska risken för att stöta på denna statuskod. Genom att följa bästa praxis för att hantera intervall och genomföra lämpliga kontroller kan man säkerställa en mer robust och användarvänlig applikation.