HTTPæ¯Hyper Text Transfer Protocolï¼è¶ ææ¬ä¼ è¾åè®®ï¼ç缩åãå®çåå±æ¯ä¸ç»´ç½åä¼ï¼World Wide Web Consortiumï¼åInternetå·¥ä½å°ç»IETFï¼Internet Engineering Task Forceï¼åä½çç»æï¼RFC 1945å®ä¹äºHTTP/1.0çæ¬ãRFC 2616å®ä¹äºä»å¤©æ®é使ç¨çä¸ä¸ªçæ¬ââHTTP 1.1ã HTTPåè®®æ¯ç¨äºä»WWWæå¡å¨ä¼ è¾è¶ ææ¬å°æ¬å°æµè§å¨çä¼ éåè®®ï¼å®å¯ä»¥ä½¿æµè§å¨æ´å é«æï¼ä½¿ç½ç»ä¼ è¾åå°ãå®ä¸ä» ä¿è¯è®¡ç®æºæ£ç¡®å¿«éå°ä¼ è¾è¶ ææ¬ææ¡£ï¼è¿ç¡®å®ä¼ è¾ææ¡£ä¸çåªä¸é¨åï¼ä»¥ååªé¨åå 容é¦å æ¾ç¤º(å¦ææ¬å äºå¾å½¢)çãhttpç¹ç¹ï¼
1.æ¯æ客æ·/æå¡å¨æ¨¡å¼ãHTTPå议永è¿é½æ¯å®¢æ·ç«¯å起请æ±ï¼æå¡å¨åéååºï¼è¿æ ·å°±éå¶äºä½¿ç¨HTTPåè®®ï¼æ æ³å®ç°å¨å®¢æ·ç«¯æ²¡æå起请æ±çæ¶åï¼æå¡å¨å°æ¶æ¯æ¨éç»å®¢æ·ç«¯ã
2.ç®åå¿«éï¼å®¢æ·åæå¡å¨è¯·æ±æå¡æ¶ï¼åªéä¼ é请æ±æ¹æ³åè·¯å¾ã请æ±æ¹æ³å¸¸ç¨çæGETãHEADãPOSTãæ¯ç§æ¹æ³è§å®äºå®¢æ·ä¸æå¡å¨èç³»çç±»åä¸åãç±äºHTTPåè®®ç®åï¼ä½¿å¾HTTPæå¡å¨çç¨åºè§æ¨¡å°ï¼å èéä¿¡é度å¾å¿«ã
3.çµæ´»ï¼HTTPå è®¸ä¼ è¾ä»»æç±»åçæ°æ®å¯¹è±¡ãæ£å¨ä¼ è¾çç±»åç±Content-Typeå 以æ è®°ã
4.æ è¿æ¥ï¼æ è¿æ¥çå«ä¹æ¯éå¶æ¯æ¬¡è¿æ¥åªå¤çä¸ä¸ªè¯·æ±ãæå¡å¨å¤çå®å®¢æ·ç请æ±ï¼å¹¶æ¶å°å®¢æ·çåºçåï¼å³æå¼è¿æ¥ãéç¨è¿ç§æ¹å¼å¯ä»¥èçä¼ è¾æ¶é´ã
5.æ ç¶æï¼HTTPåè®®æ¯æ ç¶æåè®®ãæ ç¶ææ¯æå议对äºäºå¡å¤ç没æè®°å¿è½åã缺å°ç¶ææå³çå¦æåç»å¤çéè¦åé¢çä¿¡æ¯ï¼åå®å¿ é¡»éä¼ ï¼è¿æ ·å¯è½å¯¼è´æ¯æ¬¡è¿æ¥ä¼ éçæ°æ®éå¢å¤§ãå¦ä¸æ¹é¢ï¼å¨æå¡å¨ä¸éè¦å åä¿¡æ¯æ¶å®çåºçå°±è¾å¿«ã
HTTPåè®®é常æ¿è½½äºTCPåè®®ä¹ä¸ï¼ææ¶ä¹æ¿è½½äºTLSæSSLåè®®å±ä¹ä¸ï¼è¿ä¸ªæ¶åï¼å°±æäºæ们常说çHTTPSãå¦ä¸å¾æ示ï¼
é»è®¤HTTPç端å£å·ä¸º80ï¼HTTPSç端å£å·ä¸º443ã
1ãå·¥ä½æµç¨ï¼ï¼ä¸æ¬¡HTTPæä½ç§°ä¸ºä¸ä¸ªäºå¡ï¼å ¶å·¥ä½è¿ç¨å¯å为åæ¥ï¼
 1ï¼é¦å 客æ·æºä¸æå¡å¨éè¦å»ºç«è¿æ¥ãï¼tcpä¸æ¬¡æ¡æï¼ã
 2ï¼å»ºç«è¿æ¥åï¼å®¢æ·æºåéä¸ä¸ªè¯·æ±ç»æå¡å¨ï¼è¯·æ±æ¹å¼çæ ¼å¼ä¸ºï¼ç»ä¸èµæºæ è¯ç¬¦ï¼URLï¼ãåè®®çæ¬å·ï¼åè¾¹æ¯MIMEä¿¡æ¯å æ¬è¯·æ±ä¿®é¥°ç¬¦ã客æ·æºä¿¡æ¯åå¯è½çå 容ã
 3ï¼æå¡å¨æ¥å°è¯·æ±åï¼ç»äºç¸åºçååºä¿¡æ¯ï¼å ¶æ ¼å¼ä¸ºä¸ä¸ªç¶æè¡ï¼å æ¬ä¿¡æ¯çåè®®çæ¬å·ãä¸ä¸ªæåæé误ç代ç ï¼åè¾¹æ¯MIMEä¿¡æ¯å æ¬æå¡å¨ä¿¡æ¯ãå®ä½ä¿¡æ¯åå¯è½çå 容ã
 4ï¼å®¢æ·ç«¯æ¥æ¶æå¡å¨æè¿åçä¿¡æ¯éè¿æµè§å¨æ¾ç¤ºå¨ç¨æ·çæ¾ç¤ºå±ä¸ï¼ç¶å客æ·æºä¸æå¡å¨æå¼è¿æ¥ã å¦æå¨ä»¥ä¸è¿ç¨ä¸çæä¸æ¥åºç°é误ï¼é£ä¹äº§çé误çä¿¡æ¯å°è¿åå°å®¢æ·ç«¯ï¼ææ¾ç¤ºå±è¾åºã对äºç¨æ·æ¥è¯´ï¼è¿äºè¿ç¨æ¯ç±HTTPèªå·±å®æçï¼ç¨æ·åªè¦ç¨é¼ æ ç¹å»ï¼çå¾ ä¿¡æ¯æ¾ç¤ºå°±å¯ä»¥äºã
