{
  "slug": "byte-range-request",
  "term": "Byte-range request",
  "aliases": [
    "HTTP range request",
    "HTTP byte-range request"
  ],
  "definition": "A byte-range request asks an HTTP server to return selected byte intervals of a representation instead of its complete content.",
  "note": "Offsets start at zero and include both endpoints; bytes=0-9 requests ten bytes. Ranges address the encoded representation when content coding is applied. Keep representation identity separate from range coverage and checksum verification.",
  "status": "shipping",
  "advantages": [
    {
      "text": "Range requests can retrieve selected object bytes or resume an interrupted transfer.",
      "citationIds": [
        "c1",
        "c2"
      ]
    }
  ],
  "limitations": [
    {
      "text": "A server can ignore Range and return 200; do not append that full response as a missing fragment.",
      "citationIds": [
        "c1"
      ]
    },
    {
      "text": "If-Range cannot use a weak ETag; a failed comparison makes the server ignore Range, unlike a failed If-Match precondition. Use an HTTP-date only when no ETag is available and the date qualifies as a strong validator.",
      "citationIds": [
        "c1"
      ]
    },
    {
      "text": "S3 GetObject supports one range per request; use its documented versionId or If-Match controls rather than assuming If-Range support.",
      "citationIds": [
        "c2"
      ]
    },
    {
      "text": "Decompressive transcoding can turn a range request into an entire object transfer; a checksum of the complete stored object does not validate a selected or decoded interval.",
      "citationIds": [
        "c4",
        "c5"
      ]
    },
    {
      "text": "Pinning a stored data generation does not freeze editable metadata; when metadata controls the representation, bind its revision too and check each response's coding before assembly.",
      "citationIds": [
        "c5",
        "c6"
      ]
    }
  ],
  "related": [
    "entity-tag",
    "object-version-id",
    "object-storage",
    "full-object-checksum"
  ],
  "provenance": [
    "The transcoding example is specific to Google Cloud Storage; the checksum coverage statement uses its XML API. [c4] [c5]",
    "The generation/metageneration distinction is specific to Google Cloud Storage; its XML download API exposes x-goog-if-metageneration-match. [c5] [c6]"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-10-24",
  "citations": [
    {
      "id": "c1",
      "title": "RFC 9110: If-Range and range requests, sections 13.1.5 and 14",
      "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-14",
      "accessed": "2026-10-23"
    },
    {
      "id": "c2",
      "title": "Amazon S3 API: GetObject, Range, If-Match and versionId",
      "url": "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html",
      "accessed": "2026-10-23"
    },
    {
      "id": "c3",
      "title": "Object ETags: checksums and conditional writes are different",
      "url": "https://hesela.com/analyses/object-etags-checksums-conditional-writes/#range-resumption",
      "accessed": "2026-10-23"
    },
    {
      "id": "c4",
      "title": "Google Cloud Storage: gzip transcoding and Range behavior",
      "url": "https://docs.cloud.google.com/storage/docs/transcoding",
      "accessed": "2026-10-23"
    },
    {
      "id": "c5",
      "title": "Google Cloud Storage XML API: object download and checksum coverage",
      "url": "https://docs.cloud.google.com/storage/docs/xml-api/get-object-download",
      "accessed": "2026-10-23"
    },
    {
      "id": "c6",
      "title": "Google Cloud Storage: editable metadata, generation and metageneration",
      "url": "https://docs.cloud.google.com/storage/docs/metadata#generation-number",
      "accessed": "2026-10-24"
    }
  ]
}
