Innehåll

    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.

    416 - Range Not Satisfiable

    Orsaker till att statuskod 416 uppstår

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

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

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

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

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

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

    [h2>Åtgärda fel 416 i olika programmeringsspråk

    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.