Andy Green
|
ed4acef481
|
RFC7233 HTTP Ranges support for server
This adds a serverside implementation of RFC7233 HTTP ranges.
- LWS_WITH_RANGES is on by default at cmake
- Accept-Ranges: bytes is added if LWS_WITH_RANGES is enabled
- Both single ranges and multipart (2+) ranges are supported
Test with curl like this
Single
$ $ curl -s -r 64-95 http://localhost:7681/libwebsockets.org-logo.png | hexdump -C
00000000 2e 01 fd 9d 12 27 00 00 00 19 74 45 58 74 53 6f |.....'....tEXtSo|
00000010 66 74 77 61 72 65 00 77 77 77 2e 69 6e 6b 73 63 |ftware.www.inksc|
Multipart
$ curl -s -r 64-95,128-143 http://localhost:7681/libwebsockets.org-logo.png | hexdump -C
00000000 5f 6c 77 73 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 |_lws..Content-Ty|
00000010 70 65 3a 20 69 6d 61 67 65 2f 70 6e 67 0d 0a 43 |pe: image/png..C|
00000020 6f 6e 74 65 6e 74 2d 52 61 6e 67 65 3a 20 62 79 |ontent-Range: by|
00000030 74 65 73 20 36 34 2d 39 35 2f 37 30 32 39 0d 0a |tes 64-95/7029..|
00000040 0d 0a 2e 01 fd 9d 12 27 00 00 00 19 74 45 58 74 |.......'....tEXt|
00000050 53 6f 66 74 77 61 72 65 00 77 77 77 2e 69 6e 6b |Software.www.ink|
00000060 73 63 5f 6c 77 73 0d 0a 43 6f 6e 74 65 6e 74 2d |sc_lws..Content-|
00000070 54 79 70 65 3a 20 69 6d 61 67 65 2f 70 6e 67 0d |Type: image/png.|
00000080 0a 43 6f 6e 74 65 6e 74 2d 52 61 6e 67 65 3a 20 |.Content-Range: |
00000090 62 79 74 65 73 20 31 32 38 2d 31 34 33 2f 37 30 |bytes 128-143/70|
000000a0 32 39 0d 0a 0d 0a 05 14 50 40 05 15 a5 c4 60 43 |29......P@....`C|
000000b0 91 c4 4a d4 c4 fc 5f 6c 77 73 0d 00 |..J..._lws..|
The corresponding header part is like this
0x0030: 4854 5450 2f31 2e31 2032 3036 HTTP/1.1.206
0x0040: 200d 0a73 6572 7665 723a 206c 7773 7773 ...server:.lwsws
0x0050: 0d0a 636f 6e74 656e 742d 7479 7065 3a20 ..content-type:.
0x0060: 6d75 6c74 6970 6172 742f 6279 7465 7261 multipart/bytera
0x0070: 6e67 6573 0d0a 6163 6365 7074 2d72 616e nges..accept-ran
0x0080: 6765 733a 2062 7974 6573 0d0a 636f 6e74 ges:.bytes..cont
0x0090: 656e 742d 6c65 6e67 7468 3a20 3138 380d ent-length:.188.
0x00a0: 0a63 6163 6865 2d63 6f6e 7472 6f6c 3a20 .cache-control:.
0x00b0: 7072 6976 6174 6520 6d61 782d 6167 653a private.max-age:
0x00c0: 2036 300d 0a63 6f6e 6e65 6374 696f 6e3a .60..connection:
0x00d0: 206b 6565 702d 616c 6976 650d 0a65 7461 .keep-alive..eta
0x00e0: 673a 2030 3030 3031 4237 3535 3444 3433 g:.00001B7554D43
0x00f0: 3033 330d 0a0d 0a 033....
|
2016-12-20 14:37:07 +08:00 |
|