HTTP ã¡ãã»ã¼ã¸
HTTP ã¡ãã»ã¼ã¸ ã¯ãHTTP ãããã³ã«ã§ãµã¼ãã¼ã¨ã¯ã©ã¤ã¢ã³ãéã§ãã¼ã¿ã交æããããã«ä½¿ç¨ãããã¡ã«ããºã ã§ãã ã¡ãã»ã¼ã¸ã«ã¯ 2 種é¡ããã¾ãããµã¼ãã¼ã§æªç½®ãéå§ããããã«ã¯ã©ã¤ã¢ã³ãããéä¿¡ããããªã¯ã¨ã¹ãã¨ããªã¯ã¨ã¹ãã«å¯¾ããã¬ã¹ãã³ã¹ã¨ãã¦ãµã¼ãã¼ããéä¿¡ãããã¬ã¹ãã³ã¹ã§ãã
éçºè ã HTTP ã¡ãã»ã¼ã¸ãã¼ããã使ãããã¨ã¯ã»ã¨ãã©ããã¾ããã ãã©ã¦ã¶ã¼ããããã·ã¼ãã¦ã§ããµã¼ãã¼ãªã©ã®ã¢ããªã±ã¼ã·ã§ã³ã¯ãHTTP ã¡ãã»ã¼ã¸ãä¿¡é ¼æ§é«ãå¹ççã«ä½æããããã«è¨è¨ãããã½ããã¦ã§ã¢ã使ç¨ãã¦ãã¾ãã ã¡ãã»ã¼ã¸ã®ä½æã夿ã¯ããã©ã¦ã¶ã¼ã® APIããããã·ã¼ããµã¼ãã¼ã®è¨å®ãã¡ã¤ã«ããã®ä»ã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ãã£ã¦å¶å¾¡ããã¾ãã
HTTP ãããã³ã«ã® HTTP/2 以åã®ãã¼ã¸ã§ã³ã§ã¯ãã¡ãã»ã¼ã¸ã¯ããã¹ããã¼ã¹ã§ãããæ¸å¼ã«æ £ããã¨æ¯è¼çç°¡åã«èªã¿ãçè§£ãããã¨ãã§ãã¾ãã HTTP/2 ã§ã¯ãã¡ãã»ã¼ã¸ã¯ãã¤ããªã¼ãã¬ã¼ã ã§ã©ããããã¦ãããããç¹å®ã®ãã¼ã«ããªãã¨èªãã®ãå°ãé£ãããªãã¾ãã ãããããããã³ã«ã®åºç¤ã¨ãªãæå³ã¥ãã¯åãã§ããããã HTTP/1.x ã¡ãã»ã¼ã¸ã®ããã¹ããã¼ã¹ã®æ¸å¼ã«åºã¥ã㦠HTTP ã¡ãã»ã¼ã¸ã®æ§é ã¨æå³ãå¦ã³ããã®çè§£ã HTTP/2 以éã«ãå¿ç¨ãããã¨ãã§ãã¾ãã
ãã®ã¬ã¤ãã§ã¯ãèªã¿ãããã®ããã« HTTP/1.1 ã¡ãã»ã¼ã¸ã使ç¨ããHTTP/1.1 æ¸å¼ã使ç¨ã㦠HTTP ã¡ãã»ã¼ã¸ã®æ§é ã説æãã¦ãã¾ãã æå¾ã®ç¯ã§ã¯ãHTTP/2 ãè¨è¿°ããéã«å¿ è¦ã¨ãªãå¯è½æ§ã®ããããã¤ãã®ç¸éç¹ã強調ãã¦ãã¾ãã
ã¡ã¢: HTTP ã¡ãã»ã¼ã¸ã¯ããã©ã¦ã¶ã¼ã®éçºè ãã¼ã«ã«ãããããã¯ã¼ã¯ã¿ãã§ç¢ºèªã§ãã¾ããã¾ããä¾ãã° curl ãªã©ã® CLI ãã¼ã«ã使ç¨ã㦠HTTP ã¡ãã»ã¼ã¸ãã³ã³ã½ã¼ã«ã«åºåãããã¨ãã§ãã¾ãã
HTTP ã¡ãã»ã¼ã¸ã®æ§é
HTTP ã¡ãã»ã¼ã¸ãã©ã®ããã«åä½ããã®ããçè§£ããããã«ãHTTP/1.1 ã¡ãã»ã¼ã¸ãè¦ã¦ããã®æ§é ã調ã¹ã¦ã¿ã¾ãããã æ¬¡ã®å³ã¯ãHTTP/1.1 ã®ã¡ãã»ã¼ã¸ãã©ã®ããã«è¦ãããã示ãã¦ãã¾ãã
ãªã¯ã¨ã¹ãã¨ã¬ã¹ãã³ã¹ã¯ãã©ã¡ããåæ§ã®æ§é ã«ãªã£ã¦ãã¾ãã
- å é è¡ã¯ãHTTP ãã¼ã¸ã§ã³ã¨ãªã¯ã¨ã¹ãã¡ã½ããã¾ãã¯ãªã¯ã¨ã¹ãã®çµæãè¨è¿°ããåä¸ã®è¡ã§ãã
- ãªãã·ã§ã³ã® HTTP ãããã¼ä¸å¼ã§ãã¡ãã»ã¼ã¸ã説æããã¡ã¿ãã¼ã¿ãè¨è¿°ãã¾ããä¾ãã°ããªã½ã¼ã¹ã®ãªã¯ã¨ã¹ãã«ã¯ãã®ãªã½ã¼ã¹ã®è¨±å¯ãããæ¸å¼ãè¨è¿°ãããã¨ãã§ããã¬ã¹ãã³ã¹ã«ã¯å®éã«è¿ãããæ¸å¼ã示ããããã¼ãè¨è¿°ãããã¨ãã§ãã¾ãã
- ã¡ãã»ã¼ã¸ã®ã¡ã¿ãã¼ã¿ãçµäºãããã¨ã示ã空è¡ã
- ãªãã·ã§ã³ã®ãæ¬ä½ãã«ã¯ãã¡ãã»ã¼ã¸ã«é¢é£ä»ãããããã¼ã¿ãæ ¼ç´ãã¾ããããã¯ããªã¯ã¨ã¹ãã§ãµã¼ãã¼ã«éä¿¡ãã POST ãã¼ã¿ãã¾ãã¯ã¬ã¹ãã³ã¹ã§ã¯ã©ã¤ã¢ã³ãã«è¿ããªã½ã¼ã¹ãªã©ã§ãã ã¡ãã»ã¼ã¸ã«æ¬ä½ãå«ã¾ãããã©ããã¯ãå é è¡ã¨ HTTP ãããã¼ã«ãã£ã¦æ±ºå®ããã¾ãã
HTTP ã¡ãã»ã¼ã¸ã®å é è¡ã¨ãããã¼ã¯ããªã¯ã¨ã¹ãã®ãããããã¨ãã¦ç·ç§°ããããã®å¾ã«ç¶ãã³ã³ãã³ããå«ãé¨åã¯ãæ¬ä½ãã¨å¼ã°ãã¦ãã¾ãã
HTTP ãªã¯ã¨ã¹ã
ã¦ã¼ã¶ã¼ãã¦ã§ããã¼ã¸ã§ãã©ã¼ã ãéä¿¡ããå¾ã«éä¿¡ããããæ¬¡ã® HTTP ã® POST ãªã¯ã¨ã¹ãã®ä¾ãè¦ã¦ããã¾ãããã
POST /users HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 49
name=FirstName+LastName&email=bsmth%40example.com
HTTP/1.x ãªã¯ã¨ã¹ãã®å
é è¡ï¼ä¸è¨ã®ä¾ã§ã¯ POST /users HTTP/1.1ï¼ã¯ããªã¯ã¨ã¹ãè¡ãã¨å¼ã°ãã3 ã¤ã®é¨åã§æ§æããã¦ãã¾ãã
<method> <request-target> <protocol>
<method>-
HTTP ã¡ã½ãã ï¼HTTP åè© ã¨ãå¼ã°ããï¼ã¯ããªã¯ã¨ã¹ãã®æå³ã¨æã¾ããçµæãè¨è¿°ãããå®ç¾©æ¸ã¿ã®ä¸é£ã®åèªã®ä¸ã¤ã§ãã ä¾ãã°ã
GETã¯ãã¯ã©ã¤ã¢ã³ãããªã½ã¼ã¹ãè¿ãã¦åãåããã¨ã叿ãã¦ãããã¨ã示ããPOSTã¯ãã¯ã©ã¤ã¢ã³ãããµã¼ãã¼ã«ãã¼ã¿ãéä¿¡ãã¦ãããã¨ãæå³ãã¦ãã¾ãã <request-target>-
ãªã¯ã¨ã¹ãã®ã¿ã¼ã²ããã¯é常ã絶対ã¾ãã¯ç¸å¯¾ã® URL ã§ããããªã¯ã¨ã¹ãã®ã³ã³ããã¹ãã«ãã£ã¦ç¹å¾´ä»ãããã¾ãã ãªã¯ã¨ã¹ãã®ã¿ã¼ã²ããã®æ¸å¼ã¯ã使ç¨ãã HTTP ã¡ã½ããã¨ãªã¯ã¨ã¹ãã®ã³ã³ããã¹ãã«ãã£ã¦ç°ãªãã¾ãã 詳細ã«ã¤ãã¦ã¯ãå¾è¿°ã®ãªã¯ã¨ã¹ãã¿ã¼ã²ããã®ç¯ã§èª¬æãã¾ãã
<protocol>-
HTTP ãã¼ã¸ã§ã³ã¯ãæ®ãã®ã¡ãã»ã¼ã¸ã®æ§é ãå®ç¾©ããã¬ã¹ãã³ã¹ã«ä½¿ç¨ããã¨æå¾ ããããã¼ã¸ã§ã³ãç¤ºãææ¨ã¨ãã¦æ©è½ãã¾ãã ããã¯ã»ã¨ãã©å¸¸ã«
HTTP/1.1ã§ããHTTP/0.9ããã³HTTP/1.0ã¯å»æ¢ããã¦ããããã§ãã HTTP/2 以éã§ã¯ããããã³ã«ãã¼ã¸ã§ã³ã¯æ¥ç¶ã®ã»ããã¢ããããçè§£ã§ãããããã¡ãã»ã¼ã¸ã«ã¯è¨è¼ããã¾ããã
ãªã¯ã¨ã¹ãã¿ã¼ã²ãã
ãªã¯ã¨ã¹ãã®å¯¾è±¡ãè¨è¿°ããæ¹æ³ã¯ããã¤ãããã¾ãããæãä¸è¬çãªã®ã¯ããªãªã¸ã³å½¢å¼ãã§ãã 以ä¸ã¯ãã¿ã¼ã²ããã®åã¨ããããã使ç¨ãããå ´åã®ä¸è¦§ã§ãã
-
ãªãªã¸ã³å½¢å¼ã§ã¯ãåä¿¡è ã¯çµ¶å¯¾ãã¹ã
Hostãããã¼ã®æ å ±ã¨çµåãã¾ãã ã¯ã¨ãªã¼æååã¯ãè¿½å æ å ±ã®ããã«ãã¹ã«è¿½å ãããã¨ãã§ãã¾ãï¼é常ã¯key=valueæ¸å¼åï¼ã ããã¯ãGETãPOSTãHEADãOPTIONSã®åã¡ã½ããã§ä½¿ç¨ããã¾ããhttpGET /ja/docs/Web/HTTP/Guides/Messages HTTP/1.1 -
絶対形å¼ã¯ããªã¼ã½ãªãã£ãå«ãå®å ¨ãª URL ã§ããããããã·ã¼ã«æ¥ç¶ããéã«
GETã¨ã¨ãã«ä½¿ç¨ããã¾ããhttpGET https://developer.mozilla.org/ja/docs/Web/HTTP/Guides/Messages HTTP/1.1 -
ãªã¼ã½ãªãã£å½¢å¼ã¯ã権éã¨ãã¼ããã³ãã³ (
:) ã§åºåã£ããã®ã§ãã ããã¯ãCONNECTã¡ã½ããã«ç¨ã㦠HTTP ãã³ãã«ãè¨å®ããéã«ã®ã¿ä½¿ç¨ããã¾ããhttpCONNECT developer.mozilla.org:443 HTTP/1.1 -
ã¢ã¹ã¿ãªã¹ã¯å½¢å¼ã¯ã
OPTIONSã§ãååä»ããªã½ã¼ã¹ã§ã¯ãªããµã¼ãã¼å ¨ä½ (*) ã表ãå ´åã«ã®ã¿ä½¿ç¨ããã¾ããhttpOPTIONS * HTTP/1.1
ãªã¯ã¨ã¹ããããã¼
ãããã¼ã¯ããªã¯ã¨ã¹ãã®å é è¡ã®å¾ã«ãæ¬ä½ã®åã«éä¿¡ãããã¡ã¿ãã¼ã¿ã§ãã ä¸è¨ã®ãã©ã¼ã éä¿¡ã®ä¾ã§ã¯ãã¡ãã»ã¼ã¸ã®ä»¥ä¸ã®è¡ããããã¼ã«ãªãã¾ãã
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 49
HTTP/1.x ã§ã¯ãããããã®ãããã¼ã¯ã大æåã¨å°æåãåºå¥ããªãæååã«ã³ãã³ (:) ã¨ããã®ãããã¼ã«å¿ããå½¢å¼ã®å¤ãç¶ããã®ã§ãã
å¤ãå«ããããã¼å
¨ä½ã¯ã1 è¡ã§æ§æããã¾ãã
Cookie ãããã¼ãªã©ããã®è¡ãé常ã«é·ããªãå ´åãããã¾ãã
ä¸é¨ã®ãããã¼ã¯ãªã¯ã¨ã¹ãã§ã®ã¿ä½¿ç¨ããã¾ããããªã¯ã¨ã¹ãã¨ã¬ã¹ãã³ã¹ã®ä¸¡æ¹ã§éä¿¡ã§ãããã®ãããã詳細ãªåé¡ãæã¤ãã®ãããã¾ãã
- ãªã¯ã¨ã¹ããããã¼ã¯ããªã¯ã¨ã¹ãã«è¿½å ã®ã³ã³ããã¹ããæä¾ãããããµã¼ãã¼ã«ãããªã¯ã¨ã¹ãã®å¦çæ¹æ³ã«è¿½å ã®ãã¸ãã¯ï¼æ¡ä»¶ä»ããªã¯ã¨ã¹ããªã©ï¼ã追å ããããã¾ãã
- 表ç¾ãããã¼ã¯ãã¡ãã»ã¼ã¸ã«æ¬ä½ãããå ´åã«ãªã¯ã¨ã¹ãã§éä¿¡ãããã¡ãã»ã¼ã¸ãã¼ã¿ã®å ã®å½¢å¼ã¨é©ç¨ããã¦ããã¨ã³ã³ã¼ãæ¹å¼ãè¨è¿°ãã¾ãã ããã«ãããåä¿¡è ã¯ããããã¯ã¼ã¯çµç±ã§éä¿¡ãããåã®ãªã½ã¼ã¹ãããã®ã¾ã¾ã®ç¶æ ã§åæ§ç¯ããæ¹æ³ãçè§£ãããã¨ãã§ãã¾ãã
ãªã¯ã¨ã¹ãæ¬ä½
ãªã¯ã¨ã¹ãæ¬ä½ã¯ããµã¼ãã¼ã«æ
å ±ãä¼éãããªã¯ã¨ã¹ãã®ä¸é¨ã§ãã
PATCHãPOSTãPUT ãªã¯ã¨ã¹ãã®ã¿ã«æ¬ä½ãåå¨ãã¾ãã
ãã©ã¼ã éä¿¡ã®ä¾ã§ã¯ããã®é¨åãæ¬ä½ã§ãã
name=FirstName+LastName&email=bsmth%40example.com
ãã©ã¼ã éä¿¡ãªã¯ã¨ã¹ãã®æ¬ä½ã«ã¯ã key=value ã®ãã¢ã¨ãã¦æ¯è¼çå°éã®æ
å ±ãå«ã¾ãã¦ãã¾ããããªã¯ã¨ã¹ãæ¬ä½ã«ã¯ããµã¼ãã¼ãæå¾
ããä»ã®åã®ãã¼ã¿ãå«ã¾ãã¦ããå ´åãããã¾ãã
{
"firstName": "Brian",
"lastName": "Smith",
"email": "bsmth@example.com",
"more": "data"
}
è¤æ°ã®ãã¼ããããªããã¼ã¿ãããã¾ãã
--delimiter123
Content-Disposition: form-data; name="field1"
value1
--delimiter123
Content-Disposition: form-data; name="field2"; filename="example.txt"
Text file contents
--delimiter123--
HTTP ã¬ã¹ãã³ã¹
ã¬ã¹ãã³ã¹ã¯ããªã¯ã¨ã¹ãã«å¯¾ãã¦ãµã¼ãã¼ãè¿ä¿¡ã¨ãã¦è¿ã HTTP ã¡ãã»ã¼ã¸ã§ãã
ã¬ã¹ãã³ã¹ã«ãããã¯ã©ã¤ã¢ã³ãã¯ãªã¯ã¨ã¹ãã®çµæãç¥ããã¨ãã§ãã¾ãã
次ã®ä¾ã¯ãæ°ããã¦ã¼ã¶ã¼ã使ãã POST ãªã¯ã¨ã¹ãã«å¯¾ãã HTTP/1.1 ã¬ã¹ãã³ã¹ã§ãã
HTTP/1.1 201 Created
Content-Type: application/json
Location: http://example.com/users/123
{
"message": "æ°ããã¦ã¼ã¶ã¼ã使ããã¾ãã",
"user": {
"id": 123,
"firstName": "ä¾ã®",
"lastName": "人ç©",
"email": "bsmth@example.com"
}
}
ã¬ã¹ãã³ã¹ã®å é è¡ï¼ä¸è¨ã® "HTTP/1.1 201 Created"ï¼ã¯ãã¹ãã¼ã¿ã¹è¡ãã¨å¼ã°ãã3 ã¤ã®é¨åã§æ§æããã¦ãã¾ãã
<protocol> <status-code> <status-text>
<protocol>-
以éã®ã¡ãã»ã¼ã¸ã® HTTP ãã¼ã¸ã§ã³ã
<status-code>-
æ°å¤ã®ã¹ãã¼ã¿ã¹ã³ã¼ãã§ããªã¯ã¨ã¹ããæåããã失æãããã示ãã¾ãã ããããã¹ãã¼ã¿ã¹ã³ã¼ãã¯
200ã404ã302ãªã©ã§ãã <status-text>-
ã¹ãã¼ã¿ã¹ããã¹ãã¯ã人éã HTTP ã¡ãã»ã¼ã¸ãçè§£ããã®ã«å½¹ç«ã¤ãã¹ãã¼ã¿ã¹ã³ã¼ãã®ç°¡æ½ã§ç´ç²ã«æ å ±çãªããã¹ãã«ãã説æã§ãã
ãããã¼
ã¬ã¹ãã³ã¹ã® HTTP ãããã¼ã¯ãä»ã®ãããã¼ã¨åæ§ã«ä¸å®ã®åºæ¬æ§é ã«å¾ãã¾ãã大æåã»å°æåãåºå¥ããªãæååã®å¾ã«ã³ãã³ (':') ã¨ããããã¼ã®ç¨®é¡ã«å¿ããæ§é ã®å¤ãç¶ãã¾ããå¤ãå«ããããã¼å
¨ä½ã¯ 1 è¡ã§æ§æããã¾ãã
使ç¨ã§ããã¬ã¹ãã³ã¹ãããã¼ã¯å¤æ°ããã¾ãããããã¯ããã¤ãã®ã°ã«ã¼ãã«åé¡ããã¾ãã
- ä¸è¬ãããã¼ã¯
Viaãªã©ãã¡ãã»ã¼ã¸å ¨ä½ã«é©ç¨ããããã®ã§ãã - ã¬ã¹ãã³ã¹ãããã¼ã¯
VaryãAccept-Rangesãªã©ãã¹ãã¼ã¿ã¹è¡ã§ä¼ããããªããµã¼ãã¼ã®è¿½å æ å ±ãä¸ãã¾ãã - 表ç¾ãããã¼ã¯
Content-Typeãªã©ãã¬ã¹ãã³ã¹ã®æ¬ä½ã«é©ç¨ããã¾ããé常ãã¬ã¹ãã³ã¹å ã«æ¬ä½ããªãå ´åã¯ãã®ãããªãããã¼ã¯éä¿¡ããã¾ããã