éè¿æå 软件åææ°æ®å (å¦ä¸å¾)å¯æ¸ æ°ççå°å®¢æ·ç«¯æµè§å¨ï¼ip为192.168.2.33ï¼ä¸æå¡å¨ç交äºè¿ç¨ï¼Â
 1ï¼No1ï¼æµè§å¨ï¼192.168.2.33ï¼åæå¡å¨ï¼220.181.50.118ï¼ååºè¿æ¥è¯·æ±ãæ¤ä¸ºTCPä¸æ¬¡æ¡æ第ä¸æ¥ï¼æ¤æ¶ä»å¾ä¸å¯ä»¥çåºï¼ä¸ºSYNï¼seq:X ï¼x=0ï¼Â
 2ï¼No2ï¼æå¡å¨ï¼220.181.50.118ï¼ååºäºæµè§å¨ï¼192.168.2.33ï¼ç请æ±ï¼å¹¶è¦æ±ç¡®è®¤ï¼æ¤æ¶ä¸ºï¼SYNï¼ACKï¼æ¤æ¶seqï¼yï¼y为0ï¼ï¼ACKï¼x+1ï¼ä¸º1ï¼ãæ¤ä¸ºä¸æ¬¡æ¡æç第äºæ¥ï¼Â
 3ï¼No3ï¼æµè§å¨ï¼192.168.2.33ï¼ååºäºæå¡å¨ï¼220.181.50.118ï¼ç确认ï¼è¿æ¥æåã为ï¼ACKï¼æ¤æ¶seqï¼x+1ï¼ä¸º1ï¼ï¼ACKï¼y+1ï¼ä¸º1ï¼ãæ¤ä¸ºä¸æ¬¡æ¡æç第ä¸æ¥ï¼  4ï¼No4ï¼æµè§å¨ï¼192.168.2.33ï¼ååºä¸ä¸ªé¡µé¢HTTP请æ±ï¼
 5ï¼No5ï¼æå¡å¨ï¼220.181.50.118ï¼ç¡®è®¤ï¼
 6ï¼No6ï¼æå¡å¨ï¼220.181.50.118ï¼åéæ°æ®ï¼Â
 7ï¼No7ï¼å®¢æ·ç«¯æµè§å¨ï¼192.168.2.33ï¼ç¡®è®¤ï¼Â
 8ï¼No14ï¼å®¢æ·ç«¯ï¼192.168.2.33ï¼ååºä¸ä¸ªå¾çHTTP请æ±ï¼
 9ï¼No15ï¼æå¡å¨ï¼220.181.50.118ï¼åéç¶æååºç 200 OK â¦â¦
2ãhttp请æ±(ä¸ä¸ªè¯·æ±æ请æ±è¡ã请æ±å¤´ã空è¡ã请æ±æ°æ®åé¨åç»æ)
1ã请æ±è¡ï¼è¯·æ±è¡ä»¥ä¸ä¸ªæ¹æ³ç¬¦å·å¼å¤´ï¼ä»¥ç©ºæ ¼åå¼ï¼åé¢è·ç请æ±çURIååè®®ççæ¬ï¼æåå ä¸å车ï¼æ ¼å¼å¦ä¸ï¼GET /index.html HTTP/1.1 Â
 HTTPåè®®ç请æ±æ¹æ³æGETãPOSTãHEADãPUTãDELETEãOPTIONSãTRACEãCONNECTã
