HTTP/1.x çè¿æ¥ç®¡ç
è¿æ¥ç®¡çæ¯ä¸ä¸ª HTTP çå ³é®è¯é¢ï¼æå¼åä¿æè¿æ¥å¨å¾å¤§ç¨åº¦ä¸å½±åçç½ç«å Web åºç¨ç¨åºçæ§è½ãå¨ HTTP/1.x éæå¤ç§æ¨¡åï¼çè¿æ¥ãé¿è¿æ¥å HTTP æµæ°´çº¿ã
HTTP çä¼ è¾å议主è¦ä¾èµäº TCP æ¥æä¾ä»å®¢æ·ç«¯å°æå¡å¨ç«¯ä¹é´çè¿æ¥ã卿©æï¼HTTP 使ç¨ä¸ä¸ªç®åçæ¨¡åæ¥å¤çè¿æ ·çè¿æ¥ãè¿äºè¿æ¥ççå½å¨ææ¯çæçï¼æ¯åèµ·ä¸ä¸ªè¯·æ±æ¶é½ä¼å建ä¸ä¸ªæ°çè¿æ¥ï¼å¹¶å¨æ¶å°åºçæ¶ç«å³å ³éã
è¿ä¸ªç®åçæ¨¡å对æ§è½æå 天çéå¶ï¼æå¼æ¯ä¸ä¸ª TCP è¿æ¥é½æ¯ç¸å½èè´¹èµæºçæä½ã客æ·ç«¯åæå¡å¨ç«¯ä¹é´éè¦äº¤æ¢å¥½äºä¸ªæ¶æ¯ãå½è¯·æ±åèµ·æ¶ï¼ç½ç»å»¶è¿å带宽é½ä¼å¯¹æ§è½é æå½±åãç°ä»£æµè§å¨å¾å¾è¦åèµ·å¾å¤æ¬¡è¯·æ±ï¼åå 个æè æ´å¤ï¼æè½æ¿å°æéç宿´ä¿¡æ¯ï¼è¯æäºè¿ä¸ªæ©ææ¨¡åçæçä½ä¸ã
æä¸¤ä¸ªæ°ç模åå¨ HTTP/1.1 è¯çäºãé¦å æ¯é¿è¿æ¥æ¨¡åï¼å®ä¼ä¿æè¿æ¥å»å®æå¤æ¬¡è¿ç»ç请æ±ï¼åå°äºä¸æéæ°æå¼è¿æ¥çæ¶é´ãç¶åæ¯ HTTP æµæ°´çº¿æ¨¡åï¼å®è¿è¦æ´å è¿ä¸äºï¼å¤ä¸ªè¿ç»ç请æ±çè³é½ä¸ç¨çå¾ ç«å³è¿åå°±å¯ä»¥è¢«åéï¼è¿æ ·å°±åå°äºèè´¹å¨ç½ç»å»¶è¿ä¸çæ¶é´ã