ã¬ã¹ãã³ã¹ãããã¼
ã¬ã¹ãã³ã¹ãããã¼ã¯ãã¬ã¹ãã³ã¹ã¨ã¨ãã«éä¿¡ãããã¡ã¿ãã¼ã¿ã§ãã
HTTP/1.x ã§ã¯ãåãããã¼ã¯ã大æåã¨å°æåãåºå¥ããªãæååã«ã³ãã³ (:) ã¨ã使ç¨ãããããã¼ã«å¿ããå½¢å¼ã®å¤ãç¶ããã®ã§ãã
ãªã¯ã¨ã¹ããããã¼ã¨åæ§ã«ãã¬ã¹ãã³ã¹ã«ã¯ãã¾ãã¾ãªãããã¼ãç¾ãã¾ããããããã¯æ¬¡ã®ããã«åé¡ããã¾ãã
- ã¬ã¹ãã³ã¹ãããã¼ã¯ãã¡ãã»ã¼ã¸ã«é¢ãã追å ã®ã³ã³ããã¹ãæ
å ±ãæä¾ããããã¯ã©ã¤ã¢ã³ããå¾ç¶ã®ãªã¯ã¨ã¹ããè¡ãæ¹æ³ã«è¿½å ã®ãã¸ãã¯ã追å ããããã¾ãã
ä¾ãã°ã
Serverã®ãããªãããã¼ã«ã¯ãµã¼ãã¼ã½ããã¦ã§ã¢ã«é¢ããæ å ±ãå«ã¾ããDateã«ã¯ã¬ã¹ãã³ã¹ãçæãããæ¥æãå«ã¾ãã¾ãã ã¾ããè¿ããããªã½ã¼ã¹ã«é¢ããæ å ±ããã¨ãã°ãã®ã³ã³ãã³ãã®å (Content-Type) ãããã£ãã·ã¥ã®æ¹æ³ (Cache-Control) ãªã©ãå«ã¾ãã¾ãã - 表ç¾ãããã¼ã¯ã¡ãã»ã¼ã¸ã«æ¬ä½ãããå ´åããã®ã¡ãã»ã¼ã¸ãã¼ã¿ã®å½¢å¼ããã³é©ç¨ãããã¨ã³ã³ã¼ãæ¹å¼ãè¨è¿°ãã¾ãã ä¾ãã°ãåããªã½ã¼ã¹ã§ãã£ã¦ããXML ã JSON ãªã©ã®ç¹å®ã®ã¡ãã£ã¢ã¿ã¤ãã§æ¸å¼åããã¦ããããç¹å®ã®è¨èªãå°åã«åããã¦ãã¼ã«ã©ã¤ãºããã¦ããããä¼éã®ããã«å§ç¸®ã¾ãã¯ãã®ä»ã®æ¹æ³ã§ã¨ã³ã³ã¼ãããã¦ãããããå ´åãããã¾ãã ããã«ããåä¿¡è ã¯ããããã¯ã¼ã¯ãä»ãã¦ä¼éãããåã®ãªã½ã¼ã¹ãããã®ã¾ã¾ã®ç¶æ ã§åæ§ç¯ããæ¹æ³ãçè§£ãããã¨ãã§ãã¾ãã
ã¬ã¹ãã³ã¹æ¬ä½
ã¯ã©ã¤ã¢ã³ãã¸ã®ã¬ã¹ãã³ã¹ã«ã¯ãã»ã¨ãã©ã®å ´åãã¬ã¹ãã³ã¹æ¬ä½ãå«ã¾ãã¾ãã
ãªã¯ã¨ã¹ããæåããå ´åãã¬ã¹ãã³ã¹æ¬ä½ã«ã¯ãã¯ã©ã¤ã¢ã³ãã GET ãªã¯ã¨ã¹ãã§è¦æ±ãããã¼ã¿ãå«ã¾ãã¾ãã
ã¯ã©ã¤ã¢ã³ãã®ãªã¯ã¨ã¹ãã«åé¡ãããå ´åãã¬ã¹ãã³ã¹æ¬ä½ã«ã¯ããªã¯ã¨ã¹ãã失æããçç±ã¨ããããæ°¸ç¶çãªãã®ã䏿çãªãã®ãã示åãã説æãè¨è¼ãããã®ãä¸è¬çã§ãã
ã¬ã¹ãã³ã¹æ¬ä½ã¯æ¬¡ã®ããã«ãªãå ´åãããã¾ãã
- åä¸ãªã½ã¼ã¹ã®æ¬ä½ã¯ã
Content-Typeã¨Content-Lengthã® 2 ã¤ã®ãããã¼ã§å®ç¾©ããã¾ããé·ãã䏿ãªå ´åããTransfer-Encodingãchunkedã«è¨å®ãããè¤æ°ã®å¡ã«ã¨ã³ã³ã¼ãããã¦ããå ´åãããã¾ãã - è¤æ°ãªã½ã¼ã¹ã®æ¬ä½ã®å ´åãæ¬ä½ã¯è¤æ°ã®é¨åããæ§æãããããããã«ã¯ç°ãªãæ å ±ã®æçãå«ã¾ãã¾ãã ãã«ããã¼ãæ¬ä½ã¯é常ãHTML ãã©ã¼ã ã§ä½¿ããã¾ãããç¯å²ãªã¯ã¨ã¹ãã¸ã®ã¬ã¹ãã³ã¹ã¨ãã¦éä¿¡ãããå ´åãããã¾ãã
201 Created ã 204 No Content ã®ããã«ãã¡ãã»ã¼ã¸ã³ã³ãã³ããå«ããå¿
è¦ãªããªã¯ã¨ã¹ãã«å¿çããã¹ãã¼ã¿ã¹ã³ã¼ãã®ã¬ã¹ãã³ã¹ã«ã¯ãæ¬ä½ã¯åå¨ãã¾ããã
HTTP/2 ã¡ãã»ã¼ã¸
HTTP/1.x ã¯ãèªã¿ããããæ§ç¯ãç°¡åãªããã¹ããã¼ã¹ã®ã¡ãã»ã¼ã¸ã使ç¨ãã¦ãã¾ããããã®çµæãããã¤ãã®æ¬ ç¹ãããã¾ãã
gzip ããã®ä»ã®å§ç¸®ã¢ã«ã´ãªãºã ã使ç¨ãã¦ã¡ãã»ã¼ã¸æ¬ä½ãå§ç¸®ãããã¨ã¯ã§ãã¾ããããããã¼ã¯å§ç¸®ã§ãã¾ããã
ã¯ã©ã¤ã¢ã³ãã¨ãµã¼ãã¼ã®éã®å¯¾è©±ã«ããããããã¼ã¯ãå¤ãã®å ´åãä¼¼ã¦ãããã¾ã£ããåãã§ãã£ãããã¾ãããåãæ¥ç¶ã§é£ç¶ããã¡ãã»ã¼ã¸ã®ä¸ã§éè¤ãã¾ãã
éè¤ããããã¹ããå§ç¸®ãããé常ã«å¹ççãªã¡ã½ããã¯æ°å¤ãç¥ããã¦ããããã®å¤ãã¯å©ç¨ããã¦ããªãããã大éã®å¸¯åå¹
ãç¯ç´ã§ããå¯è½æ§ãããã¾ãã
HTTP/1.x ã«ã¯ãããããªãã©ã¤ã³ (HOL) ããããã³ã°ã¨å¼ã°ããåé¡ãåå¨ãã¾ããããã¯ãã¯ã©ã¤ã¢ã³ãããµã¼ãã¼ããã®ã¬ã¹ãã³ã¹ãå¾ ã£ã¦ããæ¬¡ã®ãªã¯ã¨ã¹ããéä¿¡ããªããã°ãªããªãã¨ãããã®ã§ãã HTTP ãã¤ãã©ã¤ã³ ã¯ãã®åé¡ãåé¿ãããã¨ãã¾ãããã対å¿ãä¸ååã§è¤éã§ãããããã»ã¨ãã©ä½¿ç¨ããã¦ããããæ£ããåä½ããããã¨ãå°é£ã§ãã ãªã¯ã¨ã¹ããåæã«éä¿¡ããã«ã¯ãè¤æ°ã®æ¥ç¶ãéãå¿ è¦ãããã¾ããã¾ããTCP ã®ã¹ãã¼ã¹ã¿ã¼ãã«ãããã¦ã©ã¼ã ï¼ç¢ºç«æ¸ã¿ã§ãã¸ã¼ãªï¼æ¥ç¶ã¯ã³ã¼ã«ãæ¥ç¶ãããå¹ççã§ãã
HTTP/1.1 ã§ 2 ã¤ã®ãªã¯ã¨ã¹ãã並åã«è¡ãã«ã¯ã2 ã¤ã®æ¥ç¶ãéãå¿ è¦ãããã¾ãã

