14.36. Range
14.36.1. Byte Ranges
Так как все объекты HTTP представлены в сообщениях HTTP как последовательности байтов, понятие диапазона байта значимо для любого объекта HTTP. (Однако, не все клиенты и серверы должен поддержать byterange операции).
Спецификации диапазона байта в HTTP применяются к последовательности байтов в теле объекта (не обязательно то же самое как тело сообщения).
Операция диапазона байта может определить один диапазон байтов, или ряд диапазонов в пределах отдельного объекта.
ranges-specifier = byte-ranges-specifier byte-ranges-specifier = bytes-unit "=" byte-range-set byte-range-set = 1#( byte-range-spec | suffix-byte-range-spec ) byte-range-spec = first-byte-pos "-" [last-byte-pos] first-byte-pos = 1*DIGIT last-byte-pos = 1*DIGIT
Значение first-byte-pos в спецификациях диапазона-байта дает байтовое смещение первого байта в диапазоне. Значение last-byte-pos дает байтовое смещение последнего байта в диапазоне; то есть, указанные позиции байта являются содержащими. Байтовые смещения начинаются в нуле.
Если значение last-byte-pos присутствует, он должен быть больше чем или равным first-byte-pos в тех спецификациях диапазона-байта, или byterange-спецификации недопустимы. Получатель недопустимых спецификаций диапазона-байта должен проигнорировать его.
Если значение last-byte-pos отсутствует, или если значение больше чем или равно текущей длине тела объекта, last-byte-pos взят, чтобы быть равным меньше текущая длина entitybody в байтах.
Его вариантом last-byte-pos клиент может ограничить число байтов, найденных, не зная размер объекта.
suffix-byte-range-spec = "-" suffix-length suffix-length = 1*DIGIT
suffix-byte-range-spec используется, чтобы определить суффикс тела объекта, длины, данной значением suffix-length. (Таким образом, эта форма определяет последние байты N тела объекта). Если объект более короток чем указанный suffix-length, все тело объекта используется.
Примеры значений байта-ranges-specifier (предполагающий тело объекта длины 10000):
* The first 500 bytes (byte offsets 0-499, inclusive): bytes=0-499 * The second 500 bytes (byte offsets 500-999, inclusive): bytes=500-999 * The final 500 bytes (byte offsets 9500-9999, inclusive): bytes=-500 Or bytes=9500- * The first and last bytes only (bytes 0 and 9999): bytes=0-0,-1 * Several legal but not canonical specifications of the second 500 bytes (byte offsets 500-999, inclusive): bytes=500-600,601-999 bytes=500-700,601-999