1)GET
æ常è§çä¸ç§è¯·æ±æ¹å¼ï¼å½å®¢æ·ç«¯è¦ä»æå¡å¨ä¸è¯»åææ¡£æ¶ï¼ä½¿ç¨çé½æ¯GETæ¹å¼ãGETæ¹æ³è¦æ±æå¡å¨å°URLå®ä½çèµæºæ¾å¨ååºæ¥æçæ°æ®é¨åï¼åéç»å®¢æ·ç«¯ã使ç¨GETæ¹æ³æ¶ï¼è¯·æ±åæ°å对åºçå¼éå å¨URLåé¢ï¼å©ç¨ä¸ä¸ªé®å·ï¼â?âï¼ä»£è¡¨URLçç»å°¾ä¸è¯·æ±åæ°çå¼å§ï¼ä¼ éåæ°é¿åº¦åéå¶ãä¾å¦ï¼/index.jsp?id=100&op=bind,è¿æ ·éè¿GETæ¹å¼ä¼ éçæ°æ®ç´æ¥è¡¨ç¤ºå¨å°åä¸ï¼æ以æ们å¯ä»¥æ请æ±ç»æ以é¾æ¥çå½¢å¼åéç»å¥½åã以ç¨googleæç´¢domety为ä¾ï¼Requestæ ¼å¼å¦ä¸ï¼
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, */*
Referer: <a href="http://www.google.cn/" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >http://www.google.cn/</a>
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
Host: <a href="http://www.google.cn" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >www.google.cn</a>
Connection: Keep-Alive
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r
å¯ä»¥çå°ï¼GETæ¹å¼ç请æ±ä¸è¬ä¸å å«â请æ±å 容âé¨åï¼è¯·æ±æ°æ®ä»¥å°åçå½¢å¼è¡¨ç°å¨è¯·æ±è¡ã
2).POST
对äºä¸é¢æå°çä¸éå使ç¨GETæ¹å¼çæ åµï¼å¯ä»¥èè使ç¨POSTæ¹å¼ï¼å 为使ç¨POSTæ¹æ³å¯ä»¥å 许客æ·ç«¯ç»æå¡å¨æä¾ä¿¡æ¯è¾å¤ãPOSTæ¹æ³å°è¯·æ±åæ°å°è£ å¨HTTP请æ±æ°æ®ä¸ï¼ä»¥å称/å¼çå½¢å¼åºç°ï¼å¯ä»¥ä¼ è¾å¤§éæ°æ®ï¼è¿æ ·POSTæ¹å¼å¯¹ä¼ éçæ°æ®å¤§å°æ²¡æéå¶ï¼èä¸ä¹ä¸ä¼æ¾ç¤ºå¨URLä¸ãè¿ä»¥ä¸é¢çæç´¢domety为ä¾ï¼å¦æ使ç¨POSTæ¹å¼çè¯ï¼æ ¼å¼å¦ä¸ï¼
POST /search HTTP/1.1 Â
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,Â
application/msword, application/x-silverlight, application/x-shockwave-flash, */* Â
Referer: <a href="http://www.google.cn/" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >http://www.google.cn/</a> Â
Accept-Language: zh-cn Â
Accept-Encoding: gzip, deflateÂ
Content-Length: 22Â
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) Â
Host: <a href="http://www.google.cn" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >www.google.cn</a> Â
Connection: Keep-Alive Â
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;Â
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r Â
hl=zh-CN&source=hp&q=dometyÂ
å¯ä»¥çå°ï¼POSTæ¹å¼è¯·æ±è¡ä¸ä¸å å«æ°æ®å符串ï¼è¿äºæ°æ®ä¿åå¨â请æ±å 容âé¨åï¼åæ°æ®ä¹é´ä¹æ¯ä½¿ç¨â&â符å·éå¼ã
3).HEAD
HEADå°±åGETï¼åªä¸è¿æå¡ç«¯æ¥åå°HEAD请æ±ååªè¿åååºå¤´ï¼èä¸ä¼åéååºå 容ãå½æ们åªéè¦æ¥çæ个页é¢çç¶æçæ¶åï¼ä½¿ç¨HEADæ¯é常é«æçï¼å 为å¨ä¼ è¾çè¿ç¨ä¸çå»äºé¡µé¢å 容ã
2ã请æ±å¤´é¨ï¼è¯·æ±å¤´é¨ç±å ³é®å/å¼å¯¹ç»æï¼æ¯è¡ä¸å¯¹ï¼å ³é®ååå¼ç¨è±æåå·â:âåéã请æ±å¤´é¨éç¥æå¡å¨æå ³äºå®¢æ·ç«¯è¯·æ±çä¿¡æ¯ï¼å ¸åç请æ±å¤´æï¼
- User-Agentï¼äº§ç请æ±çæµè§å¨ç±»åã
- Acceptï¼å®¢æ·ç«¯å¯è¯å«çå 容类åå表ã
- Hostï¼è¯·æ±ç主æºåï¼å 许å¤ä¸ªåååå¤ä¸ä¸ªIPå°åï¼å³èæ主æºï¼
- Referer头åï¼å 许客æ·ç«¯æå®è¯·æ±uriçæºèµæºå°åï¼è¿å¯ä»¥å 许æå¡å¨çæåéé¾è¡¨ï¼å¯ç¨æ¥ç»éãä¼åcacheçï¼
- Connection: Keep-Alive ï¼è¡¨ç¤ºæ¯å¦éè¦æä¹ è¿æ¥ï¼
- cookieï¼cookieä¿¡æ¯ï¼
3.空è¡ï¼æåä¸ä¸ªè¯·æ±å¤´ä¹åæ¯ä¸ä¸ªç©ºè¡ï¼åéå车符åæ¢è¡ç¬¦ï¼éç¥æå¡å¨ä»¥ä¸ä¸åæ请æ±å¤´ã
4ã请æ±æ°æ®ï¼ 请æ±æ°æ®ä¸å¨GETæ¹æ³ä¸ä½¿ç¨ï¼èæ¯å¨POSTæ¹æ³ä¸ä½¿ç¨ï¼getæ¹æ³æ°æ®æ¾å°äºurlå°ååé¢ï¼ãPOSTæ¹æ³éç¨äºéè¦å®¢æ·å¡«å表åçåºåãä¸è¯·æ±æ°æ®ç¸å ³çæ常使ç¨ç请æ±å¤´æ¯Content-TypeåContent-Lengthã
3ãhttpååºï¼httpååºæä¸é¨åç»æï¼ç¶æè¡ãæ¶æ¯å¤´ãç¸åºæ£æï¼
1ãç¶æè¡æ ¼å¼å¦ä¸ï¼HTTP-Version Status-Code Reason-Phrase CRLF
Â å ¶ä¸ï¼HTTP-Version表示æå¡å¨HTTPåè®®ççæ¬ï¼Status-Code表示æå¡å¨ååçååºç¶æ代ç ï¼Reason-Phrase表示ç¶æ代ç çææ¬æè¿°ã常è§ç¶æ代ç ãç¶ææè¿°ç说æå¦ä¸ã
- 200 OKï¼å®¢æ·ç«¯è¯·æ±æåã
- 400 Bad Requestï¼å®¢æ·ç«¯è¯·æ±æè¯æ³é误ï¼ä¸è½è¢«æå¡å¨æç解ã
- 401 Unauthorizedï¼è¯·æ±æªç»ææï¼è¿ä¸ªç¶æ代ç å¿ é¡»åWWW-Authenticateæ¥å¤´åä¸èµ·ä½¿ç¨ã
- 403 Forbiddenï¼æå¡å¨æ¶å°è¯·æ±ï¼ä½æ¯æç»æä¾æå¡ã
- 404 Not Foundï¼è¯·æ±èµæºä¸åå¨ï¼ä¸¾ä¸ªä¾åï¼è¾å ¥äºé误çURLã
- 500 Internal Server Errorï¼æå¡å¨åçä¸å¯é¢æçé误ã
- 503 Server Unavailableï¼æå¡å¨å½åä¸è½å¤ç客æ·ç«¯ç请æ±ï¼ä¸æ®µæ¶é´åå¯è½æ¢å¤æ£å¸¸ï¼ä¸¾ä¸ªä¾åï¼HTTP/1.1 200 OKï¼CRLFï¼ã
2ãç¸åºæ¥å¤´ï¼ 常ç¨çååºæ¥å¤´
- Locationååºæ¥å¤´åç¨äºéå®åæ¥åè å°ä¸ä¸ªæ°çä½ç½®ãLocationååºæ¥å¤´å常ç¨å¨æ´æ¢ååçæ¶åã
- Serverååºæ¥å¤´åå å«äºæå¡å¨ç¨æ¥å¤ç请æ±ç软件信æ¯ãä¸User-Agent请æ±æ¥å¤´åæ¯ç¸å¯¹åºçãegï¼Serverï¼Apache-Coyote/1.1
- WWW-Authenticateååºæ¥å¤´åå¿ é¡»è¢«å å«å¨401ï¼æªææçï¼ååºæ¶æ¯ä¸ï¼å®¢æ·ç«¯æ¶å°401ååºæ¶æ¯æ¶åï¼å¹¶åéAuthorizationæ¥å¤´å请æ±æå¡å¨å¯¹å ¶è¿è¡éªè¯æ¶ï¼æå¡ç«¯ååºæ¥å¤´å°±å å«è¯¥æ¥å¤´åãegï¼WWW-Authenticate:Basic realm="Basic Auth Test!"  //å¯ä»¥çåºæå¡å¨å¯¹è¯·æ±èµæºéç¨çæ¯åºæ¬éªè¯æºå¶ã
3ãç¸åºæ£æï¼æå¡å¨è¿åçèµæºçå 容 ã å®ä¾ï¼
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
ï¼htmlï¼
ï¼headï¼
ï¼titleï¼Wrox Homepageï¼/titleï¼
ï¼/headï¼
ï¼bodyï¼
ï¼!-- body goes here --ï¼
ï¼/bodyï¼
ï¼/htmlï¼
4ãtelnetè¿è¡httpæµè¯
5ãHTTP/1.0åHTTP/1.1çæ¯è¾ HTTP/1.0åHTTP/1.1çæ¯è¾
1ãHTTP/1.0 æ¯æ¬¡è¯·æ±é½éè¦å»ºç«æ°çTCPè¿æ¥ï¼è¿æ¥ä¸è½å¤ç¨ãHTTP/1.1 æ°ç请æ±å¯ä»¥å¨ä¸æ¬¡è¯·æ±å»ºç«çTCPè¿æ¥ä¹ä¸åéï¼è¿æ¥å¯ä»¥å¤ç¨ãä¼ç¹æ¯åå°éå¤è¿è¡TCPä¸æ¬¡æ¡æçå¼éï¼æé«æçã 注æï¼å¨åä¸ä¸ªTCPè¿æ¥ä¸ï¼æ°ç请æ±éè¦çä¸æ¬¡è¯·æ±æ¶å°ååºåï¼æè½åéã
2ãHoståHTTP1.1å¨Requestæ¶æ¯å¤´é头å¤äºä¸ä¸ªHostå, HTTP1.0å没æè¿ä¸ªåãå¯è½HTTP1.0çæ¶å认为ï¼å»ºç«TCPè¿æ¥çæ¶åå·²ç»æå®äºIPå°åï¼è¿ä¸ªIPå°åä¸åªæä¸ä¸ªhostã Egï¼
  GET /pub/WWW/TheProject.html HTTP/1.1
  Host: www.w3.org