ããã¯ããã©ã¦ã¶ã¼ãåæã«ãã¦ã³ãã¼ããã¦ã¬ã³ããªã³ã°ã§ãããªã½ã¼ã¹ã®æ°ã«å¶éããããã¨ãæå³ãã¦ãããé常ã6 ã¤ã®ä¸¦åæ¥ç¶ã«å¶éããã¦ãã¾ãã
HTTP/2 ã§ã¯ãåä¸ã® TCP æ¥ç¶ã§è¤æ°ã®ãªã¯ã¨ã¹ãã¨ã¬ã¹ãã³ã¹ãåæã«å¦çãããã¨ãã§ãã¾ãã ããã¯ãã¡ãã»ã¼ã¸ããã¤ããªã¼ãã¬ã¼ã ã§ã©ãããããªã¯ã¨ã¹ãã¨ã¬ã¹ãã³ã¹ãçªå·ä»ãã®ã¹ããªã¼ã ã§æ¥ç¶ã«éä¿¡ãããã¨ã§å®ç¾ããã¦ãã¾ãã ãã¼ã¿ãã¬ã¼ã ã¨ãããã¼ãã¬ã¼ã ã¯å¥åã«å¦çãããããããããã¼ã¯ HPACK ã¨ããã¢ã«ã´ãªãºã ã«ãã£ã¦å§ç¸®ãããã¨ãã§ãã¾ãã åã TCP æ¥ç¶ã使ç¨ãã¦è¤æ°ã®ãªã¯ã¨ã¹ããåæã«å¦çãããã¨ããå¤éåãã¨å¼ã³ã¾ãã

