コンテンツ

    サーバー応答 416 Range Not Satisfiable

    HTTP ステータスコード 416 (Range Not Satisfiable) の詳細

    HTTP ステータスコード 416 は、サーバーが要求されたデータの範囲を満たせないことを示すレスポンスです。このエラーは、クライアントがリソースの一部を要求する際に、指定された範囲が利用可能なデータを超えている場合に発生します。以下では、このステータスコードの原因、実際の例、およびさまざまなプログラミング言語でのエラー修正方法を詳しく説明します。

    416 - Range Not Satisfiable

    ステータスコード 416 の発生原因

    1. 不正確な範囲指定

      クライアントが範囲を指定する際に誤りを犯すことがあります。たとえば、ファイルのサイズを超える範囲を要求することです。

    2. サーバー上のデータの欠如

      リソースが削除されたり変更された場合、要求された範囲が利用可能なデータよりも大きくなることがあります。

    3. 不正なヘッダー

      Range ヘッダーが正しく設定されていないと、エラーが発生する可能性があります。

    実際の例

    1. オーディオファイルの例

      クライアントがオーディオファイルの長さを超える範囲を要求した場合、サーバーは 416 エラーを返します。リクエストとサーバーのレスポンスは次のようになります。

    2. 画像の例

      画像が変更された後、クライアントが変更前のサイズで部分的な画像を要求した場合、416 エラーが発生します。

    3. テキストファイルの例

      テキストファイルに対して指定された範囲がファイルのサイズを超えている場合、サーバーは 416 エラーを返します。

    さまざまなプログラミング言語でのエラー 416 の修正方法

    プログラミング言語 修正方法
    Python (requests ライブラリ使用)

    リクエストを送信する前に範囲の正確性を確認するコード例です。

    import requests
    
    url = "http://example.com/resource"
    headers = {"Range": "bytes=0-1000"}
    
    response = requests.get(url, headers=headers)
    if response.status_code == 416:
        print("エラー: 指定された範囲は満たされません。")
    JavaScript (Fetch API 使用)

    範囲を要求し、416 レスポンスを処理するコード例です。

    fetch("http://example.com/resource", {
        headers: {
            "Range": "bytes=0-1000"
        }
    })
    .then(response => {
        if (response.status === 416) {
            console.error("エラー: 指定された範囲は満たされません。");
        }
    });
    PHP (cURL 使用)

    Range ヘッダーを持つリクエストを実行し、ステータス 416 を処理するコード例です。

    $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 "エラー: 指定された範囲は満たされません。";
    }
    curl_close($ch);

    ステータスコード 416 は、要求されたデータの範囲が利用できない問題を示しています。このステータスを回避するためには、範囲を正確に指定し、クライアント側でのエラー処理を適切に行うことが重要です。