3ãç¶æååºç
ç¶æååºç 100 (Continue) ç¶æ代ç ç使ç¨ï¼å 许客æ·ç«¯å¨årequestæ¶æ¯bodyä¹åå ç¨request headerè¯æ¢ä¸ä¸serverï¼çserverè¦ä¸è¦æ¥æ¶request bodyï¼åå³å®è¦ä¸è¦årequest bodyã 客æ·ç«¯å¨Request头é¨ä¸å å«Expect: 100-continue    Serverçå°ä¹åå¢å¦æå100 (Continue) è¿ä¸ªç¶æ代ç ï¼å®¢æ·ç«¯å°±ç»§ç»årequest bodyãè¿ä¸ªæ¯HTTP1.1ææçã å¦å¤å¨HTTP/1.1ä¸è¿å¢å äº101ã203ã205ççæ§ç¶æååºç
4ã请æ±æ¹å¼
HTTP1.1å¢å äºOPTIONS, PUT, DELETE, TRACE, CONNECTè¿äºRequestæ¹æ³.
ããã
5ãå ¶ä»ï¼
1ã为äºæé«ç¨æ·ä½¿ç¨æµè§å¨æ¶çæ§è½ï¼ ç°ä»£æµè§å¨è¿æ¯æ并åç访é®æ¹å¼ï¼æµè§ä¸ä¸ªç½é¡µæ¶åæ¶å»ºç«å¤ä¸ªè¿æ¥ï¼ä»¥è¿ éè·å¾ä¸ä¸ªç½é¡µä¸çå¤ä¸ªå¾æ ï¼è¿æ ·è½æ´å¿«éå®ææ´ä¸ªç½é¡µçä¼ è¾ãHTTP1.1ä¸æä¾äºè¿ç§æç»è¿æ¥çæ¹å¼ï¼èä¸ä¸ä»£HTTPåè®®ï¼HTTP-NGæ´å¢å äºæå ³ä¼è¯æ§å¶ã丰å¯çå 容ååçæ¹å¼çæ¯æï¼æ¥æä¾æ´é«æççè¿æ¥ã
2ãCookieåSessionï¼
CookieåSessioné½ä¸ºäºç¨æ¥ä¿åç¶æä¿¡æ¯ï¼é½æ¯ä¿å客æ·ç«¯ç¶æçæºå¶ï¼å®ä»¬é½æ¯ä¸ºäºè§£å³HTTPæ ç¶æçé®é¢èæåçåªåã Sessionå¯ä»¥ç¨Cookieæ¥å®ç°ï¼ä¹å¯ä»¥ç¨URLååçæºå¶æ¥å®ç°ãç¨Cookieæ¥å®ç°çSessionå¯ä»¥è®¤ä¸ºæ¯å¯¹Cookieæ´é«çº§çåºç¨ã
1ï¼ä¸¤è æ¯è¾ï¼CookieåSessionæ以ä¸ææ¾çä¸åç¹ï¼Â
- Cookieå°ç¶æä¿åå¨å®¢æ·ç«¯ï¼Sessionå°ç¶æä¿åå¨æå¡å¨ç«¯ï¼Â
- Cookiesæ¯æå¡å¨å¨æ¬å°æºå¨ä¸åå¨çå°æ®µææ¬å¹¶éæ¯ä¸ä¸ªè¯·æ±åéè³åä¸ä¸ªæå¡å¨ãCookieææ©å¨RFC2109ä¸å®ç°ï¼åç»RFC2965åäºå¢å¼ºãç½ç»æå¡å¨ç¨HTTP头å客æ·ç«¯åécookiesï¼å¨å®¢æ·ç»ç«¯ï¼æµè§å¨è§£æè¿äºcookies并å°å®ä»¬ä¿å为ä¸ä¸ªæ¬å°æ件ï¼å®ä¼èªå¨å°åä¸æå¡å¨çä»»ä½è¯·æ±ç¼ä¸è¿äºcookiesãSession并没æå¨HTTPçåè®®ä¸å®ä¹ï¼Â
- Sessionæ¯é对æ¯ä¸ä¸ªç¨æ·çï¼åéçå¼ä¿åå¨æå¡å¨ä¸ï¼ç¨ä¸ä¸ªsessionIDæ¥åºåæ¯åªä¸ªç¨æ·sessionåé,è¿ä¸ªå¼æ¯éè¿ç¨æ·çæµè§å¨å¨è®¿é®çæ¶åè¿åç»æå¡å¨ï¼å½å®¢æ·ç¦ç¨cookieæ¶ï¼è¿ä¸ªå¼ä¹å¯è½è®¾ç½®ä¸ºç±getæ¥è¿åç»æå¡å¨ï¼Â
- å°±å®å ¨æ§æ¥è¯´ï¼å½ä½ 访é®ä¸ä¸ªä½¿ç¨session çç«ç¹ï¼åæ¶å¨èªå·±æºåä¸å»ºç«ä¸ä¸ªcookieï¼å»ºè®®å¨æå¡å¨ç«¯çSESSIONæºå¶æ´å®å ¨äº.å 为å®ä¸ä¼ä»»æ读å客æ·åå¨çä¿¡æ¯ã
2ï¼Sessionæºå¶ï¼
Sessionæºå¶æ¯ä¸ç§æå¡å¨ç«¯çæºå¶ï¼æå¡å¨ä½¿ç¨ä¸ç§ç±»ä¼¼äºæ£å表çç»æï¼ä¹å¯è½å°±æ¯ä½¿ç¨æ£å表ï¼æ¥ä¿åä¿¡æ¯ã å½ç¨åºéè¦ä¸ºæ个客æ·ç«¯ç请æ±å建ä¸ä¸ªsessionçæ¶åï¼æå¡å¨é¦å æ£æ¥è¿ä¸ªå®¢æ·ç«¯ç请æ±éæ¯å¦å·²å å«äºä¸ä¸ªsessionæ è¯ - 称为 session idï¼å¦æå·²å å«ä¸ä¸ªsession idå说æ以åå·²ç»ä¸ºæ¤å®¢æ·ç«¯å建è¿sessionï¼æå¡å¨å°±æç §session idæè¿ä¸ª sessionæ£ç´¢åºæ¥ä½¿ç¨ï¼å¦ææ£ç´¢ä¸å°ï¼å¯è½ä¼æ°å»ºä¸ä¸ªï¼ï¼å¦æ客æ·ç«¯è¯·æ±ä¸å å«session idï¼å为æ¤å®¢æ·ç«¯å建ä¸ä¸ªsession并ä¸çæä¸ä¸ªä¸æ¤sessionç¸å ³èçsession idï¼session idçå¼åºè¯¥æ¯ä¸ä¸ªæ¢ä¸ä¼éå¤ï¼åä¸å®¹æ被æ¾å°è§å¾ä»¥ä»¿é çå符串ï¼è¿ä¸ª session idå°è¢«å¨æ¬æ¬¡ååºä¸è¿åç»å®¢æ·ç«¯ä¿åã
3ï¼Sessionçå®ç°æ¹å¼
1.使ç¨Cookieæ¥å®ç°:
æå¡å¨ç»æ¯ä¸ªSessionåé ä¸ä¸ªå¯ä¸çJSESSIONIDï¼å¹¶éè¿Cookieåéç»å®¢æ·ç«¯ã å½å®¢æ·ç«¯åèµ·æ°ç请æ±çæ¶åï¼å°å¨Cookie头ä¸æºå¸¦è¿ä¸ªJSESSIONIDãè¿æ ·æå¡å¨è½å¤æ¾å°è¿ä¸ªå®¢æ·ç«¯å¯¹åºçSessionã æµç¨å¦ä¸å¾æ示ï¼
  Â
