HTTP ç¯å²ãªã¯ã¨ã¹ã
HTTP ã®ç¯å²ãªã¯ã¨ã¹ã (Range) ã§ã¯ããµã¼ãã¼ããã¯ã©ã¤ã¢ã³ãã« HTTP ã¡ãã»ã¼ã¸ã®ä¸é¨ã®ã¿ãéä¿¡ã§ãã¾ãã
ç¯å²ãªã¯ã¨ã¹ãã¯ãã©ã³ãã ã¢ã¯ã»ã¹ã«å¯¾å¿ãã¦ããã¡ãã£ã¢ãã¬ã¼ã¤ã¼ã大ããªãã¡ã¤ã«ã®ä¸é¨ã®ã¿ãå¿
è¦ã¨ãããã¼ã¿ãã¼ã«ããã¦ã³ãã¼ãã䏿忢ããã³åéã§ãããã¦ã³ãã¼ãããã¼ã¸ã£ã¼ãªã©ããã¾ãã¾ãªã¯ã©ã¤ã¢ã³ãã«å½¹ç«ã¡ã¾ãã
ãµã¼ãã¼ãé¨åãªã¯ã¨ã¹ãã«å¯¾å¿ãã¦ãããã©ããã®ç¢ºèª
HTTP ã¬ã¹ãã³ã¹ã« none 以å¤ã®å¤ãæã¤ Accept-Ranges ãããã¼ãå«ã¾ãã¦ããå ´åããµã¼ãã¼ã¯ç¯å²ãªã¯ã¨ã¹ãã«å¯¾å¿ãã¦ãã¾ãã
ã¬ã¹ãã³ã¹ã§ Accept-Ranges ãããã¼ãçç¥ããã¦ããå ´åããµã¼ãã¼ã¯é¨åãªã¯ã¨ã¹ãã«å¯¾å¿ãã¦ããªããã¨ã示ãã¦ãã¾ãã
ç¯å²ãªã¯ã¨ã¹ãã«å¯¾å¿ãã¦ããªãå ´åãã¢ããªã±ã¼ã·ã§ã³ã¯ãã®æ¡ä»¶ã«é©å¿ãããã¨ãã§ãã¾ãããã¨ãã°ããã¦ã³ãã¼ãããã¼ã¸ã£ã¼ã¯ãç¯å²ãªã¯ã¨ã¹ãã«ä¾åãã¦ãã¦ã³ãã¼ããåéãã䏿忢ãã¿ã³ãç¡å¹ã«ãããã¨ãã§ãã¾ãã
ãµã¼ãã¼ãç¯å²ãªã¯ã¨ã¹ãã«å¯¾å¿ãã¦ãããã©ããã調ã¹ãã«ã¯ããªã½ã¼ã¹å
¨ä½ããªã¯ã¨ã¹ãããã«ãããã¼ãæ¤æ»ãã HEAD ãªã¯ã¨ã¹ããçºè¡ãã¾ãã
curl ã使ç¨ããå ´åã¯ã-I ãã©ã°ã使ç¨ã㦠HEAD ãªã¯ã¨ã¹ããè¡ããã¨ãã§ãã¾ãã
curl -I https://i.imgur.com/z4d4kWk.jpg
ããã«ãããæ¬¡ã® HTTP ãªã¯ã¨ã¹ããçæããã¾ãã
HEAD /z4d4kWk.jpg HTTP/2
Host: i.imgur.com
User-Agent: curl/8.7.1
Accept: */*
ã¬ã¹ãã³ã¹ã«ã¯ãããã¼ã®ã¿ãå«ã¾ãã¦ãããã¬ã¹ãã³ã¹æ¬ä½ã¯å«ã¾ãã¦ãã¾ããã
HTTP/2 200
content-type: image/jpeg
last-modified: Thu, 02 Feb 2017 11:15:53 GMT
â¦
accept-ranges: bytes
content-length: 146515
ãã®ã¬ã¹ãã³ã¹ã®ä¸ã§ã Accept-Ranges: bytes ã¯ç¯å²ãå®ç¾©ããåä½ã¨ãã¦ãã¤ãæ°ã使ãããã¨ã示ãã¦ãã¾ãï¼ä»ã®ã¨ããã使ããä»ã®åä½ã¯ããã¾ããï¼ã
Content-Length ãããã¼ããGET ã¡ã½ããã使ç¨ãã¦åããªã¯ã¨ã¹ããè¡ã£ãå ´åã«ãç»åã®åè¨ãµã¤ãºã示ãã®ã§å½¹ç«ã¡ã¾ãã
ãµã¼ãã¼ããã®ç¹å®ã®ç¯å²ã®ãªã¯ã¨ã¹ã
ãµã¼ãã¼ãç¯å²ãªã¯ã¨ã¹ãããµãã¼ããã¦ããå ´åããã®ãªã¯ã¨ã¹ããRangeã§çºè¡ãããã¨ãã§ããããã¯ãµã¼ãã¼ãè¿ãã¹ãããã¥ã¡ã³ãã®ä¸é¨åãæã示ãã¦ãã¾ãã
åä¸é¨åã®ãªã¯ã¨ã¹ã
説æã®ããã«ãcurl ã使ç¨ãã¦ãªã½ã¼ã¹ããåä¸ã®ç¯å²ããªã¯ã¨ã¹ããããã¨ãã§ãã¾ãã
-H ãªãã·ã§ã³ã¯ããªã¯ã¨ã¹ãã«ãããã¼è¡ã追å ãã¾ãããã®ä¾ã§ã¯ãæåã® 1024 ãã¤ãããªã¯ã¨ã¹ããã Range ãããã¼ã追å ããã¾ãã
æå¾ã®ãªãã·ã§ã³ã¯ --output - ã§ããã¤ããªåºåã端æ«ã«åºåãããã¨ãã§ãã¾ãã
curl https://i.imgur.com/z4d4kWk.jpg -i -H "Range: bytes=0-1023" --output -
çºè¡ããããªã¯ã¨ã¹ãã¯æ¬¡ã®ããã«ãªãã¾ãã
GET /z4d4kWk.jpg HTTP/2
Host: i.imgur.com
User-Agent: curl/8.7.1
Accept: */*
Range: bytes=0-1023
ãµã¼ãã¼ã¯ 206 Partial Content ã¹ãã¼ã¿ã¹ã³ã¼ãã¨ã¨ãã«ä»¥ä¸ã®ã¬ã¹ãã³ã¹ãè¿ãã¾ãã
HTTP/2 206
content-type: image/jpeg
content-length: 1024
content-range: bytes 0-1023/146515
â¦
(binary content)
Content-Length ã¯ããã§ã®å ´åãè¦æ±ãããç¯å²ã®å¤§ãããè¿ãã¾ãï¼ç»åå
¨ä½ã®å¤§ããã§ã¯ããã¾ããï¼ã
Content-Range ã¬ã¹ãã³ã¹ãããã¼ã¯ãã®é¨åçãªã¡ãã»ã¼ã¸ãå
¨ä½ã®ãªã½ã¼ã¹ã®ãã¡ã®ã©ã®é¨åã«å±ãã¦ããã®ããæã示ãã¦ãã¾ãã
è¤æ°é¨åã®ãªã¯ã¨ã¹ã
Range ãããã¼ã¯ã¾ããããã¥ã¡ã³ãã®è¤æ°ã®ç¯å²ãä¸åº¦ã«åå¾ããææ®µãæä¾ãã¦ãã¾ãããããè¤æ°ã®ç¯å²ã¯ã«ã³ãã§åºåããã¨ã§æå®ã§ãã¾ãã
curl http://www.example.com -i -H "Range: bytes=0-50, 100-150"
ãµã¼ãã¼ã¯ãä¸è¨ã«ç¤ºã 206 Partial Content ã¹ãã¼ã¿ã¹ã§å¿çãã¾ãã
ãã®ã¬ã¹ãã³ã¹ã«ã¯ããã«ããã¼ãã®ãã¤ãç¯å²ãç¶ããã¨ã示ã Content-Type ãããã¼ãå«ã¾ãã¦ãã¾ãã
å¢çæåå (ãã®ä¾ã§ã¯ 3d6b6a416f9b5) ã¯ãæ¬ä½é¨åãåºåãã¾ãã忬ä½é¨åã«ã¯ãããããç¬èªã® Content-Type ããã³ Content-Range ãã£ã¼ã«ããããã¾ãã
HTTP/1.1 206 Partial Content
Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5
Content-Length: 282
--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 0-50/1270
<!doctype html>
<html lang="en-US">
<head>
<title>Example Do
--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 100-150/1270
eta http-equiv="Content-type" content="text/html; c
--3d6b6a416f9b5--
æ¡ä»¶ä»ãç¯å²ãªã¯ã¨ã¹ã
ãªã½ã¼ã¹ã®ãããªãé¨åã«å¯¾ãã¦ãªã¯ã¨ã¹ããåéããéãæå¾ã«ãã¤ãç¯å²ã®æçãåãåã£ãã¨ãããããµã¼ãã¼å´ã§æ ¼ç´ããã¦ãããªã½ã¼ã¹ã夿´ããã¦ããªããã¨ãä¿è¨¼ããå¿ è¦ãããã¾ãã
If-Range HTTP ãªã¯ã¨ã¹ããããã¼ã¯ç¯å²ãªã¯ã¨ã¹ãã«å¯¾ãã¦æ¡ä»¶ä»ããä»ä¸ãããã¨ãã§ãã¾ããæ¡ä»¶ãæºããããå ´åãç¯å²ãªã¯ã¨ã¹ããçºè¡ããããµã¼ãã¼ã¯é©åãªããã£ã¨ã¨ãã« 206 Partial Content ã¹ãã¼ã¿ã¹ãè¿ãã¾ããããæ¡ä»¶ãæºããããªãã£ãå ´åãå
¨ã¦ã®ãªã½ã¼ã¹ã 200 OK ã¹ãã¼ã¿ã¹ã¨ã¨ãã«è¿ããã¾ãããã®ãããã¼ã¯ Last-Modified validator ããã㯠ETag ãä¼´ã£ã¦ç¨ãããã¾ãã両æ¹ãåæã«ä½¿ããã¨ã¯ããã¾ããã
If-Range: Wed, 21 Oct 2015 07:28:00 GMT
é¨åçãªãªã¯ã¨ã¹ãã®ã¬ã¹ãã³ã¹
ç¯å²ãªã¯ã¨ã¹ããç¨ããéãããã«é¢é£ããï¼ã¤ã®ã¹ãã¼ã¿ã¹ã³ã¼ããåå¨ãã¾ãã
- ç¯å²ãªã¯ã¨ã¹ããæåããé
206Partial Contentã¹ãã¼ã¿ã¹ã³ã¼ãããµã¼ãã¼ããè¿ããã¾ãã - ç¯å²ãªã¯ã¨ã¹ããå
ã®ãªã½ã¼ã¹ã®å¢çãè¶ãåºãå ´å (ã¤ã¾ãç¯å²ã示ãå¤ããªã½ã¼ã¹ããå¤ã«ã¯ã¿åºãå ´å) ããµã¼ãã¼ã¯
416Requested Range Not Satisfiableã¹ãã¼ã¿ã¹ã³ã¼ããè¿ãã¾ãã - ç¯å²ãªã¯ã¨ã¹ãããµãã¼ãããã¦ããªãå ´åããµã¼ãã¼ãã
200OKã¹ãã¼ã¿ã¹ã³ã¼ããè¿ããã¾ãã
ãã£ã³ã¯ Transfer-Encoding ã¨ã®æ¯è¼
Transfer-Encoding ãããã¼ãç¨ãããã¨ã§ãã£ã³ã¯ãã¨ã®ã¨ã³ã³ã¼ãã£ã³ã°ãå¯è½ã«ãªãã¾ããããã¯å¤§ãããµã¤ãºã®ãã¼ã¿ãã¯ã©ã¤ã¢ã³ãã«éããããªã¯ã¨ã¹ããå®å
¨ã«å¦çãããã¾ã§ã¬ã¹ãã³ã¹å
¨ä½ã®ãµã¤ãºã夿ããªãå ´åã«æç¨ã§ãããµã¼ãã¼ã¯ã¯ã©ã¤ã¢ã³ãã«å¯¾ãã¦ããããã¡ãªã³ã°ãå®éã®å¤§ããã確ããããã¨ãªããå³åº§ã«ãã¼ã¿ãéãã¾ããããã¯ã¬ã¤ãã³ã·ã¼ã®åä¸ã«å°ãã¾ããç¯å²ãªã¯ã¨ã¹ãã¨ãã£ã³ã¯ã®ä½¿ç¨ã¯å
±ç¨å¯è½ã§ãããäºãã«æå®ããã¦ãããã¨ããªãããã¨æ°ã«ãã使ç¨ãããã¨ãå¯è½ã§ãã
é¢é£æ å ±
- é¢é£ããã¹ãã¼ã¿ã¹ã³ã¼ã
200,206,416. - é¢é£ãããããã¼:
Accept-Ranges,Range,Content-Range,If-Range,Transfer-Encoding.