夿³¨ï¼HTTP/2 æ°å¢äºå ¶ä»è¿æ¥ç®¡ç模åã
è¦æ³¨æçä¸ä¸ªéç¹æ¯ HTTP çè¿æ¥ç®¡çéç¨äºä¸¤ä¸ªè¿ç»èç¹ä¹é´çè¿æ¥ï¼å®æ¯éè·³ï¼Hop-by-hopï¼æ 头ï¼è䏿¯ç«¯å°ç«¯ï¼End-to-endï¼æ 头ã彿¨¡åç¨äºä»å®¢æ·ç«¯å°ç¬¬ä¸ä¸ªä»£çæå¡å¨çè¿æ¥åä»ä»£çæå¡å¨å°ç®æ æå¡å¨ä¹é´çè¿æ¥æ¶ï¼æè
ä»»æä¸é´ä»£çï¼ææå¯è½æ¯ä¸ä¸æ ·çãHTTP å议头åä¸åè¿æ¥æ¨¡åçå½±åï¼æ¯å¦ Connection å Keep-Aliveï¼å°±æ¯éè·³æ 头æ 头ï¼å®ä»¬ç弿¯å¯ä»¥è¢«ä¸é´èç¹ä¿®æ¹çã
ä¸ä¸ªç¸å ³çè¯é¢æ¯ HTTP è¿æ¥åçº§çæ¦å¿µï¼å ¶ä¸ HTTP/1.1 è¿æ¥å级为ä¸ä¸ªä¸åçåè®®ï¼æ¯å¦ TLS/1.0ãWebsocketãçè³ææå½¢å¼ç HTTP/2ãæ´å¤ç»èåé åè®®å级æºå¶ã
çè¿æ¥
HTTP ææ©æç模åå HTTP/1.0 çé»è®¤æ¨¡åï¼æ¯çè¿æ¥ãæ¯ä¸ä¸ª HTTP 请æ±é½ç±å®èªå·±ç¬ç«çè¿æ¥å®æï¼è¿æå³çåèµ·æ¯ä¸ä¸ª HTTP 请æ±ä¹åé½ä¼æä¸æ¬¡ TCP æ¡æï¼è䏿¯è¿ç»ä¸æçã
TCP åè®®æ¡ææ¬èº«å°±æ¯èè´¹æ¶é´çï¼æä»¥ TCP å¯ä»¥ä¿ææ´å¤ççè¿æ¥æ¥éåºè´è½½ãçè¿æ¥ç ´åäº TCP å ·å¤çè½åï¼å¹¶ä¸æ°çå·è¿æ¥éä½äºå ¶æ§è½ã
è¿æ¯ HTTP/1.0 çé»è®¤æ¨¡åï¼å¦ææ²¡ææå® Connection åè®®å¤´ï¼æè
æ¯å¼è¢«è®¾ç½®ä¸º closeï¼ãèå¨ HTTP/1.1 ä¸ï¼åªæå½ Connection 被设置为 close æ¶æä¼ç¨å°è¿ä¸ªæ¨¡åã
夿³¨ï¼é¤éæ¯è¦å ¼å®¹ä¸ä¸ªé常å¤èçï¼ä¸æ¯æé¿è¿æ¥çç³»ç»ï¼æ²¡æä¸ä¸ªä»¤äººä¿¡æççç±ç»§ç»ä½¿ç¨è¿ä¸ªæ¨¡åã
é¿è¿æ¥
çè¿æ¥æä¸¤ä¸ªæ¯è¾å¤§çé®é¢ï¼å建æ°è¿æ¥èè´¹çæ¶é´å°¤ä¸ºææ¾ï¼å¦å¤ TCP è¿æ¥çæ§è½åªæå¨è¯¥è¿æ¥è¢«ä½¿ç¨ä¸æ®µæ¶é´åï¼çè¿æ¥ï¼æè½å¾å°æ¹åã为äºç¼è§£è¿äºé®é¢ï¼é¿è¿æ¥çæ¦å¿µä¾¿è¢«è®¾è®¡åºæ¥äºï¼çè³å¨ HTTP/1.1 ä¹åãæè ï¼è¿è¢«ç§°ä¹ä¸ºä¸ä¸ª keep-alive è¿æ¥ã
ä¸ä¸ªé¿è¿æ¥ä¼ä¿æä¸æ®µæ¶é´ï¼éå¤ç¨äºåéä¸ç³»å请æ±ï¼èçäºæ°å»º TCP è¿æ¥æ¡æçæ¶é´ï¼è¿å¯ä»¥å©ç¨ TCP çæ§è½å¢å¼ºè½åãå½ç¶è¿ä¸ªè¿æ¥ä¹ä¸ä¼ä¸ç´ä¿ççï¼è¿æ¥å¨ç©ºé²ä¸æ®µæ¶é´åä¼è¢«å
³éï¼æå¡å¨å¯ä»¥ä½¿ç¨ Keep-Alive åè®®å¤´æ¥æå®ä¸ä¸ªæå°çè¿æ¥ä¿ææ¶é´ï¼ã
é¿è¿æ¥ä¹è¿æ¯æç¼ºç¹çï¼å°±ç®æ¯å¨ç©ºé²ç¶æï¼å®è¿æ¯ä¼æ¶èæå¡å¨èµæºï¼èä¸å¨éè´è½½æ¶ï¼è¿æå¯è½éå DoS æ»å»ãè¿ç§åºæ¯ä¸ï¼å¯ä»¥ä½¿ç¨éé¿è¿æ¥ï¼å³å°½å¿«å ³éé£äºç©ºé²çè¿æ¥ï¼ä¹è½å¯¹æ§è½æææåã
HTTP/1.0 éé»è®¤å¹¶ä¸ä½¿ç¨é¿è¿æ¥ãæ Connection 设置æ close 以å¤çå
¶ä»åæ°é½å¯ä»¥è®©å
¶ä¿æé¿è¿æ¥ï¼é常ä¼è®¾ç½®ä¸º retry-afterã
å¨ HTTP/1.1 éï¼é»è®¤å°±æ¯é¿è¿æ¥çï¼ä¸åéè¦æ 头ï¼ä½æä»¬è¿æ¯ä¼æå®å ä¸ï¼ä¸ä¸æä¸ªæ¶åå 为æç§åå è¦éåå° HTTP/1.0 å¢ï¼ã
HTTP æµæ°´çº¿
夿³¨ï¼HTTP æµæ°´çº¿å¨ç°ä»£æµè§å¨ä¸å¹¶ä¸æ¯é»è®¤è¢«å¯ç¨çï¼
- æç¼ºé·ç代çæå¡å¨ä»ç¶å¾å¸¸è§ï¼è¿äºä¼å¯¼è´ Web å¼åäººåæ æ³é¢è§åè½»æ¾è¯æç奿ªåä¸ç¨³å®è¡ä¸ºã
- æ£ç¡®çå®ç°æµæ°´çº¿æ¯å¤æçï¼ä¼ è¾ä¸çèµæºå¤§å°ãå¤å°ææç RTT ä¼è¢«ç¨å°ä»¥åææå¸¦å®½é½ä¼ç´æ¥å½±åå°æµæ°´çº¿æä¾çæ¹åãä¸ç¥éè¿äºçè¯ï¼éè¦çæ¶æ¯å¯è½è¢«å»¶è¿å°ä¸éè¦çæ¶æ¯åé¢ãè¿ä¸ªéè¦æ§çæ¦å¿µçè³ä¼æ¼å为影åå°é¡µé¢å¸å±ï¼å æ¤ HTTP æµæ°´çº¿å¨å¤§å¤æ°æ åµä¸å¸¦æ¥çæ¹å并䏿æ¾ã
- æµæ°´çº¿åå¶äºé头é»å¡ï¼HOLï¼é®é¢ã
ç±äºè¿äºåå ï¼æµæ°´çº¿å·²è¢« HTTP/2 䏿´å¥½çç®æ³ââå¤è·¯å¤ç¨ï¼multiplexingï¼æå代ã
é»è®¤æ åµä¸ï¼HTTP è¯·æ±æ¯æé¡ºåºååºçãä¸ä¸ä¸ªè¯·æ±åªæå¨å½åè¯·æ±æ¶å°ååºè¿åæä¼è¢«ååºãç±äºä¼åå°ç½ç»å»¶è¿å带宽çéå¶ï¼å¨ä¸ä¸ä¸ªè¯·æ±è¢«åéå°æå¡å¨ä¹åï¼å¯è½éè¦çå¾ å¾é¿æ¶é´ã
æµæ°´çº¿æ¯å¨å䏿¡é¿è¿æ¥ä¸ååºè¿ç»ç请æ±ï¼èä¸ç¨çå¾ åºçè¿åãè¿æ ·å¯ä»¥é¿å è¿æ¥å»¶è¿ãç论ä¸è®²ï¼æ§è½è¿ä¼å 为两个 HTTP è¯·æ±æå¯è½è¢«æå å°ä¸ä¸ª TCP æ¶æ¯å ä¸èå¾å°æåãå°±ç® HTTP 请æ±ä¸æçç»§ç»ï¼å°ºå¯¸ä¼å¢å ï¼ä½è®¾ç½® TCP çæå¤§å段大å°ï¼MSSï¼é项ï¼ä»ç¶è¶³å¤å å«ä¸ç³»åç®åç请æ±ã
并䏿¯ææç±»åç HTTP 请æ±é½è½ç¨å°æµæ°´çº¿ï¼åªæå¹çæ¹å¼ï¼æ¯å¦ GETãHEADãPUT å DELETE è½å¤è¢«å®å
¨å°éè¯ã妿ææ
éåçæ¶ï¼æµæ°´çº¿çå
容è¦è½è¢«è½»æçéè¯ã
ä»å¤©ï¼ææéµå¾ª HTTP/1.1 æ åç代çåæå¡å¨é½åºè¯¥æ¯ææµæ°´çº¿ï¼è½ç¶å®é æ åµä¸è¿æ¯æå¾å¤éå¶ï¼ä¸ä¸ªå¾éè¦çåå æ¯ï¼ç®å没æç°ä»£æµè§å¨é»è®¤å¯ç¨è¿ä¸ªç¹æ§ã
åååç
夿³¨ï¼é¤éä½ æç´§æ¥èè¿«åçéæ±ï¼ä¸è¦ä½¿ç¨è¿ä¸è¿æ¶çææ¯ï¼èæ¯åçº§å° HTTP/2ãå¨ HTTP/2 éï¼ååååçå°±æ²¡å¿ è¦äºï¼HTTP/2 çè¿æ¥å¯ä»¥å¾å¥½çå¤çå¹¶åçæ ä¼å 级ç请æ±ãåååççè³ä¼å½±åæ§è½ã大夿° HTTP/2 çå®ç°è¿ä¼ä½¿ç¨ä¸ç§ç§°ä½è¿æ¥èåçææ¯å»å°è¯å并被åççååã
ä½ä¸º HTTP/1.x çè¿æ¥ï¼è¯·æ±æ¯åºååçï¼åªææ¬æ¥æ¯æ åºçï¼å¨æ²¡æè¶³å¤åºå¤§å¯ç¨ç带宽æ¶ï¼ä¹æ ä»ä¼åãä¸ä¸ªè§£å³æ¹æ¡æ¯ï¼æµè§å¨ä¸ºæ¯ä¸ªåå建ç«å¤ä¸ªè¿æ¥ï¼ä»¥å®ç°å¹¶å请æ±ãæ¾ç»é»è®¤çè¿æ¥æ°é为 2 å° 3 个ï¼ç°å¨æ¯è¾å¸¸ç¨çå¹¶åè¿æ¥æ°å·²ç»å¢å å° 6 æ¡ã妿å°è¯å¤§äºè¿ä¸ªæ°åï¼å°±æè§¦åæå¡å¨ DoS ä¿æ¤çé£é©ã
妿æå¡å¨ç«¯æ³è¦æ´å¿«éçååºç½ç«æåºç¨ç¨åºçåºçï¼å®å¯ä»¥è¿«ä½¿å®¢æ·ç«¯å»ºç«æ´å¤çè¿æ¥ãä¾å¦ï¼ä¸è¦å¨åä¸ä¸ªååä¸è·åææèµæºï¼å设æä¸ªå忝 www.example.comï¼æä»¬å¯ä»¥æå®æåæå¥½å 个ååï¼www1.example.comãwww2.example.comãwww3.example.comãææè¿äºåå齿ååä¸å°æå¡å¨ï¼æµè§å¨ä¼åæ¶ä¸ºæ¯ä¸ªååå»ºç« 6 æ¡è¿æ¥ï¼å¨æä»¬è¿ä¸ªä¾åä¸ï¼è¿æ¥æ°ä¼è¾¾å° 18 æ¡ï¼ãè¿ä¸ææ¯è¢«ç§°ä½åååçã

ç»è®º
æ¹è¿åçè¿æ¥ç®¡çæå¤§çæåäº HTTP çæ§è½ãä¸ç®¡æ¯ HTTP/1.1 è¿æ¯ HTTP/1.0ï¼ä½¿ç¨é¿è¿æ¥ââç´å°è¿å ¥ç©ºé²ç¶æââé½è½è¾¾å°æä½³çæ§è½ãç¶èï¼è§£å³æµæ°´çº¿æ ééè¦è®¾è®¡æ´å è¿çè¿æ¥ç®¡ç模åï¼è¿äºæ¨¡åå·²ç»è¢«çº³å ¥ HTTP/2 äºã