ãªã¯ã¨ã¹ãã¯å¿ ãããé çªã«å®è¡ãããã¨ã¯éãã¾ããããã¨ãã°ãã¹ããªã¼ã 9 ã¯ã¹ããªã¼ã 7 ãå®äºããã®ãå¾ ã¤å¿ è¦ã¯ããã¾ããã é常ãè¤æ°ã®ã¹ããªã¼ã ããã®ãã¼ã¿ã¯æ¥ç¶ä¸ã§ã¤ã³ã¿ã¼ãªã¼ãããããããã¹ããªã¼ã 9 㨠7 ã¯ã¯ã©ã¤ã¢ã³ãã§åæã«åä¿¡ãããã¨ãã§ãã¾ãã ãããã³ã«ã«ã¯ãããããã®ã¹ããªã¼ã ã¾ãã¯ãªã½ã¼ã¹ã®åªå 度ãè¨å®ããã¡ã«ããºã ãããã¾ãã åªå 度ã®ä½ããªã½ã¼ã¹ã¯ãç°ãªãã¹ããªã¼ã ã§éä¿¡ãããå ´åãåªå 度ã®é«ããªã½ã¼ã¹ããã帯åå¹ ãå°ãªã使ç¨ãã¾ããã¾ããæåã«å¦çãã¹ãéè¦ãªãªã½ã¼ã¹ãããå ´åãåãæ¥ç¶ä¸ã§å¹æçã«é çªã«éä¿¡ãããã¨ãã§ãã¾ãã
ä¸è¬çã«ãHTTP/1.x ã«è¿½å ããããã¹ã¦ã®æ¹åç¹ãæ½è±¡åã«ãããããããéçºè ã HTTP/1.x ä¸ã§ HTTP/2 ã使ç¨ããããã«ä½¿ç¨ãã API ã«ã¯ãã»ã¨ãã©å¤æ´ã¯å¿ è¦ããã¾ããã HTTP/2 ããã©ã¦ã¶ã¼ã¨ãµã¼ãã¼ã®ä¸¡æ¹ã§å©ç¨å¯è½ã«ãªãã¨ãèªåçã«ãªã³ã«ãªãã使ç¨ããã¾ãã
æ¬ä¼¼ãããã¼
HTTP/2 ã®ã¡ãã»ã¼ã¸ã«ãããé¡èãªå¤æ´ç¹ã® 1 ã¤ã¯ãæ¬ä¼¼ãããã¼ã®æ¡ç¨ã§ãã
HTTP/1.x ã§ã¯ã¡ãã»ã¼ã¸ã®éå§è¡ã使ç¨ããã¦ãã¾ããããHTTP/2 ã§ã¯ : ã§å§ã¾ãç¹å¥ãªæ¬ä¼¼ãããã¼ãã£ã¼ã«ãã使ç¨ããã¾ãã
ãªã¯ã¨ã¹ãã«ã¯ã以ä¸ã®æ¬ä¼¼ãããã¼ãããã¾ãã
:method- HTTP ã¡ã½ããã:scheme- 対象 URI ã®ã¹ãã¼ã é¨åã§ãå¤ãã®å ´å㯠HTTP(S)ã:authority- 対象 URI ã®ãªã¼ã½ãªãã£é¨åã:path- 対象 URI ã®ãã¹é¨åã¨ã¯ã¨ãªã¼é¨åã
ã¬ã¹ãã³ã¹ã«ã¯ã1 ã¤ã®æ¬ä¼¼ãããã¼ãããªããããã¯ã¬ã¹ãã³ã¹ã®ã³ã¼ããæä¾ãã :status ã§ãã
HTTP/2 ãªã¯ã¨ã¹ãã nghttp ã使ç¨ãã¦ä½æããexample.com ãåå¾ããã¨ããªã¯ã¨ã¹ããèªã¿åããããå½¢ã§åºåããã¾ãã
ãã®ã³ãã³ãã使ç¨ãã¦ãªã¯ã¨ã¹ãã使ãããã¨ãã§ãã¾ããããã§ã-n ãªãã·ã§ã³ã¯ãã¦ã³ãã¼ããããã¼ã¿ãç ´æ£ãã -v 㯠'verbose' ï¼è©³ç´°ï¼åºåç¨ã§ããã¬ã¼ã ã®åä¿¡ã¨éä¿¡ã表示ãã¾ãã
nghttp -nv https://www.example.com
åºåãä¸ã«åãã£ã¦è¦ã¦ããã¨ãéä¿¡ããã³åä¿¡ãããããããã®ãã¬ã¼ã ã®ã¿ã¤ãã³ã°ã確èªã§ãã¾ãã
[ 0.123] <send|recv> <frame-type> <frame-details>
ãã®åºåã«ã¤ãã¦ãã¾ã詳ãã説æããå¿
è¦ã¯ããã¾ãããããã® HEADERS ãã¬ã¼ã ã® [ 0.123] send HEADERS frame ... ã¨ããå½¢ã®é¨åã«æ³¨ç®ãã¦ãã ããã
ãããã¼ã®éä¿¡å¾ã®è¡ã«ã¯ã次ã®è¡ã表示ããã¾ãã
[ 0.447] send HEADERS frame ...
...
:method: GET
:path: /
:scheme: https
:authority: www.example.com
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/1.61.0
HTTP/1.x ã®ä½¿ç¨ã«æ
£ãã¦ããæ¹ã§ããã°ããã®è¡¨ç¤ºã¯ãªãã¿ã®ãããã®ã ã¨æãã¾ãããã®ã¬ã¤ãã®åã®ç« ã§èª¬æããæ¦å¿µã¯ãããã§ãé©ç¨ããã¾ãã
ããã¯ãexample.com ã«å¯¾ãã GET ãªã¯ã¨ã¹ããå«ããã¤ããªã¼ãã¬ã¼ã ããnghttp ã«ãã£ã¦èªã¿åãå¯è½ãªå½¢ã«å¤æãããã®ã§ãã
ã³ãã³ãã®åºåã®ä¸ã®æ¹ãè¦ãã¨ããµã¼ãã¼ããåä¿¡ããã¹ããªã¼ã ã® 1 ã¤ã«ã:status ã¨ããæ¬ä¼¼ãããã¼ãè¨è¼ããã¦ãã¾ãã
[ 0.433] recv (stream_id=13) :status: 200
[ 0.433] recv (stream_id=13) content-encoding: gzip
[ 0.433] recv (stream_id=13) age: 112721
[ 0.433] recv (stream_id=13) cache-control: max-age=604800
[ 0.433] recv (stream_id=13) content-type: text/html; charset=UTF-8
[ 0.433] recv (stream_id=13) date: Fri, 13 Sep 2024 12:56:07 GMT
[ 0.433] recv (stream_id=13) etag: "3147526947+gzip"
...
ãã®ã¡ãã»ã¼ã¸ããã¿ã¤ãã³ã°ã¨ã¹ããªã¼ã ID ãé¤å»ããã¨ãããã«è¦æ £ãããã®ã«ãªãã¯ãã§ãã
:status: 200
content-encoding: gzip
age: 112721
ã¡ãã»ã¼ã¸ãã¬ã¼ã ãã¹ããªã¼ã IDãããã³æ¥ç¶ã®ç®¡çæ¹æ³ã«ã¤ãã¦ããã«è©³ãã説æãããã¨ã¯ããã®ã¬ã¤ãã®ç¯å²ãè¶ ãã¾ãããHTTP/2 ã¡ãã»ã¼ã¸ãçè§£ãããããã°ããããã«ã¯ããã®è¨äºã§ç´¹ä»ããç¥èã¨ãã¼ã«ã使ç¨ããã°ååã§ãã
ã¾ã¨ã
ãã®ã¬ã¤ãã§ã¯ãHTTP/1.1 å½¢å¼ã使ç¨ãã¦ãHTTP ã¡ãã»ã¼ã¸ã®æ§é ã®æ¦è¦ã説æãã¾ããã ã¾ããHTTP ã®æå³ã¥ããæ ¹æ¬çã«å¤æ´ãããã¨ãªããHTTP/1.x æ§æã¨åºç¤ã¨ãªããã©ã³ã¹ãã¼ããããã³ã«ã®éã«ã¬ã¤ã¤ã¼ãå°å ¥ãã HTTP/2 ã¡ãã»ã¼ã¸ã®ãã¬ã¼ã ã«ã¤ãã¦ã説æãã¾ããã HTTP/2 ã¯ããªã¯ã¨ã¹ãã®å¤éåãå¯è½ã«ãããã¨ã§ãHTTP/1.x ã«åå¨ããhead-of-line blockingã®åé¡ã解決ããããã«å°å ¥ããã¾ããã
HTTP/2 ã§æ®ã£ã¦ãã課é¡ã® 1 ã¤ã¯ããããã³ã«ã¬ãã«ã§ããããªãã©ã¤ã³ããããã³ã°ãä¿®æ£ãããã«ãããããããTCPï¼ãã©ã³ã¹ãã¼ãã¬ãã«ï¼å ã®ããããªãã©ã¤ã³ããããã³ã°ã«ããããã©ã¼ãã³ã¹ã®ããã«ããã¯ãä¾ç¶ã¨ãã¦åå¨ãã¦ãããã¨ã§ãã HTTP/3 ã§ã¯ãTCP ã®ä»£ããã« UDP ä¸ã«æ§ç¯ããããããã³ã«ã§ãã QUIC ã使ç¨ãããã¨ã§ããã®å¶éã«å¯¾å¦ãã¦ãã¾ãã ãã®å¤æ´ã«ãããããã©ã¼ãã³ã¹ãæ¹åãããæ¥ç¶ã®ã»ããã¢ããæéãç縮ãããå£åã¾ãã¯ä¿¡é ¼æ§ã®ä½ããããã¯ã¼ã¯ã§ã®å®å®æ§ãåä¸ãã¾ãã HTTP/3 ã¯ãHTTP ã®ã³ã¢ã¨ãªãæå³ã¥ãããã®ã¾ã¾ç¶æãã¦ããããããªã¯ã¨ã¹ãã¡ã½ãããã¹ãã¼ã¿ã¹ã³ã¼ãããããã¼ãªã©ã®æ©è½ã¯ã3 ã¤ã®ä¸»è¦ãª HTTP ãã¼ã¸ã§ã³ãã¹ã¦ã§ä¸è²«ãã¦ãã¾ãã
HTTP/1.1 ã®æå³è«ããã§ã«çè§£ãã¦ããæ¹ã¯ãHTTP/2 ããã³ HTTP/3 ãçè§£ããããã®å¼·åºãªåºç¤ããã§ã«æã£ã¦ãã¾ãã 主ãªéãã¯ããããã®æå³è«ããã©ã³ã¹ãã¼ãã¬ãã«ã§ã©ã®ããã«å®è£ ããã¦ãããã¨ããç¹ã«ããã¾ãã ãã®ã¬ã¤ãã®ä¾ã¨æ¦å¿µã«å¾ããã¨ã§ãHTTP ã使ç¨ãã¦ä½æ¥ããã¡ãã»ã¼ã¸ã®æå³ãããã³ã¢ããªã±ã¼ã·ã§ã³ã HTTP ã使ç¨ãã¦ãã¼ã¿ãéä¿¡ããã³åä¿¡ããæ¹æ³ãçè§£ã§ããããã«ãªã£ãã¯ãã§ãã