2.使ç¨URLåæ¾æ¥å®ç°:
URLååæ¯ææå¡å¨å¨åéç»æµè§å¨é¡µé¢çææé¾æ¥ä¸é½æºå¸¦JSESSIONIDçåæ°ï¼è¿æ ·å®¢æ·ç«¯ç¹å»ä»»ä½ä¸ä¸ªé¾æ¥é½ä¼æJSESSIONID带ä¼æå¡å¨ã å¦æç´æ¥å¨æµè§å¨è¾å ¥æå¡ç«¯èµæºçurlæ¥è¯·æ±è¯¥èµæºï¼é£ä¹Sessionæ¯å¹é ä¸å°çãTomcat对Sessionçå®ç°ï¼æ¯ä¸å¼å§åæ¶ä½¿ç¨CookieåURLååæºå¶ï¼å¦æåç°å®¢æ·ç«¯æ¯æCookieï¼å°±ç»§ç»ä½¿ç¨Cookieï¼åæ¢ä½¿ç¨URLååãå¦æåç°Cookie被ç¦ç¨ï¼å°±ä¸ç´ä½¿ç¨URLååãjspå¼åå¤çå°Sessionçæ¶åï¼å¯¹é¡µé¢ä¸çé¾æ¥è®°å¾ä½¿ç¨response.encodeURL() ã
3)å¨J2EE项ç®ä¸Session失æçå ç§æ åµ
1.Sessionè¶ æ¶ï¼Sessionå¨æå®æ¶é´å 失æï¼ä¾å¦30åéï¼è¥å¨30åéå 没ææä½ï¼åSessionä¼å¤±æï¼ä¾å¦å¨web.xmlä¸è¿è¡äºå¦ä¸è®¾ç½®ï¼Â
  <session-config>Â
    <session-timeout>30</session-timeout> //åä½ï¼åé
  </session-config>
2.使ç¨session.invalidate()æç¡®çå»æSessionã
4)ä¸Cookieç¸å ³çHTTPæ©å±å¤´
-  Cookieï¼å®¢æ·ç«¯å°æå¡å¨è®¾ç½®çCookieè¿åå°æå¡å¨ï¼Â
-  Set-Cookieï¼æå¡å¨å客æ·ç«¯è®¾ç½®Cookieï¼Â
-  Cookie2 (RFC2965)ï¼ï¼å®¢æ·ç«¯æ示æå¡å¨æ¯æCookieççæ¬ï¼Â
-  Set-Cookie2 (RFC2965)ï¼æå¡å¨å客æ·ç«¯è®¾ç½®Cookieã
5)Cookieçæµç¨
æå¡å¨å¨ååºæ¶æ¯ä¸ç¨Set-Cookie头å°Cookieçå 容åéç»å®¢æ·ç«¯ï¼å®¢æ·ç«¯å¨æ°ç请æ±ä¸å°ç¸åçå 容æºå¸¦å¨Cookie头ä¸åéç»æå¡å¨ãä»èå®ç°ä¼è¯çä¿æã æµç¨å¦ä¸å¾æ示ï¼
3ãç¼åçå®ç°åç
1ï¼ä»ä¹æ¯Webç¼å
WEBç¼å(cache)ä½äºWebæå¡å¨å客æ·ç«¯ä¹é´ã ç¼åä¼æ ¹æ®è¯·æ±ä¿åè¾åºå 容çå¯æ¬ï¼ä¾å¦html页é¢ï¼å¾çï¼æ件ï¼å½ä¸ä¸ä¸ªè¯·æ±æ¥å°çæ¶åï¼å¦ææ¯ç¸åçURLï¼ç¼åç´æ¥ä½¿ç¨å¯æ¬ååºè®¿é®è¯·æ±ï¼èä¸æ¯åæºæå¡å¨å次åé请æ±ã HTTPåè®®å®ä¹äºç¸å ³çæ¶æ¯å¤´æ¥ä½¿WEBç¼åå°½å¯è½å¥½çå·¥ä½ã
2ï¼ç¼åçä¼ç¹
-  åå°ç¸åºå»¶è¿ï¼å 为请æ±ä»ç¼åæå¡å¨ï¼ç¦»å®¢æ·ç«¯æ´è¿ï¼èä¸æ¯æºæå¡å¨è¢«ç¸åºï¼è¿ä¸ªè¿ç¨èæ¶æ´å°ï¼è®©webæå¡å¨çä¸å»ç¸åºæ´å¿«ã
-  åå°ç½ç»å¸¦å®½æ¶èï¼å½å¯æ¬è¢«éç¨æ¶ä¼åä½å®¢æ·ç«¯ç带宽æ¶èï¼å®¢æ·å¯ä»¥èç带宽费ç¨ï¼æ§å¶å¸¦å®½çéæ±çå¢é¿å¹¶æ´æäºç®¡çã
3ï¼ä¸ç¼åç¸å ³çHTTPæ©å±æ¶æ¯å¤´
- Expiresï¼æ示ååºå 容è¿æçæ¶é´ï¼æ ¼æå¨æ²»æ¶é´GMTÂ
- Cache-Controlï¼æ´ç»è´çæ§å¶ç¼åçå 容
- Last-Modifiedï¼ååºä¸èµæºæåä¸æ¬¡ä¿®æ¹çæ¶é´
- ETagï¼ååºä¸èµæºçæ ¡éªå¼ï¼å¨æå¡å¨ä¸æ个æ¶æ®µæ¯å¯ä¸æ è¯çãÂ
- Dateï¼æå¡å¨çæ¶é´Â
- If-Modified-Sinceï¼å®¢æ·ç«¯ååç该èµæºæåä¸æ¬¡ä¿®æ¹çæ¶é´ï¼åLast-ModifiedãÂ
- If-None-Matchï¼å®¢æ·ç«¯ååç该èµæºçæ£éªå¼ï¼åETagã
4ï¼å®¢æ·ç«¯ç¼åçæç常è§æµç¨
æå¡å¨æ¶å°è¯·æ±æ¶ï¼ä¼å¨200OKä¸åé该èµæºçLast-ModifiedåETag头ï¼å®¢æ·ç«¯å°è¯¥èµæºä¿åå¨cacheä¸ï¼å¹¶è®°å½è¿ä¸¤ä¸ªå±æ§ãå½å®¢æ·ç«¯éè¦åéç¸åç请æ±æ¶ï¼ä¼å¨è¯·æ±ä¸æºå¸¦If-Modified-SinceåIf-None-Match两个头ã两个头çå¼åå«æ¯ååºä¸Last-ModifiedåETag头çå¼ãæå¡å¨éè¿è¿ä¸¤ä¸ªå¤´å¤ææ¬å°èµæºæªåçååï¼å®¢æ·ç«¯ä¸éè¦éæ°ä¸è½½ï¼è¿å304ååºã常è§æµç¨å¦ä¸å¾æ示ï¼
5ï¼Webç¼åæºå¶
HTTP/1.1ä¸ç¼åçç®çæ¯ä¸ºäºå¨å¾å¤æ åµä¸åå°åé请æ±ï¼åæ¶å¨è®¸å¤æ åµä¸å¯ä»¥ä¸éè¦åéå®æ´ååºãåè åå°äºç½ç»åè·¯çæ°éï¼HTTPå©ç¨ä¸ä¸ªâè¿æï¼expirationï¼âæºå¶æ¥ä¸ºæ¤ç®çãåè åå°äºç½ç»åºç¨ç带宽ï¼HTTPç¨âéªè¯ï¼validationï¼âæºå¶æ¥ä¸ºæ¤ç®çã HTTPå®ä¹äº3ç§ç¼åæºå¶ï¼Â
- Freshnessï¼å 许ä¸ä¸ªååºæ¶æ¯å¯ä»¥å¨æºæå¡å¨ä¸è¢«éæ°æ£æ¥ï¼å¹¶ä¸å¯ä»¥ç±æå¡å¨å客æ·ç«¯æ¥æ§å¶ãä¾å¦ï¼Expiresååºå¤´ç»äºä¸ä¸ªææ¡£ä¸å¯ç¨çæ¶é´ãCache-Controlä¸çmax-ageæ è¯ææäºç¼åçæé¿æ¶é´ï¼
- Validationï¼ç¨æ¥æ£æ¥ä»¥ä¸ä¸ªç¼åçååºæ¯å¦ä»ç¶å¯ç¨ãä¾å¦ï¼å¦æä¸ä¸ªååºæä¸ä¸ªLast-Modifiedååºå¤´ï¼ç¼åè½å¤ä½¿ç¨If-Modified-Sinceæ¥å¤ææ¯å¦å·²æ¹åï¼ä»¥ä¾¿å¤ææ ¹æ®æ åµåé请æ±ï¼
- Invalidationï¼ å¨å¦ä¸ä¸ªè¯·æ±éè¿ç¼åçæ¶åï¼å¸¸å¸¸æä¸ä¸ªå¯ä½ç¨ãä¾å¦ï¼å¦æä¸ä¸ªURLå ³èå°ä¸ä¸ªç¼åååºï¼ä½æ¯å ¶åè·çPOSTãPUTåDELETEç请æ±çè¯ï¼ç¼åå°±ä¼è¿æã
4ãæç¹ç»ä¼ åå¤çº¿ç¨ä¸è½½çå®ç°åç
- HTTPåè®®çGETæ¹æ³ï¼æ¯æåªè¯·æ±æ个èµæºçæä¸é¨åï¼Â
- 206 Partial Content é¨åå 容ååºï¼Â
- Range 请æ±çèµæºèå´ï¼Â
- Content-Range ååºçèµæºèå´ï¼Â
- å¨è¿æ¥æå¼éè¿æ¶ï¼å®¢æ·ç«¯åªè¯·æ±è¯¥èµæºæªä¸è½½çé¨åï¼èä¸æ¯éæ°è¯·æ±æ´ä¸ªèµæºï¼æ¥å®ç°æç¹ç»ä¼ ãÂ
åå请æ±èµæºå®ä¾ï¼ Eg1ï¼Range: bytes=306302- ï¼è¯·æ±è¿ä¸ªèµæºä»306302个åèå°æ«å°¾çé¨åï¼ Eg2ï¼Content-Range: bytes 306302-604047/604048ï¼ååºä¸æ示æºå¸¦çæ¯è¯¥èµæºç第306302-604047çåèï¼è¯¥èµæºå ±604048个åèï¼ å®¢æ·ç«¯éè¿å¹¶åç请æ±ç¸åèµæºçä¸åç段ï¼æ¥å®ç°å¯¹æ个èµæºç并åååä¸è½½ãä»èè¾¾å°å¿«éä¸è½½çç®çãç®åæµè¡çFlashGetåè¿ é·åºæ¬é½æ¯è¿ä¸ªåçãÂ
å¤çº¿ç¨ä¸è½½çåçï¼
- ä¸è½½å·¥å ·å¼å¯å¤ä¸ªååºHTTP请æ±ç线ç¨ï¼Â
- æ¯ä¸ªhttp请æ±åªè¯·æ±èµæºæ件çä¸é¨åï¼Content-Range: bytes 20000-40000/47000ï¼Â
- å并æ¯ä¸ªçº¿ç¨ä¸è½½çæ件ã
注ï¼ä»¥ä¸å 容æ´çèªç½ç»