˵Ã÷
±¾Îĵµ¹æ¶¨ÁË»¥ÁªÍøÉçÇøµÄ±ê×¼×éÐÒ飬²¢ÐèÒªÌÖÂۺͽ¨ÒéÒÔ±ã¸ü¼ÓÍêÉÆ¡£Çë²Î¿¼
“»¥ÁªÍø¹Ù·½ÐÒé±ê×¼”£¨STD 1£©À´Á˽ⱾÐÒéµÄ±ê×¼»¯×´Ì¬¡£±¾ÐÒé²»ÏÞÁ÷´«·¢²¼¡£
°æÈ¨ÉùÃ÷
Copyright £¨C£© The Internet Society £¨1999£©. All Rights Reserved.
ÕªÒª
³¬Îı¾´«ÊäÐÒ飨HTTP£©ÊÇÒ»ÖÖΪ·Ö²¼Ê½£¬ºÏ×÷ʽ£¬³¬Ã½ÌåÐÅϢϵͳ¡£ËüÊÇÒ»ÖÖͨÓõģ¬ÎÞ״̬£¨stateless£©µÄÐÒ飬³ýÁËÓ¦ÓÃÓÚ³¬Îı¾´«ÊäÍ⣬ËüÒ²¿ÉÒÔÓ¦ÓÃÓÚÖîÈçÃû³Æ·þÎñÆ÷ºÍ·Ö²¼¶ÔÏó¹ÜÀíϵͳ֮ÀàµÄϵͳ£¬Õâ¿ÉÒÔͨ¹ýÀ©Õ¹ËüµÄÇëÇó·½·¨£¬´íÎó´úÂëºÍ±¨Í·[47]À´ÊµÏÖ¡£HTTPµÄÒ»¸öÌØµãÊÇÊý¾Ý±íÏÖÐÎʽÊÇ¿ÉÊäÈëµÄºÍ¿ÉÐÉÌÐԵģ¬Õâ¾ÍÔÊÐíϵͳÄܱ»½¨Á¢¶ø¶ÀÁ¢ÓÚÊý¾Ý´«Êä¡£
HTTPÔÚ1990ÄêWWWÈ«ÇòÐÅÏ¢¸Õ¸ÕÆð²½µÄʱºò¾ÍµÃµ½ÁËÓ¦Óᣱ¾ËµÃ÷ÊéÏêϸ²ûÊöÁËHTTP/1.1 ÐÒ飬ÊÇRFC 2068µÄÐÞ¶©°æ[33]¡£
Ŀ¼£¨ÂÔ£©
1 ÒýÂÛ
1.1 Ä¿µÄ
³¬Îı¾´«ÊäÐÒ飨HTTP£©ÊÇÒ»ÖÖΪ·Ö²¼Ê½£¬ºÏ×÷ʽ£¬¶àýÌåÐÅϢϵͳ·þÎñ£¬ÃæÏòÓ¦ÓòãµÄ ÐÒé¡£ÔÚ1990ÄêWWWÈ«ÇòÐÅÏ¢¸Õ¸ÕÆð²½µÄʱºòHTTP¾ÍµÃµ½ÁËÓ¦Óá£HTTPµÄµÚÒ»¸ö°æ±¾½Ð×öHTTP/0.9,ÊÇÒ»ÖÖΪ»¥ÁªÍøÔʼÊý¾Ý´«Êä·þÎñµÄ¼òµ¥ÐÒé¡£ÓÉRFC 1945[6]¶¨ÒåµÄHTTP/1.0½øÒ»²½ÍêÉÆÁËÕâ¸öÐÒé¡£ËüÔÊÐíÏûÏ¢ÒÔÀàËÆMIMEµÄ¸ñʽ´«ËÍ£¬°üÀ¨ÓйØÊý¾Ý´«ÊäµÄά»¤ÐÅÏ¢ºÍ¹ØÓÚÇëÇó/ÏìÓ¦µÄ¾ä·¨ÐÞÕý¡£µ«ÊÇ£¬HTTP/1.0ûÓгä·Ö¿¼Âǵ½·Ö²ã´úÀí£¬»º´æµÄ×÷ÓÃÒÔ¼°¶ÔÎȶ¨Á¬½ÓºÍÐéÄâÖ÷»úµÄÐèÇó¡£²¢ÇÒËæ×Ų»ÍêÉÆµÄÓ¦ÓóÌÐòµÄ¼¤Ôö£¬HTTP/1.0ÆÈÇÐÐèÒªÒ»¸öеİ汾,ÒÔ±ãʹÁ½¸öͨÐÅÓ¦ÓóÌÐòÄܹ»È·¶¨±Ë´ËµÄÕæÊµÐÔÄÜ¡£
ÕâÀï¹æ¶¨µÄÐÒé½Ð×ö”HTTP/1.1".Õâ¸öÐÒéÓëHTTP/1.0Ïà±È£¬ÒªÇó¸üΪÑϸñ£¬ÒÔÈ·±£¸÷ÏÄܵõ½¿É¿¿ÊµÏÖ¡£
ʵ¼ÊµÄÐÅϢϵͳ³ýÁ˼òµ¥µÄ¼ìË÷Í⣬ҪÇó¸ü¶àµÄ¹¦ÄÜÐÔ£¨functionality£©£¬°üÀ¨²éÕÒ£¨search£©£¬Ç°¶Ë¸üУ¨front-end update£©ºÍ×¢½â£¨annotation£©¡£HTTPÔÊÐí¿ÉÀ©³äµÄ·½·¨¼¯ºÍ±¨Í·¼¯ÒÔָʾÇëÇóµÄÄ¿µÄ[47]¡£ËüÊǽ¨Á¢ÔÚͳһ×ÊÔ´±êʶ·û£¨URI£©[3]ÌṩµÄµØÖ·£¨URL£©[4]ºÍÃû×Ö£¨URN£©ÉÏ[20]£¬ÒÔÖ¸³ö·½·¨Ó¦ÓÃÓÚÄĸö×ÊÔ´µÄ¡£ÏûÏ¢ÒÔÀàËÆÓÚÒ»ÖÖ½Ð×ö¶àÓÃÍ¾ÍøÂçÓʼþÀ©Õ¹£¨MIME£©[7] µÄ»¥ÁªÍøÓʼþµÄ¸ñʽ´«ËÍ¡£
HTTPÒ²ÊÇÓÃÓÚÓû§´úÀíÖ®¼ä¼°´úÀí/Íø¹Øµ½ÆäËûÍøÂçϵͳµÄͨÓÃͨÐÅÐÒ飬ÕâÑùµÄÍøÂçϵͳ¿ÉÄÜÓÉHTTP://www.cnpaf.net/class/smtp' target='_blank'>SMTP[16],NNTP[13],HTTP://www.cnpaf.net/class/ftp' target='_blank'>FTP[18],Gopher[2]ºÍWAIS[10]ÐÒéÖ§³Ö¡£ÕâÑù£¬HTTPÔÊÐí²»Í¬µÄÓ¦ÓóÌÐò¶Ô×ÊÔ´½øÐлù±¾µÄ³¬Ã½Ìå·ÃÎÊ¡£
1.2 񻂗
±¾ÎĵĹؼü´Ê"MUST", "MUST NOT", "REQUIRED", "SHALL","SHALL NOT","SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", ºÍ "OPTIONAL"½«ÓÉRFC 2119[34]½âÊÍ¡£
Ò»¸öÓ¦ÓóÌÐòÈç¹û²»ÄÜÂú×ãÐÒéÌṩµÄÒ»¸ö»ò¶à¸öMUST»òREQUIREDµÈ¼¶µÄÒªÇó£¬ÊDz»·ûºÏÒªÇóµÄ¡£Ò»¸öÓ¦ÓóÌÐòÈç¹ûÂú×ãËùÓÐMUST»òREQUIREDµÈ¼¶ÒÔ¼°ËùÓÐSHOULDµÈ¼¶µÄÒªÇó£¬Ôò±»³ÆÎª·ÇÌõ¼þ×ñÑ£¨unconditionally compliant£©µÄ£»ÈôÂú×ãËùÓÐMUSTµÈ¼¶µÄÒªÇ󵫲»ÄÜÂú×ãËùÓÐSHOULDµÈ¼¶µÄÒªÇóÔò±»³ÆÎªÌõ¼þ×ñѵģ¨conditionally compliant£©¡£
1.3 ÊõÓï
±¾ËµÃ÷Óõ½ÁËÈô¸ÉÊõÓÒÔ±íʾHTTPͨÐÅÖи÷²ÎÓëÕߺͶÔÏó°çÑݵIJ»Í¬½ÇÉ«¡£
Á¬½Ó£¨connection£©
ΪͨÐŶøÔÚÁ½¸ö³ÌÐò¼ä½¨Á¢µÄ´«Êä²ãÐéÄâµç·¡£
ÏûÏ¢£¨message£©
HTTPͨÐÅÖеĻù±¾µ¥Ôª¡£ËüÓÉÒ»¸ö½á¹¹»¯µÄ°Ë±ÈÌØ×Ö½ÚÐòÁÐ×é³É£¬ÓëµÚ4Õ¶¨ÒåµÄ¾ä·¨ÏàÆ¥Å䣬²¢Í¨¹ýÁ¬½ÓµÃµ½´«ËÍ¡£
ÇëÇó£¨request£©
Ò»ÖÖHTTPÇëÇóÏûÏ¢£¬²Î¿´µÚ5յ͍Òå¡£
ÏìÓ¦£¨response£©
Ò»ÖÖHTTPÏìÓ¦ÏûÏ¢£¬²Î¿´µÚ6յ͍Òå¡£
×ÊÔ´£¨resource£©
Ò»ÖÖÍøÂçÊý¾Ý¶ÔÏó»ò·þÎñ£¬¿ÉÒÔÓõÚ3.2½Ú¶¨ÒåµÄURIÖ¸¶¨¡£×ÊÔ´¿ÉÒÔÒÔ¶àÖÖ±íÏÖ·½Ê½£¨ÀýÈç¶àÖÖÓïÑÔ£¬Êý¾Ý¸ñʽ£¬´óСºÍ·Ö±æÂÊ£©»òÕ߸ù¾ÝÆäËü·½Ãæ¶ø¶ø²»Í¬µÄ±íÏÖÐÎʽ¡£
ʵÌ壨entity£©
ʵÌåÊÇÇëÇó»òÏìÓ¦µÄÓÐЧ³ÐÔØÐÅÏ¢¡£Ò»¸öʵÌå°üº¬ÔªÐÅÏ¢ºÍÄÚÈÝ£¬ÔªÐÅÏ¢ÒÔʵÌåÍ·Óò£¨entity-header field£©ÐÎʽ±íʾ£¬ÄÚÈÝÒÔÏûÏ¢Ö÷Ì壨entity-body£©ÐÎʽ±íʾ¡£ÔÚµÚ7½ÚÏêÊö¡£
±íÏÖÐÎʽ £¨representation£©
Ò»¸öÏìÓ¦°üº¬µÄʵÌåÊÇÓÉÄÚÈÝÐÉÌ£¨content negotiation£©¾ö¶¨µÄ¡£ÈçµÚ12ÕÂËùÊö¡£ÓпÉÄÜ´æÔÚÒ»¸öÌØ¶¨µÄÏìӦ״̬Âë¶ÔÓ¦¶à¸ö±íÏÖÐÎʽ¡£
ÄÚÈÝÐÉÌ£¨content negotiation£©
µ±·þÎñÒ»¸öÇëÇóʱѡÔñ×ÊÔ´µÄÒ»ÖÖÊʵ±µÄ±íʾÐÎʽµÄ»úÖÆ£¨mechanism£©£¬ÈçµÚ12½ÚËùÊö¡£ÈκÎÏìÓ¦ÀïʵÌåµÄ±íÏÖÐÎʽ¶¼ÊÇ¿ÉÐÉ̵썰üÀ¨³ö´íÏìÓ¦£©.
±äÁ¿£¨variant£©
ÔÚÈκθø¶¨Ê±¿Ì£¬Ò»¸ö×ÊÔ´¶ÔÓ¦µÄ±íÏÖÐÎʽ£¨representation£©¿ÉÒÔÓÐÒ»¸ö»ò¶à¸ö£¨Òë×¢£ºÒ»¸öURIÇëÒ»¸ö×ÊÔ´£¬µ«·µ»ØµÄÊÇ´Ë×ÊÔ´¶ÔÓ¦µÄ±íÏÖÐÎʽ£¬Õâ¸ù¾ÝÄÚÈÝÐÉ̾ö¶¨£©¡£Ã¿¸ö±íÏÖÐÎʽ£¨representation£©±»³Æ×÷Ò»¸ö±äÁ¿¡£Ê¹ÓñäÁ¿Õâ¸öÊõÓï²¢²»ÊÇÒâζ×Å×ÊÔ´£¨resource£©ÊDZØÐëÓÉÄÚÈÝÐÉ̾ö¶¨µÄ.
¿Í»§¶Ë£¨client£©
Ϊ·¢ËÍÇëÇó½¨Á¢Á¬½ÓµÄ³ÌÐò.
Óû§´úÀí£¨user agent£©
³õʼ»¯ÇëÇóµÄ¿Í»§¶Ë³ÌÐò¡£³£¼ûµÄÈçä¯ÀÀÆ÷,±à¼Æ÷,Ö©Öë£¨ÍøÂç´©Ô½»úÆ÷ÈË£©,»òÆäËûµÄÖÕ¶ËÓû§¹¤¾ß.
·þÎñÆ÷£¨Server£©
·þÎñÆ÷ÊÇÕâÑùÒ»¸öÓ¦ÓóÌÐò£¬ËüͬÒâÇëÇó¶ËµÄÁ¬½Ó£¬²¢·¢ËÍÏìÓ¦£¨response£©¡£Èκθø¶¨µÄ³ÌÐò¶¼ÓпÉÄܼÈ×ö¿Í»§¶ËÓÖ×ö·þÎñÆ÷£»ÎÒÃÇʹÓÃÕâЩÊõÓïÊÇΪÁË˵Ã÷ÌØ¶¨Á¬½ÓÖÐÓ¦ÓóÌÐòËùµ£µ±µÄ½ÇÉ«£¬¶ø²»ÊÇָͨ³£ÒâÒåÉÏÓ¦ÓóÌÐòµÄÄÜÁ¦¡£Í¬Ñù£¬ÈκηþÎñÆ÷¶¼¿ÉÒÔ»ùÓÚÿ¸öÇëÇóµÄÐÔÖʰçÑÝÔ´·þÎñÆ÷£¬´úÀí£¬Íø¹Ø£¬»òÕßËíµÀµÈ½Çɫ֮һ¡£
Ô´·þÎñÆ÷£¨Origin server£©
´æÔÚ×ÊÔ´»òÕß×ÊÔ´ÔÚÆäÉϱ»´´½¨µÄ·þÎñÆ÷£¨server£©±»³ÉΪԴ·þÎñÆ÷£¨origin server£©¡£
´úÀí£¨ Proxy£©
´úÀíÊÇÒ»¸öÖмä³ÌÐò£¬Ëü¼Èµ£µ±¿Í»§¶ËµÄ½ÇɫҲµ£µ±·þÎñÆ÷µÄ½ÇÉ«¡£´úÀí´ú±í¿Í»§¶ËÏò·þÎñÆ÷·¢ËÍÇëÇ󡣿ͻ§¶ËµÄÇëÇó¾¹ý´úÀí£¬»áÔÚ´úÀíÄÚ²¿µÃµ½·þÎñ»òÕß¾¹ýÒ»¶¨µÄת»»×ªÖÁÆäËû·þÎñÆ÷¡£Ò»¸ö´úÀí±ØÐëÄÜͬʱʵÏÖ±¾¹æ·¶ÖжԿͻ§¶ËºÍ·þÎñÆ÷Ëù×÷µÄÒªÇó¡£Í¸Ã÷´úÀí£¨transparent proxy£©ÐèÒª´úÀíÊÚȨºÍ´úÀíʶ±ð£¬µ«²»ÐÞ¸ÄÇëÇó»òÏìÓ¦¡£·Ç͸Ã÷´úÀí£¨non-transparent proxy£©ÐèÐÞ¸ÄÇëÇó»òÏìÓ¦£¬ÒÔ±ãΪÓû§´úÀí£¨user agent£©Ìṩ¸½¼Ó·þÎñ£¬¸½¼Ó·þÎñ°üÀ¨×é×¢ÊÍ·þÎñ£¬Ã½ÌåÀàÐÍת»»£¬ÐÒé¼ò»¯£¬»òÕßÄäÃû¹ýÂ˵ȡ£³ý·Ç͸Ã÷ÐÐΪ»ò·Ç͸Ã÷ÐÐΪ¾Ã÷È·Ö¸³ö£¬·ñÔò£¬HTTP´úÀí¼ÈÊÇ͸Ã÷´úÀíÒ²ÊÇ·Ç͸Ã÷´úÀí¡£
Íø¹Ø£¨gateway£©
Íø¹ØÆäʵÊÇÒ»¸ö·þÎñÆ÷£¬°çÑÝ×Å´ú±íÆäËü·þÎñÆ÷Ϊ¿Í»§¶ËÌṩ·þÎñµÄÖмäÕß¡£Óë´úÀí£¨proxy£©²»Í¬£¬Íø¹Ø½ÓÊÕÇëÇ󣬷·ðËü¾ÍÊÇÇëÇó×ÊÔ´µÄÔ´·þÎñÆ÷¡£ÇëÇóµÄ¿Í»§¶Ë¿ÉÄܾõ²ì²»µ½ËüÕýÔÚÍ¬Íø¹ØÍ¨ÐÅ¡£
ËíµÀ£¨tunnel£©
ËíµÀÒ²ÊÇÒ»¸öÖмä³ÌÐò£¬ËüÒ»¸öÔÚÁ½¸öÁ¬½ÓÖ®¼ä³äµ±Ã¤Ä¿Öм̣¨blind relay£©µÄÖмä³ÌÐò¡£Ò»µ©ËíµÀ´¦Óڻ״̬£¬Ëü²»Äܱ»ÈÏΪÊÇÕâ´ÎHTTPͨÐŵIJÎÓëÕߣ¬ËäÈ»HTTPÇëÇó¿ÉÄÜÒѾ°ÑËü³õʼ»¯ÁË¡£µ±Á½¶ËµÄÖмÌÁ¬½Ó¶¼¹Ø±ÕµÄʱºò£¬ËíµÀ²»ÔÙ´æÔÚ¡£
»º´æ£¨cache£©
»º´æÊdzÌÐòÏìÓ¦ÏûÏ¢µÄ±¾µØ´æ´¢¡£»º´æÊÇÒ»¸ö×Óϵͳ£¬¿ØÖÆÏûÏ¢µÄ´æ´¢¡¢È¡»ØºÍɾ³ý¡£»º´æÀï´æ·Å¿É»º´æÏìÓ¦£¨cacheable response£©ÎªµÄÊǼõÉÙ¶Ô½«À´Í¬ÑùÇëÇóµÄÏìӦʱ¼äºÍÍøÂç´ø¿íÏûºÄ¡£ÈÎÒ»¿Í»§¶Ë»ò·þÎñÆ÷¶¼¿ÉÄܺ¬Óлº´æ£¬µ«¸ßËÙ»º´æ²»Äܱ»Ò»¸ö³äµ±ËíµÀ£¨tunnel£©µÄ·þÎñÆ÷ʹÓá£
¿É»º´æ£¨cacheable£©
ÎÒÃÇ¿ÉÒÔ˵ÏìÓ¦£¨response£©Êǿɻº´æµÄ£¬Èç¹ûÒ»¸ö»º´æ£¨cache£©ÎªÁËÏìÓ¦ºó¼ÌÇëÇó¶ø±»ÔÊÐí´æ´¢ÏìÓ¦ÏûÏ¢£¨response message£©µÄ¸±±¾¡£È·¶¨HTTPÏìÓ¦µÄ»º´æÄÜÁ¦£¨cacheability£©ÔÚ13½ÚÖÐÓнéÉÜ¡£¼´Ê¹Ò»¸ö×ÊÔ´£¨resourse£©Êǿɻº´æµÄ£¬Ò²¿ÉÄÜ´æÔÚ»º´æÊÇ·ñÄÜÀûÓûº´æ¸±±¾µÄÔ¼Êø¡£
µÚÒ»Êֵģ¨first-hand£©
Èç¹ûÒ»¸öÏìÓ¦Ö±½Ó´ÓÔ´·þÎñÆ÷»ò¾¹ýÈô¸É´úÀí£¨proxy£©£¬²¢ÇÒûÓв»±ØÒªµÄÑÓʱ£¬×îºóµ½´ï¿Í»§¶Ë£¬ÄÇôÕâ¸öÏìÓ¦¾ÍÊǵÚÒ»Êֵģ¨first-hand£©¡£
Èç¹ûÏìÓ¦±»Ô´·þÎñÆ÷£¨origin server£©ÑéÖ¤ÊÇÓÐЧÐÔ£¨validity£©µÄ£¬ÄÇôÕâ¸öÏìӦҲͬÑùÊǵÚÒ»Êֵġ£
Ã÷È·¹ýÆÚʱ¼ä£¨explicit expiration time£©
ÊÇÔ´·þÎñÆ÷Ï£ÍûʵÌ壨entity£©Èç¹ûûÓб»½øÒ»²½ÑéÖ¤£¨validation£©¾Í²»ÒªÔÙ±»»º´æ£¨cache£©·µ»ØµÄʱ¼ä¡£
Æô·¢Ê½¹ýÆÚʱ¼ä£¨heuristic expiration time£©
µ±Ã»ÓÐÃ÷È·ÖÕֹʱ¼ä£¨explicit expiration time£©¿ÉÀûÓÃʱ£¬ÓÉ»º´æËùÖ¸¶¨µÄÖÕֹʱ¼ä.
ÄêÁ䣨age£©
Ò»¸öÏìÓ¦µÄÄêÁäÊÇ´Ó±»Ô´·þÎñÆ÷·¢ËÍ»ò±»Ô´·þÎñÆ÷³É¹¦È·ÈϵÄʱ¼äµãµ½ÏÖÔÚµÄʱ¼ä¡£
±£ÏÊÊÙÃü£¨freshness lifetime£©
Ò»¸öÏìÓ¦²úÉúµÄʱ¼äµãµ½¹ýÆÚʱ¼äµãÖ®¼äµÄ³¤¶È¡£
±£ÏÊ£¨Fresh£©
Èç¹ûÒ»¸öÏìÓ¦µÄÄêÁ仹ûÓг¬¹ý±£ÏÊÊÙÃü£¨freshness lifetime£©£¬Ëü¾ÍÊDZ£ÏʵÄ.
³Â¾É£¨Stale£©
Ò»¸öÏìÓ¦µÄÄêÁäÒѾ³¬¹ýÁËËüµÄ±£ÏÊÊÙÃü£¨freshness lifetime£©£¬¾ÍÊdz¾ɵÄ.
ÓïÒå͸Ã÷£¨semantically transparent£©
»º´æ£¨cache£©¿ÉÄÜ»áÒÔÒ»ÖÖÓïÒâ͸Ã÷£¨semantically transparent£©µÄ·½Ê½¹¤×÷¡£Õâʱ£¬¶ÔÓÚÒ»¸öÌØ¶¨µÄÏìÓ¦£¬Ê¹Óûº´æ¼È²»»á¶ÔÇëÇó¿Í»§¶Ë²úÉúÓ°ÏìÒ²²»»á¶ÔÔ´·þÎñÆ÷²úÉúÓ°Ï죬»º´æµÄʹÓÃÖ»ÊÇΪÁËÌá¸ßÐÔÄÜ¡£µ±»º´æ£¨cache£©¾ßÓÐÓïÒâ͸Ã÷ÐÔʱ£¬¿Í»§¶Ë´Ó»º´æ½ÓÊÕµÄÏìÓ¦¸úÖ±½Ó´ÓÔ´·þÎñÆ÷½ÓÊÕµÄÏìÓ¦ÍêȫһÖ£¨³ýÁËʹÓÃhop-by-hopÍ·Óò£©¡£
ÑéÖ¤Æ÷£¨Validator£©
ÑéÖ¤Æ÷ÆäʵÊÇÐÒéÔªËØ£¨ÀýÈ磺ʵÌåÍ·£¨entity tag£©»ò×îºó¸ü¸Äʱ¼ä£¨last-modified time£©µÈ£©£¬ÕâЩÐÒéÔªËØ±»ÓÃÓÚʶ±ð»º´æÀï±£´æµÄÊý¾Ý£¨¼´»º´æÏÊÇ·ñÊÇÔ´·þÎñÆ÷µÄʵÌåµÄ¸±±¾¡£
ÉÏÓÎ/ÏÂÓΣ¨upstream/downstream£©
ÉÏÓκÍÏÂÓÎÃèÊöÁËÏûÏ¢µÄÁ÷¶¯:ËùÓÐÏûÏ¢¶¼´ÓÉÏÓÎÁ÷µ½ÏÂÓÎ.
ÏòÄÚ/ÏòÍ⣨inbound/outbound£©
ÏòÄÚºÍÏòÍâÖ¸µÄÊÇÏûÏ¢µÄÇëÇóºÍÏìӦ·¾¶:"ÏòÄÚ"¼´"ÒÆÏòÔ´·þÎñÆ÷","ÏòÍâ"¼´"ÒÆÏòÓû§´úÀí£¨user agent£©".
1.4 ×ÜÌå²Ù×÷
HTTPÐÒéÊÇÒ»ÖÖÇëÇó/ÏìÓ¦ÐÒé¡£ Óë·þÎñÆ÷½¨Á¢Á¬½Óºó£¬¿Í»§¶ËÒÔÇëÇó·½·¨£¬URIºÍÐÒé°æ±¾ºÅ£¬È»ºó½ô½ÓןúËæÒ»¸öÀàMIME£¨MIME-like£©ÏûÏ¢£¬Õâ¸öÀàMIMEÏûÏ¢°üÀ¨ÇëÇóÐÞÊηû£¬¿Í»§ÐÅÏ¢ºÍ¿ÉÄܵÄÏûÏ¢Ö÷Ìå¡£·þÎñÆ÷ÒÔÒ»¸ö״̬Ðв¢¸úËæÒ»¸öÀàMIME£¨MIME-like£©ÏûÏ¢ÏìÓ¦£¬×´Ì¬Ðаüº¬ÏûÏ¢µÄÐÒé°æ±¾ºÍ³É¹¦³ö´íµÄ״̬Â룬ÀàMIMEÏûÏ¢°üº¬·þÎñÆ÷ÐÅÏ¢£¬ÊµÌåÔªÐÅÏ¢£¬ºÍ¿ÉÄܵÄʵÌå¡£HTTPºÍMIMEÖ®¼äµÄ¹ØÏµÈ總¼19.4½ÚËù²ûÊö¡£
´ó²¿·ÖµÄHTTPͨÐÅÊÇÓÉÓû§´úÀí£¨user agent£©¿ªÊ¼µÄ£¬ÓÉÓ¦Óõ½Ò»¸öÐèÒªÔ´·þÎñÆ÷×ÊÔ´µÄÇëÇ󹹳ɡ£×î¼òµ¥µÄÇéÐΣ¬¿ÉÒÔ¾Óû§´úÀí£¨UA£©ºÍÔ´·þÎñÆ÷£¨O£©Ö®¼äµÄµ¥Ò»Á¬½Ó£¨v£©Íê³É¡£
ÇëÇóÁ´£¨Request chain£©--------------------- ----------à
Óû§´úÀí£¨UA£©----------------µ¥Ò»Á¬½Ó£¨v£©--------------Ô´·þÎñÆ÷£¨O£©
<---------------------------------------ÏìÓ¦Á´£¨response chain£©
µ±Ò»¸ö»ò¶à¸öÖмäÕßÔÚÇëÇó/ÏìÓ¦Á´ÖгöÏÖµÄʱºò£¬»á³öÏÖ¸ü¸´ÔÓµÄÇéÐΡ£³£¼ûµÄÖмäÕßÓÐÈýÖÖ£º´úÀí£¨proxy£©£¬Íø¹Ø£¨gateway£©ºÍËíµÀ£¨tunnel£©¡£´úÀí£¨proxy£©ÊÇÒ»ÖÖת·¢´úÀí£¨a forwarding agent£©£¬Ëü½ÓÊÕ¾ø¶ÔURI£¨absoulute url£¬Ïà¶ÔÓÚÏà¶Ôurl£©ÇëÇó£¬ÖØÐ´È«²¿»ò²¿·ÖÏûÏ¢£¬È»ºó°Ñ¸ñʽ»¯ºóµÄÇëÇó·¢Ë͵½URIÖ¸¶¨µÄ·þÎñÆ÷ÉÏ¡£Íø¹ØÊÇÒ»ÖÖ½ÓÊÕ´úÀí£¨receiving agent£©£¬Ëü³äµ±Ò»¸ö²ã£¨layer£©£¬Õâ¸ö²ãÔÚ·þÎñÆ÷Ö®ÉÏ£¬±ØÒªÊ±Ëü»á°ÑÇëÇó·Òë³ÉΪϲã·þÎñÆ÷µÄÐÒé¡£ËíµÀ²»¸Ä±äÏûÏ¢¶ø³äµ±Á½¸öÁ¬½ÓÖ®¼äµÄÖм̵㣻ËüÓÃÓÚͨÐÅÐèÒª´©¹ýÖмäÕߣ¨Èç·À»ðǽ£©ÉõÖÁµ±ÖмäÕß²»ÄÜÀí½âÏûÏ¢ÄÚÈݵÄʱºò¡£
ÇëÇóÁ´£¨request chain£©----------------------------------------à
UA-----v-----A-----v-----B-----v-----C------------v-----------------O
<----------------------------------------ÏìÓ¦Á´£¨response chain£©
ÉÏͼÏÔʾÁËÓû§´úÀí£¨user agent£©ºÍÔ´·þÎñÆ÷Ö®¼äµÄÈý¸öÖмäÕߣ¨A£¬BºÍC£©¡£ÕûÌõÁ´µÄÇëÇó»òÏìÓ¦½«»áͨ¹ýËĸöµ¥¶ÀµÄÁ¬½Ó¡£Õâ¸öÌØÐÔºÜÖØÒª£¬ÒòΪijЩHTTPͨÐÅÑ¡Ïî¿ÉÄÜÖ»ÄÜÓ¦ÓÃÓÚÓë×î½üµÄ·ÇËíµÀÁÚ½ÓµãµÄÁ¬½Ó£¬Ö»ÄÜÓ¦ÓÃÓÚÁ´µÄ¶Ëµã£¨end-point£©µÄÁ¬½Ó£¬»òÕßÄÜÓ¦ÓÃÓÚ´ËÁ´µÄËùÓÐÁ¬½Ó¡£Í¼±í¾¡¹ÜÊÇÏßÐԵģ¬Ã¿¸ö²ÎÓëÕß¿ÉÄÜæÓÚ¶à·ͬʱͨÐÅ¡£ÀýÈ磬B¿ÉÒÔ½ÓÊÕÀ´×Ô²»Í¬ÓÚAµÄÐí¶à¿Í»§µÄÇëÇ󣬲¢ÇÒ£¯»òÕß¿ÉÒÔ°ÑÇëÇóתµ½²»Í¬ÓÚCµÄ·þÎñÆ÷£¬Óë´Ëͬʱ£¬Ëü»¹ÔÚ´¦ÀíAµÄÇëÇó¡£
ÈκηÇËíµÀµÄͨÐųÉÔ±¶¼¿ÉÄÜ»á²ÉÓÃÒ»¸öÄÚ²¿»º´æ£¨cache£©À´´¦ÀíÇëÇó¡£Èç¹ûÑØ×ÅÁ´µÄͨÐųÉÔ±¶ÔÇëÇó²ÉÓÃÁË»º´æÏìÓ¦£¬ÇëÇó/ÏìÓ¦Á´¾Í»á´ó´óËõ¶Ì¡£ÏÂͼ²ûÃ÷ÁËÒ»¸ö×îÖÕÇëÇóÏìÓ¦Á´£¬ÕâÊÇÔÚ¼Ù¶¨BÓµÓÐÒ»¸öÀ´×ÔO£¨Í¨¹ýC£©µÄÒÔǰÇëÇóµÄÏìÓ¦¸±±¾£¬µ«´ËÏìÓ¦ÉÐδ±»UA»òA»º´æ¡£
ÇëÇóÁ´£¨request chain£©---------->
UA-----v----------A-----v-----B-----C----O
<---------ÏìÓ¦Á´ £¨response chain£©
²¢²»ÊÇËùÓеÄÏìÓ¦¶¼ÄÜÓÐЧµØ»º´æ£¬Ò»Ð©ÇëÇó¿ÉÄܺ¬ÓÐÐÞÊηû£¬ÕâЩÐÞÊηû¶Ô»º´æ¶¯×÷ÓÐÌØÊâµÄÒªÇó¡£»º´æ¶¯×÷ºÍ»º´æÏìÓ¦µÄHTTPÐÐΪҪÇó½«ÔÚµÚ13½Ú¶¨Òå¡£
ʵ¼ÊÉÏ£¬Ä¿Ç°ÍòÎ¬ÍøÉÏÓжàÖֽṹºÍÅäÖõĻº´æ£¨cache£©ºÍ´úÀí£¨proxy£©ÕýÔÚ±»Ê¹Óá£ÕâЩϵͳ°üÀ¨½ÚÊ¡´ø¿íµÄ»º´æ´úÀí£¨proxy cache£©£¬¿ÉÒԹ㲥»ò¶àµã´«ËÍ»º´æÊý¾ÝµÄϵͳ£¬Í¨¹ýCD-ROM·ÖÅ仺´æÊý¾Ý×Ó¼¯µÄ»ú¹¹£¬µÈµÈ¡£HTTPϵͳ£¨HTTP system£©»á±»Ó¦ÓÃÓÚ¿í´øÁ¬½ÓµÄÆóÒµ¾ÖÓòÍøÖеÄÐ×÷£¬²¢ÇÒ¿ÉÒÔͨ¹ýPDA½øÐеͺÄÎÞÏߵ쬶ÏÐøÁ¬½ÓµÄ·ÃÎÊ¡£HTTP1.1µÄ×ÚÖ¼ÊÇΪÁËÖ§³Ö¸÷ÖÖ¸÷ÑùµÄÒѾ²¿ÊðµÄÅäÖã¬Í¬Ê±Òý½øÒ»ÖÖÐÒé½á¹¹£¬ÈÃËüÂú×ãÄÇЩÐèÒª½Ï¸ß¿É¿¿ÐÔ£¬¼´Ê¹²»ÄÜ´ïµ½½Ï¸ß¿É¿¿ÐÔµÄÒªÇó£¬Ò²ÒªÒ²ÈÃËüÖÁÉÙ¿ÉÒÔָʾ¹ÊÕϵÄÍøÂçÓ¦ÓõÄÒªÇó¡£
HTTPͨÐÅͨ³£·¢ÉúÔÚTCP/IPÁ¬½ÓÉÏ¡£Ä¬È϶˿ÚÊÇTCP 80£¬²»¹ýÆäËü¶Ë¿ÚÒ²¿ÉÒÔʹÓá£Õâ²¢²»·Á°HTTPµÄʵÏÖ±»Ó¦ÓÃÓÚ»¥ÁªÍø£¨internt£©»òÆäËüÍøµÄÐÒéÖ®ÉÏ¡£HTTP½ö½öÆÚÍûµÄÊÇÒ»¸ö¿É¿¿µÄ´«Ê䣨Òë×¢£ºHTTPÒ»°ã½¨Á¢ÔÚ´«Êä²ãÐÒéÖ®ÉÏ£©£»ÈκÎÌṩÕâÖÖ±£Ö¤µÄÐÒé¶¼¿ÉÒÔ±»Ê¹Óã»ÐÒé´«ÊäÊý¾Ýµ¥Ôª£¨transport data unit£©ÓëHTTP/1.1ÇëÇóºÍÏìÓ¦µÄÏûÏ¢½á¹¹Ö®¼äµÄÓ³ÏóÒѾ³¬³öÁ˱¾ËµÃ÷ÊéµÄ·¶Î§¡£
´ó²¿·ÖHTTP/1.0µÄʵÏÖ¶¼ÊÇÕë¶Ôÿ¸öÇëÇó/ÏìÓ¦½»»»²úÉúÒ»¸öеÄÁ¬½Ó¡£¶øHTTP/1.1ÖУ¬Ò»¸öÁ¬½Ó¿ÉÒÔ±»ÓÃÓÚÒ»¸ö»ò¸ü¶àÇëÇó/ÏìÓ¦½»»»£¬ËäÈ»Á¬½Ó¿ÉÄÜ»áÒòΪ¸÷ÖÖÔÒòÖжϣ¨¼ûµÚ8.1½Ú£©¡£
2 ·ûºÅϰ¹ßºÍÒ»°ãÓï·¨
2.1 À©³äµÄBNF£¨À©³äµÄ °Í¿ÆË¹-ŵ¶û·¶Ê½£©
±¾Îĵµ¹æ¶¨µÄËùÓлúÖÆ¶¼ÓÃÁ½ÖÖ·½·¨ÃèÊö£ºÉ¢ÎÄÌ壨prose£©ºÍÀàËÆÓÚRFC 822µÄÀ©³äBackus-Naur Form£¨BNF£©¡£ÒªÀí½â±¾¹æ·¶£¬Ê¹ÓÃÕßÐèÊìϤ·ûºÅ±íʾ·¨¡£À©³äBNF½á¹¹ÈçÏ£º
Ãû×Ö£¨name£©=¶¨Ò壨definition£©
Ãû×Ö£¨name£©¾ÍÊÇ´ú±í¹æÔòµÄÃû×Ö£¨Òë×¢£ºÈ磺CRLF£¬DIGITµÈµÈ¶¼ÊǹæÔòÃû£©£¬¹æÔòÃûÀï²»Äܰüº¬“<”ºÍ“>”£¬Í¨¹ýµÈÓںŰѹæÔòÃûºÍ¹æÔò¶¨Ò壨definiation£©·ÖÀ뿪¡£¿Õ°×£¨white space£©ÊÇÓÐÒâÒåµÄ£¬ÒòΪ¿ÉÒÔÓÃËõ½ø£¨indentation£¬Òë×¢£ºËõ½ø¾ÍÊǿհף¬ºóÃæ»á½²µ½LWS£© °Ñ¹æÔò¶¨ÒåÏÔʾ³É¶àÐС£Ä³Ð©»ù±¾¹æÔò£¨basic rule£¬Òë×¢£º2.2½Ú˵Ã÷»ù±¾¹æÔòµÄÓï·¨£©Ê¹Óôóд×Öĸ°üº¬ÔÚ¹æÔò¶¨ÒåÀ ÄãÈçSP£¬LWS£¬HT£¬CRLF£¬DIGIT£¬ALPHA£¬µÈµÈ¡£¼âÀ¨ºÅ¿ÉÒÔ°üº¬ÔÚ¹æÔò¶¨ÒåÀֻҪËüÃǵĴæÔÚÓÐÀûÓÚʶ±ð¹æÔòÃû£¨Òë×¢£ºLWS£¬HTµÈ¶¼ÊǹæÔòÃû£©¡£
“×ÖÃæÎı¾”£¨“literal”£©
×ÖÃæÎı¾£¨literal text£©Á½±ßÓÃÒýºÅ¡£³ý·ÇÉùÃ÷£¬×ÖÃæÎı¾´óСд²»Ãô¸Ð£¨Òë×¢£ºÈ磬HEX = "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" | "e" | "f" | DIGIT ÀïµÄA£¬B,C£¬DµÈµÈ¶¼ÊÇ×ÖÃæÎı¾£¨literal text£©£©¡£
¹æÔò1 | ¹æÔò2
ÓÉÊúÏߣ¨“|”£©·Ö¿ªµÄÔªËØÊÇ¿ÉÑ¡µÄ£¬ÀýÈ磬“yes | no”±íʾyes»òno¶¼ÊǿɽÓÊܵġ£
£¨¹æÔò1 ¹æÔò2£©
ΧÔÚÀ¨ºÅÀïµÄ¶à¸öÔªËØÊÓ×÷Ò»¸öÔªËØ¡£ËùÒÔ£¬“£¨elem £¨foo | bar£© elem£©”µÄ·ûºÏµÄ×Ö·û´®ÊÇ“elem foo elem”ºÍ“elem bar elem”¡£
*¹æÔò
Ç°ÃæµÄ×Ö·û“*”±íÊ¾ÖØ¸´¡£ÍêÕûµÄÐÎʽÊÇ“<n>*<m>ÔªËØ”£¬±íÊ¾ÔªËØÖÁÉÙ³öÏÖ<n>´Î£¬ÖÁ¶à³öÏÖ<m>´Î¡£Ä¬ÈÏÖµÊÇ0ºÍÎÞÇî´ó£¬ËùÒÔ"*£¨ÔªËØ£©"ÔÊÐíÈκÎÊýÖµ£¬°üÀ¨Á㣻"1*ÔªËØ"ÖÁÉÙÐèÒªÒ»´Î£»"1*2element"ÔÊÐíÒ»´Î»òÁ½´Î¡£
[¹æÔò]
·½À¨ºÅÀïÊÇÈÎÑ¡ÔªËØ£»“[foo bar]”Ï൱ÓÚ“*1£¨foo bar£©”¡£
N ¹æÔò
ÌØÊâµÄÖØ¸´£º“<n>£¨ÔªËØ£©”Óë“<n>*<n>£¨ÔªËØ£©”µÈ¼Û£»¾ÍÊÇ˵£¬£¨ÔªËØ£©ÕýºÃ³öÏÖÁË<n>´Î¡£ÕâÑù2DIGITÊÇÒ»¸öÁ½Î»Êý×Ö£¬3ALPHAÊÇÒ»¸öÓÉÈý¸ö×Ö·û×é³ÉµÄ×Ö·û´®¡£
#¹æÔò
ÀàËÆÓÚ“*”£¬½á¹¹“#”ÊÇÓÃÀ´¶¨ÒåһϵÁÐÔªËØµÄ¡£ÍêÕûµÄÐÎʽÊÇ<n>#<m>ÔªËØ£¬±íʾÖÁÉÙ<n>¸öÔªËØ£¬ÖÁ¶à<m>¸öÔªËØ£¬ÔªËØÖ®¼ä±»Ò»¸ö»ò¶à¸ö¶ººÅ£¨“,”£©ÒÔ¼°¿ÉÑ¡µÄÏßÐÔ¿Õ°×£¨LWS£©¸ô¿ªÁË¡£Õâ¾ÍʹµÃ±íʾÁбíÕâÑùµÄÐÎʽ±äµÃ·Ç³£ÈÝÒ×£»Ïñ
£¨ *LWS element£© *£¨ *LWS ","*LWS element £©£©
¾Í¿ÉÒÔ±íʾΪ
1#element
ÎÞÂÛÔÚÄÄÀïʹÓÃÕâ¸ö½á¹¹£¬¿ÕÔªËØ¶¼ÊÇÔÊÐíµÄ£¬µ«ÊDz»¼ÆÈëÔªËØ³öÏֵĴÎÊý¡£»»¾ä»°Ëµ £¬
“£¨element £©, , £¨element£© ”ÊÇÔÊÐíµÄ£¬µ«Êǽö½öÊÓΪÁ½¸öÔªËØ¡£Òò´Ë£¬ÔÚÖÁÉÙÐèÒªÒ»¸öÔªËØµÄµØ·½£¬±ØÐë´æÔÚÖÁÉÙÒ»¸ö·Ç¿ÕÔªËØ¡£Ä¬ÈÏÖµÊÇ0ºÍÎÞÇî´ó£¬ÕâÑù£¬“#element”ÔÊÐíÈÎÒâÁã¸ö»ò¶à¸öÔªËØ£»“1# element”ÐèÒªÖÁÉÙÒ»¸ö£»“1#2element”ÔÊÐíÒ»¸ö»òÁ½¸öÔªËØ¡£
£»×¢ÊÍ£¨comment£©
Ó÷ֺÅÒýµ¼×¢ÊÍ¡£
Òþº¬µÄ£¨implied£© *LWS
±¾ËµÃ÷ÊéËùÃèÊöµÄÓï·¨ÊÇ»ùÓÚ×ֵġ£³ý·ÇÌØ±ð×¢Ã÷£¬ÏßÐԿհ׿ɳöÏÖÔÚÈκÎÁ½¸öÏàÁÚ×ÖÖ®¼ä£¨±ê¼Ç£¨token£©»òÒýÓÃ×Ö·û´®£¨quoted-string£©£©£¬ÒÔ¼°ÏàÁÚ×ֺͼä¸ô·ûÖ®¼ä£¬ÕⲢûÓиıäÒ»¸öÓòµÄ½âÊÍ¡£ÈκÎÁ½¸ö±ê¼Ç£¨token£©Ö®¼ä±ØÐëÓÐÖÁÉÙÒ»¸ö·Ö¸î·û£¬·ñÔò½«»á±»Àí½âΪµ¥Ò»±ê¼Ç¡£
2.2»ù±¾¹æÔò £¨basic rule£©
ÏÂÃæµÄ¹æÔò¹á´©ÓÚ±¾¹æ·¶µÄÈ«ÎÄ£¬´Ë¹æÔòÃèÊöÁË»ù±¾µÄ½âÎö½á¹¹¡£US-ASCII£¨ÃÀ¹úÐÅÏ¢½»»»±ê×¼Â룩±àÂë×Ö·û¼¯ÊÇÓÉANSI X3.4-1986[21]¶¨ÒåµÄ¡£
OCTET£¨×Ö½Ú£© = <ÈÎÒâ°Ë±ÈÌØµÄÊý¾ÝÐòÁÐ>
CHAR = <ÈÎÒâASCII×Ö·û£¨asciiÂëÖµ´Ó 0µ½127µÄ×Ö½Ú£©>
UPALPHA = <ÈÎÒâ´óд×Öĸ"A"..."Z">
LOALPHA = <ÈÎÒâСд×Öĸ"a"..."z">
ALPHA = UPALPHA | LOALPHA
DIGIT = <ÈÎÒâÊý×Ö0£¬1£¬...9>
CTL = <ÈÎÒâ¿ØÖÆ×Ö·û£¨asciiÂëÖµ´Ó0 µ½ 31µÄ×Ö½Ú£©¼°É¾³ý¼üDEL£¨127>
CR = <US-ASCII CR, »Ø³µ£¨13£©>
LF = <US-ASCII LF, »»Ðзû£¨10£©>
SP = <US-ASCII SP, ¿Õ¸ñ£¨32£©>
HT = <US-ASCII HT, Ë®Æ½ÖÆ±í £¨9£©>
<"> = <US-ASCII Ë«ÒýºÅ£¨34£©>
HTTP/1.1½« CR LF µÄÐòÁж¨ÒåΪÈκÎÐÒéÔªËØµÄÐÐβ±êÖ¾£¬µ«Õâ³ýÁËʵÌåÖ÷Ì壨endtity-body£©Í⣨ҪÇó±È½ÏËɵÄÓ¦Óüû¸½Â¼19.3£©¡£ÊµÌåÖ÷Ì壨entity-body£©µÄÐÐβ±êÖ¾ÊÇÓÉËüµÄ¹ØÁªÃ½ÌåÀàÐͶ¨ÒåµÄ£¬Èç3.7½ÚËùÊö¡£
CRLF = CR LF
HTTP/1.1 µÄÏûϢͷÓòÖµ¿ÉÒÔÕÛµþ³É¶àÐУ¬µ«½ô½Ó×ŵÄÕÛµþÐÐÓɿոñ£¨SP£©»òË®Æ½ÖÆ±í£¨HT£©ÕÛµþ±ê¼Ç¿ªÊ¼¡£ËùÓеÄÏßÐÔ¿Õ°×£¨LWS£©°üÀ¨ÕÛµþÐеÄÕÛµþ±ê¼Ç£¨¿Õ¸ñSP»òË®Æ½ÖÆ±í¼üHT£©£¬¾ßÓÐͬSPÒ»ÑùµÄÓïÒå¡£½ÓÊÕÕßÔÚ½âÎöÓòÖµ»ò½«ÏûϢתË͵½ÏÂÓΣ¨downstream£©Ö®Ç°¿ÉÄܻὫÈκÎÏßÐÔ¿Õ°×£¨LWS£©Ìæ»»³Éµ¥¸öSP£¨¿Õ¸ñ£©¡£
LWS = [CRLF] 1*£¨ SP | HT £©
ÏÂÃæµÄTEXT¹æÔò½ö½öÊÊÓÃÓÚÓòÄÚÈݺÍÓòÖµµÄÃèÊö£¬²»»á±»ÏûÏ¢½âÊÍÆ÷½âÎö¡£TEXTÀïµÄ×Ö¿ÉÒÔ°üº¬²»½ö½öÊÇISO-8859-1[22]ÀïµÄ×Ö·û¼¯£¬Ò²¿ÉÒÔ°üº¬RFC 2047Àï¹æ¶¨µÄ×Ö·û¼¯¡£
TEXT = <³ýCTLsÒÔÍâµÄÈÎÒâOCTET£¬µ«°üÀ¨LWS>
Ò»¸öCRLFÖ»ÓÐ×÷ΪHTTPÏûϢͷÓòÑÓÐøµÄÒ»²¿·Öʱ²ÅÔÚTEXT¶¨ÒåÀïʹÓá£
Ê®Áù½øÖÆÊý×Ö×Ö·ûÓÃÔÚ¶à¸öÐÒéÔªËØ£¨protocol element£©Àï¡£
HEX = "A" | "B" | "C" | "D" | "E" | "F"
| "a" | "b" | "c" | "d" | "e" | "f" | DIGIT
Ðí¶àHTTP/1.1µÄÏûϢͷÓòÖµÊÇÓÉLWS»òÌØÊâ×Ö·û·Ö¸ôµÄ×Ö¹¹³ÉµÄ¡£ÕâÐ©ÌØÊâ×Ö·û±ØÐëÏȱ»°üº¬ÔÚÒýÓÃ×Ö·û´®£¨quoted string£©ÀïÖ®ºó²ÅÄÜÓÃÓÚ²ÎÊýÖµ£¨Èç3.6½Ú¶¨Ò壩Àï¡£
token £¨±ê¼Ç£© = 1*<³ýCTLsÓë·Ö¸î·ûÒÔÍâµÄÈÎÒâ CHAR >
separators£¨·Ö¸î·û£© = "£¨" | "£©" | "<" | ">" | "@"
| "," | ";" | ":" | """ | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
ͨ¹ýÓÃÔ²À¨ºÅÀ¨ÆðÀ´£¬×¢ÊÍ£¨comment£©¿ÉÒÔ°üº¬ÔÚһЩHTTPÍ·ÓòÀï¡£×¢ÊÍÖ»¿ÉÒÔ×÷ΪÓò¶¨ÒåµÄÒ»²¿·Ö¡£ÔÚÆäËûÓòÀԲÀ¨ºÅ±»ÊÓ×÷ÓòÖµµÄÒ»²¿·Ö¡£
comment £¨×¢ÊÍ£©= "£¨" *£¨ ctext | quoted-pair | comment £© "£©"
ctext = <³ý"£¨" ºÍ "£©"ÒÔÍâµÄÈÎÒâTEXT >
Èç¹ûÒ»¸öTEXTÈô±»°üº¬ÔÚË«ÒýºÅÀÔòµ±×÷Ò»¸ö×Ö¡£
quoted-string = £¨ <"> *£¨qdtext | quoted-pair £© <"> £©
qdtext = <any TEXT except <">>
б»®Ïߣ¨"""£©¿ÉÒÔ±»×÷Ϊµ¥¸ö×Ö·ûµÄÒýÓûúÖÆ£¬µ«ÊDZØÐëÒªÔÚÒýºÅºÍ×¢ÊÍÇøÖ®ÄÚ¡£
quoted-pair = """ CHAR
3 ÐÒé²ÎÊý
3.1 HTTP°æ±¾
HTTPʹÓÃÒ»¸ö“<major>.<minor>”Êý×ÖģʽÀ´Ö¸Ã÷ÐÒéµÄ°æ±¾ºÅ¡£ÐÒéµÄ°æ±¾ºÅÊÇΪÁËÈ÷¢ËͶËÖ¸Ã÷ÏûÏ¢µÄ¸ñʽºÍËüµÄÄÜÁ¦£¬ÕâÊÇΪÁ˽øÒ»²½µÄHTTPͨÐÅ£¬¶ø²»½ö½öÊÇ»ñµÃͨÐŵÄÌØÕ÷¡£ÐÒé°æ±¾ÊDz»ÐèÒªÐ޸ĵ쬵±ÏûÏ¢×é¼þµÄÔö¼Ó²»»áÓ°ÏìͨÐÅÐÐΪ»ò×ÅÖ»Ôö¼ÓÁËÀ©Õ¹µÄÓòÖµ¡£<minor>Êý×ÖÊǵÝÔöµÄ£¬µ±ÐÒé»áÒòΪÌí¼ÓÒ»Ð©ÌØÕ÷¶ø×öÁËÐ޸ĵÄʱºò¡£µ«ÕâЩ±ä»¯²»»áÓ°Ïìͨ³£µÄÏûÏ¢½âÎöËã·¨£¬µ«ÊÇËü»á¸øÏûÏ¢Ìí¼ÓÓïÒ⣨semantic£©²¢Çһᰵʾ·¢ËÍÕß¾ßÓжîÍâµÄÄÜÁ¦¡£<major>Êý×ÖÒ²ÊDz»¶ÏµÝÔöµÄ£¬µ±ÐÒéµÄÏûÏ¢¸ñʽÿ´Î·¢Éú±ä»¯Ê±¡£
HTTPÏûÏ¢µÄ°æ±¾ÔÚHTTP-VersionÓò±»Ö¸Ã÷£¬HTTP-VersionÓòÔÚÏûÏ¢µÄµÚÒ»ÐÐÖС£
HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT
×¢ÒâmajorºÍminorÊý×Ö±ØÐë±»¿´³ÉÁ½¸ö¶ÀÁ¢ÕûÊý£¬Ã¿¸öÕûÊý¶¼¿ÉÒÔµÝÔö£¬²¢ÇÒ¿ÉÒÔÔö´óµ½´óÓÚһλÊýµÄÕûÊý£¬ÈçHTTP/2.4±ÈHTTP/2.13µÍ£¬¶øHTTP/2.4ÓÖ±ÈHTTP/12.3µÍ¡£Ç°µ¼0±ØÐë±»½ÓÊÕÕߺöÂÔ²¢ÇÒ²»Äܱ»·¢ËÍÕß·¢ËÍ¡£
Ò»¸öÓ¦ÓóÌÐò·¢ËÍÇëÇó»òÏìÓ¦ÏûÏ¢£¬Èç¹ûÇëÇó»òÏìÓ¦ÏûÏ¢ÀïµÄHTTP-VersionÊÇ”HTTP/1.1”£¬ÄÇô´ËÓ¦ÓóÌÐò±ØÐëÌõ¼þ×ñÑ´ËÐÒ鹿·¶¡£×îÉÙÌõ¼þ×ñѴ˹淶µÄÓ¦ÓóÌÐòÓ¦¸Ã°Ñ”HTTP/1.1”°üº¬ÔÚËûÃǵÄÏûÏ¢À²¢ÇÒ¶ÔÈκβ»¼æÈÝHTTP/1.1µÄÏûÏ¢±ØÐëÕâô×ö¡£¹ØÓÚºÎʱ·¢ËÍÌØ¶¨µÄHTTP-VersionÖµµÄϸ½Ú£¬²Î¼ûRFC2145¡£
Ó¦ÓóÌÐòµÄHTTP°æ±¾ÊÇÓ¦ÓóÌÐò×îÉÙÌõ¼þ×ñѵÄ×î¸ßHTTP°æ±¾¡£
´úÀí£¨proxy£©ºÍÍø¹Ø£¨gateway£©Ó¦ÓóÌÐòÐèÒª±»×Ðϸ¶Ô´ý£¬µ±×ª·¢£¨forwarding£©ÏûÏ¢µÄÐÒé°æ±¾²»Í¬ÓÚ´úÀí»òÍø¹ØÓ¦ÓóÌÐòµÄÐÒé°æ±¾¡£ÒòΪÏûÏ¢ÀïÐÒé°æ±¾ËµÃ÷ÁË·¢ËÍÕß´¦ÀíÐÒéµÄÄÜÁ¦£¬ËùÒÔÒ»¸ö´úÀí/Íø¹ØÇ§Íò²»Òª·¢ËÍÒ»¸ö¸ßÓڸôúÀí/Íø¹ØÓ¦ÓóÌÐòÐÒé°æ±¾µÄÏûÏ¢¡£Èç¹û´úÀí»òÍø¹Ø½ÓÊÕÁËÒ»¸ö¸ü¸ß°æ±¾µÄÏûÏ¢£¬ËüÒ²±ØÐëÒª½µµÍÇëÇóµÄ°æ±¾£¬ÒªÃ´ÒÔÒ»¸ö´íÎóÏìÓ¦£¬ÒªÃ´Çл»µ½ËíµÀÐÐΪ£¨tunnel behavior£©¡£
ÓÉÓÚ×Ô´ÓRFC 2068[33]·¢²¼ºó£¬²úÉúÁËÓëHTTP/1.0´úÀí£¨proxy£©µÄ»¥²Ù×÷ÎÊÌ⣬ËùÒÔ»º´æ´úÀí£¨caching proxy£©±ØÐëÄܸıäÇëÇó£¨request£©£¬Ê¹ÇëÇóÄܵ½´ïËûÃÇÄÜÖ§³ÖµÄ×î¸ß°æ±¾£¬µ«Íø¹Ø£¨gateway£©¿ÉÒÔÕâô×öÒ²¿ÉÒÔ²»Õâô×ö£¬¶øtunnel²»ÄÜÕâô×ö¡£´úÀí£¨Proxy£©/Íø¹Ø£¨gateway£©µÄÏìÓ¦£¨Response£©±ØÐëºÍÇëÇó£¨request£©µÄHTTP°æ±¾µÄmajorÊý×ÖÏàͬ¡£
×¢Ò⣺ÔÚHTTP°æ±¾¼äµÄת»»¿ÉÄܰüº¬Í·Óò£¨header field£©µÄ¸Ä±ä£¬¶øÕâЩ¸Ä±ä»á¿ÉÄÜ»á¸ù¾ÝHTTP°æ±¾¶ø±»ÒªÇó»ò±»¾Ü¾ø¡£
3.2 ͳһ×ÊÔ´±êʶ·û£¨URI£©
URIsµÄÐí¶àÃû×ÖÒÑΪÈËËùÖª£ºWWWµØÖ·£¬Í¨ÓÃÎĵµ±êʶ·û£¬Í¨ÓÃ×ÊÔ´±êʶ·û[3]£¬ÒÔ¼°ºóÀ´µÄͳһ×ÊÔ´¶¨Î»Æ÷£¨URL£©[4]ºÍͳһ×ÊÔ´Ãû³Æ£¨URN£©[20]¡£¾ÍHTTP¶øÑÔ£¬Í³Ò»×ÊÔ´¶¨Î»Æ÷Ö»ÊǸñʽ»¯µÄ×Ö·û´®£¬Ëüͨ¹ýÃû³Æ£¬µØÖ·£¬»òÈκαðµÄÌØÕ÷ʶ±ð×ÊÔ´¡£
3.2.1Ò»°ãÓï·¨
¸ù¾ÝʹÓõı³¾°£¬HTTPÀïµÄURI¿ÉÒÔ±íʾ³É¾ø¶Ô£¨absoulute£©ÐÎʽ»òÏà¶ÔÐÎʽ£¨Ïà¶ÔÓÚÒÑÖªµÄURL£©¡£Á½ÖÖÐÎʽµÄÇø±ðÊǸù¾ÝÕâÑùµÄÊÂʵ£º¾ø¶ÔURI×ÜÊÇÒÔÒ»¸ö·½°¸£¨scheme£©Ãû×÷Ϊ¿ªÍ·£¬ÆäºóÊÇÒ»¸öðºÅ¡£¹ØÓÚURL¸üÏ꾡µÄÐÅÏ¢Çë²Î¿´"ͳһ×ÊÔ´±êʶ·û£¨URI£©:Ò»°ãÓï·¨ºÍÓïÒå"£¬RFC 2396 [42]£¨´úÌæÁËRFCs 1738 [4]ºÍRFC 1808 [11]£©¡£±¾¹æ·¶²ÉÓÃÁËRFC 2396ÀïµÄ"URI-reference"£¬"absoluteURI"£¬"relativeURI"£¬"port"£¬"host"£¬"abs_path"£¬"rel_path",ºÍ"authority"µÄ¶¨Òå¸ñʽ¡£
HTTPÐÒé²»¶ÔURIµÄ³¤¶È×÷ÊÂÏȵÄÏÞÖÆ£¬·þÎñÆ÷±ØÐëÄܹ»´¦ÀíËüÃÇ×ÊÔ´µÄURI£¬²¢ÇÒÓ¦¸ÃÄܹ»´¦ÀíÎÞÏÞ³¤¶ÈµÄURI£¬ÕâÖÖÎÞЧ³¤¶ÈµÄURL¿ÉÄÜ»áÔÚ¿Í»§¶ËÒÔGETÐÎʽµÄÇëÇó²úÉú¡£·þÎñÆ÷Ó¦¸Ã·µ»Ø414״̬Â루´Ë״̬Âë´ú±íRequest-URIÌ«³¤£©£¬Èç¹û·þÎñÆ÷²»ÄÜ´¦ÀíÌ«³¤µÄURIµÄʱºò¡£
×¢:·þÎñÆ÷ÔÚÒÀÀµ´óÓÚ255×Ö½ÚµÄURIʱӦ½÷É÷£¬ÒòΪһЩ¾ÉµÄ¿Í»§»ò´úÀíʵÏÖ¿ÉÄܲ»Ö§³ÖÕâЩ³¤¶È¡£
3.2.2 HTTP URL
ͨ¹ýHTTPÐÒ飬HTTP·½°¸£¨HTTP scheme£©±»ÓÃÓÚ¶¨Î»ÍøÂç×ÊÔ´£¨resourse£©µÄλÖᣱ¾½Ú¶¨ÒåÁËÕâÖÖ·½°¸µÄÓï·¨ºÍÓïÒå¡£
HTTP_URL = "HTTP:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
Èç¹û¶Ë¿ÚΪ¿Õ»òδ¸ø³ö£¬¾Í¼Ù¶¨Îª80¡£ÓïÒå¼´£ºÒÑʶ±ðµÄ×ÊÔ´·ÅÔÚ·þÎñÆ÷ÉÏ£¬ÔÚÄÇ̨Ö÷»úµÄÄǸö¶Ë¿ÚÉϼàÌýTCPÁ¬½Ó¡£Õâʱ×ÊÔ´µÄÇëÇóµÄURIΪ¾ø¶Ô·¾¶£¨5.1.2½Ú£©¡£ÎÞÂÛʲô¿ÉÄܵÄʱºò£¬URLÀïʹÓÃIPµØÖ·¶¼ÊÇÓ¦¸Ã±ÜÃâµÄ£¨²Î¿´RFC 1900 [24]£©¡£Èç¹û¾ø¶ÔµØÖ·£¨abs_path£©Ã»ÓгöÏÖÔÚURLÀÄÇôӦ¸Ã¸ø³ö"/"¡£Èç¹û´úÀí£¨proxy£©ÊÕµ½Ò»¸öÖ÷»ú£¨host£©Ãû£¬µ«ÊÇÕâ¸öÖ÷»úÃû²»ÊÇÈ«³ÆµÄÓòÃû£¨fully quanlified domain name£©£¬Ôò´úÀíÓ¦¸Ã°ÑËüµÄÓòÃû¼Óµ½Ö÷»úÃûÉÏ¡£Èç¹û´úÀí£¨proxy£©½ÓÊÕÁËÒ»¸öÈ«³ÆµÄÓòÃû£¬´úÀí²»±Ø¸Ä±äÖ÷»ú¡£
3.2.3 URI ±È½Ï
µ±±È½ÏÁ½¸öURIÊÇ·ñÆ¥Åäʱ£¬¿Í»§Ó¦¸Ã¶ÔÕû¸öURI±È½ÏʱӦ¸ÃÇø·Ö´óСд£¬²¢ÇÒÒ»¸ö×Ö½ÚÒ»¸ö×ֽڵıȽϡ£ µ«ÏÂÃæÓÐÐ©ÌØÊâÇé¿ö£º
- Ò»¸öΪ¿Õ»òδ¸ø¶¨µÄ¶Ë¿ÚµÈͬÓÚURI-refernece£¨¼ûRFC 2396£©ÀïµÄĬÈ϶˿Ú;
- Ö÷»ú£¨host£©ÃûµÄ±È½Ï±ØÐë²»±Ø·Ö´óСд;
- ·½°¸£¨scheme£©ÃûµÄ±È½Ï±ØÐëÊDz»Çø·Ö´óСдµÄ;
- Ò»¸ö¿Õ¾ø¶Ô·¾¶£¨abs_path£©µÈͬÓÚ"/"¡£
³ýÁË"±£Áô£¨reserved£©"ºÍ"²»°²È«£¨unsafe£©"×Ö·û¼¯ÀïµÄ×Ö·û£¨²Î¼ûRFC 2396 [42]£© £¬ÆäËü×Ö·û¶¼µÈЧÓÚËüÃǵÄ"%HEXHEX"±àÂë.
ÀýÈç,ÒÔÏÂÈý¸öURIÊǵÈͬµÄ:
http://abc.com:80/~smith/home.html
http://ABC.com/%7Esmith/home.html
http://ABC.com:/%7esmith/home.html
3.3 ÈÕÆÚ/ʱ¼ä¸ñʽ£¨Date/Time Formats£©
3.3.1ÍêÕûÈÕÆÚ £¨Full Date£©
HTTPÓ¦ÓÃÔø¾Ò»Ö±ÔÊÐíÈýÖÖ²»Í¬ÈÕÆÚ/ʱ¼ä¸ñʽ£º
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime£¨£© format
µÚÒ»ÖÖ¸ñʽÊÇ×÷ΪInternet±ê×¼Ìá³öÀ´µÄ£¬ËüÊÇÒ»¸ö¹ú¶¨³¤¶ÈµÄ£¬ÓÉRFC 1123 [8]£¨RFC 822[9]µÄÉý¼¶°æ±¾£©¶¨ÒåµÄÒ»¸ö×Ó¼¯¡£µÚ¶þÖÖ¸ñʽʹÓÃ±È½ÏÆÕ±é£¬µ«ÊÇ»ùÓÚ·ÏÆúµÄRFC 850 [12]£¬²¢ÇÒûÓÐÄê·Ý¡£Èç¹ûHTTP/1.1¿Í»§¶ËºÍ·þÎñÆ÷½âÎöÈÕÆÚ£¬ËûÃDZØÐëÄܽÓÊÕËùÓÐÈýÖÖ¸ñʽ£¨ÎªÁ˼æÈÝHTTP/1.0£©£¬µ«ÊÇËüÃÇÖ»ÄܲúÉúRFC 1123ÀﶨÒåµÄÈÕÆÚ¸ñʽÀ´Ìî³äÍ·Óò£¨header field£©Óõ½ÈÕÆÚµÄµØ·½¡£
×¢:ÈÕÆÚÖµµÄ½ÓÊÕÕß±»¹ÄÀøÄܽ¡×³µÄ½ÓÊÕ¿ÉÄÜÓÉ·ÇHTTPÓ¦Ó÷¢À´µÄÈÕÆÚÖµ£¬ÀýÈçÓÐʱ¿ÉÒÔͨ¹ý´úÀí£¨proxy£©/Íø¹Ø£¨gateway£©ÏòHTTP://www.cnpaf.net/class/smtp' target='_blank'>SMTP»òNNTP»ñµÃ»òת·¢ÏûÏ¢¡£
ËùÓеÄHTTPÈÕÆÚ/ʱ¼ä¶¼±ØÐëÒÔ¸ñÁÖÍþÖÎʱ¼ä£¨GMT£©±íʾ¡£¶ÔHTTP¶øÑÔ£¬GMTÍêÈ«µÈͬÓÚUTC£¨ÊÀ½çе÷ʱ¼ä£©¡£Ç°Á½ÖÖÈÕÆÚ/ʱ¼ä¸ñʽÀï°üº¬“GMT”£¬ËüÊÇÊ±ÇøµÄÈý¸ö×ÖÃæµÄ¼òд£¬²¢ÇÒµ±¶Áµ½Ò»¸öasctime¸ñʽʱ±ØÐëÏȱ»¼Ù¶¨ÊÇGMTʱ¼ä¡£HTTPÈÕÆÚ£¨HTTP-date£©Çø·Ö´óСд£¬²»Äܰüº¬Ò»¸ö¶îÍâµÄLWS£¬³ý·Ç´ËLWS×÷ΪÔÚÏÂÃæµÄHTTP-dateÓï·¨ÖÐÖ¸¶¨µÄSP¡£
HTTP-date = RFC1123-date | RFC850-date | asctime-date
RFC1123-date = wkday "," SP date1 SP time SP "GMT"
RFC850-date = weekday "," SP date2 SP time SP "GMT"
asctime-date = wkday SP date3 SP time SP 4DIGIT
date1 = 2DIGIT SP month SP 4DIGIT
; day month year £¨e.g., 02 Jun 1982£©
date2 = 2DIGIT "-" month "-" 2DIGIT
; day-month-year £¨e.g., 02-Jun-82£©
date3 = month SP £¨ 2DIGIT | £¨ SP 1DIGIT £©£©
; month day £¨e.g., Jun 2£©
time = 2DIGIT ":" 2DIGIT ":" 2DIGIT
; 00:00:00 - 23:59:59
wkday = "Mon" | "Tue" | "Wed"
| "Thu" | "Fri" | "Sat" | "Sun"
weekday = "Monday" | "Tuesday" | "Wednesday"
| "Thursday" | "Friday" | "Saturday" | "Sunday"
month = "Jan" | "Feb" | "Mar" | "Apr"
| "May" | "Jun" | "Jul" | "Aug"
| "Sep" | "Oct" | "Nov" | "Dec"
×¢Òâ:HTTP¶ÔÈÕÆÚ/ʱ¼ä¸ñʽµÄÒªÇó½ö½öÓ¦ÓÃÔÚÐÒéµÄÏûÏ¢£¨Òë×¢:ÔÎÄÊÇprotocol stream£¬±ãÓÚÀí½âÕâÀïÒë×÷ÏûÏ¢£©Àï¡£¿Í»§ºÍ·þÎñÆ÷²»±Ø°ÑÕâÖÖ¸ñʽӦÓÃÓÚÓû§³ÊÏÖ£¨user presentation£©£¬ÇëÇó¼Ç¼ÈÕÖ¾£¬µÈµÈ¡£.
3.3.2 Delta Seconds
һЩHTTPÍ·Óò£¨header field£©ÔÊÐíÓÃÕûÊýÃë±íʾʱ¼äÖµ£¬ÕûÊýÃëÓÃÊ®½øÖƱíʾ£¬´ËÕûÊýÃë±íʾÏûÏ¢±»½ÓÊÕºóʱ¼ä¡£
delta-seconds = 1*DIGIT
3.4 ×Ö·û¼¯
HTTPʹÓÃÊõÓï"×Ö·û¼¯"µÄ¶¨Ò壬ÕâºÍMIMEÖÐËùÃèÊöµÄÊÇÒ»Ñù.
±¾ÎĵµÖеÄÊõÓï"×Ö·û¼¯"Éæ¼°µ½Ò»ÖÖ·½·¨£¬´Ë·½·¨ÊÇÓÃÒ»¸ö»ò¶à¸ö±í½«Ò»¸ö½ÚÐòÁÐת»»³ÉÒ»¸ö×Ö·ûÐòÁУ¨Òë×¢£º´ÓÕâÀïÀ´¿´£¬ÕâÓ¦¸ÃÊÇÒ»ÖÖÓ³Éä¹ØÏµ£¬±í±£´æÁËÓ³Éä¹ØÏµ£©¡£×¢Òâ·´·½ÏòµÄÎÞÌõ¼þת»»£¨Òë×¢:´ÓÒ»¸ö×Ö·ûÐòÁе½Ò»¸ö×Ö½ÚÐòÁеÄת»»£©ÊDz»ÐèÒªµÄ£¬ÒòΪ²¢²»ÊÇËùÓеÄ×Ö·û¶¼ÄÜÔÚÒ»¸ö¸ø¶¨µÄ×Ö·û¼¯ÀïµÃµ½£¬Ò»¸ö×Ö·û¼¯¿ÉÄÜÌṩ¶à¸ö×Ö½ÚÐòÁбíÕ÷Ò»¸öÌØ¶¨µÄ×Ö·û¡£Õâ¸ö¶¨ÒåÊÇΪÁËÔÊÐí²»Í¬ÖÖÀàµÄ×Ö·û±àÂë´Óµ¥Ò»¼òµ¥±íÓ³É䣨ÈçUS-ASCII£©µ½¸´ÔÓ±íµÄת»»·½·¨ÈçISO-2022¼¼ÊõÓõ½µÄ¡£È»¶ø£¬ÓëMIME×Ö·û¼¯Ãû×ÖÏà¹ØµÄ¶¨Ò屨ÐëÒª³ä·Ö˵Ã÷´Ó×Ö½Úµ½×Ö·ûµÄÓ³Éä¡£ÌØ±ðµÄ£¬Ê¹ÓÃÍⲿÂÖÀªÐÅÏ¢À´¾«È·È·¶¨Ó³ÉäÊDz»ÔÊÐíµÄ.
×¢:ÕâÀïʹÓõÄÊõÓï"×Ö·û¼¯"Ò»°ãµÄ±»³Æ×÷Ò»ÖÖ"×Ö·û±àÂë"¡£²»¹ý¼ÈÈ»HTTPºÍMIMEÔÚͬһ»ú¹¹×¢²á£¬ÊõÓïͳһÊǺÜÖØÒªµÄ¡£
HTTP×Ö·û¼¯ÊÇÓò»Çø·Ö´óСдµÄ±ê¼Ç£¨token£©±íʾ¡£ËùÓеıê¼Ç¼¯ÓÉIANA×Ö·û¼¯×¢²á»ú¹¹[19]¶¨Òå¡£
charset = token
¾¡¹ÜHTTPÔÊÐíÓÃÈÎÒâ±ê¼Ç£¨token£©×÷Ϊ×Ö·û¼¯£¨charset£©Öµ£¬µ«Èκαê¼ÇÖµÈç¹ûËüÒѾÔÚIANA×Ö·û¼¯×¢²á»ú¹¹×¢²áÁËÔò±ØÐë±íʾÔÚ¸Ã×¢²á»ú¹¹¶¨ÒåµÄ×Ö·û¼¯¡£¶ÔÄÇЩ·ÇIANA¶¨ÒåµÄ×Ö·û¼¯£¬Ó¦ÓóÌÐòÓ¦¸ÃÏÞÖÆÊ¹Óá£
HTTPÐÒéµÄʵÏÖÕßÓ¦¸Ã×¢ÒâIETF×Ö·û¼¯µÄÒªÇó[38][41].
3.4.1¶ªÊ§µÄ×Ö·û¼¯£¨Missing Charset£©
һЩHTTP/1.0Ó¦ÓóÌÐòµ±ËûÃǽâÎöContent-Typeͷʱ£¬µ±·¢ÏÖûÓÐ×Ö·û¼¯²ÎÊý£¨charset parameter£¬Òë×¢:Content-Type: text/plain; charset=UTF-8£¬´Ëʱcharset=UTF-8¾ÍÊÇ×Ö·û¼¯²ÎÊý£©¿ÉÓÃʱ£¬ÕâÒâζ׎ÓÊÕÕß±ØÐë²Â²âʵÌåÖ÷Ì壨entity body£¬Òë×¢£ºÕâÀï·Òë³É“ʵÌåÖ÷Ìå”ÒòΪContent-TypeÍ·ÊÇʵÌåÍ·£¬ÏûϢͷ¿ÉÒÔ·ÖΪʵÌåÍ·£¬³£ÓÃÍ·£¬ÇëÇóÍ·£¬ÏìӦͷ£¬ÔÚÒëÎÄÖжà´ÎÓõ½“Í·”ºÍ“Í·Óò”£¬ÈçÏûϢͷ£¬ÏûϢͷÓò£¬ÆäʵÊÇͬһ¸öÒâ˼£¬HTTP1.1ÐÒéÓÐʱºò¸ÅÄî²¢²»ÊÇÍêȫͳһµÄ£©µÄ×Ö·û¼¯ÊÇʲô¡£Èç¹û·¢ËÍÕßÏ£Íû±ÜÃâÕâÖÖÇé¿ö£¬ËûÓ¦¸ÃÔÚContent-TypeÍ·ÓòÀï°üº¬Ò»¸ö×Ö·û¼¯²ÎÊý£¬¼´Ê¹×Ö·û¼¯ÊÇISO-8859-1Ò²Ó¦¸ÃÕâÑù×ö£¬ÕâÑù¾Í²»»áÈýÓÊÕÕß²úÉú»ìÏý¡£
²»ÐÒµÄÊÇ£¬Ò»Ð©¾ÉµÄHTTP/1.0¿Í»§¶Ë²»ÄÜ´¦ÀíÔÚContent-TypeÍ·ÓòÀïÃ÷È·Ö¸¶¨µÄ×Ö·û¼¯²ÎÊý¡£HTTP/1.1½ÓÊն˱ØÐëÒªÈÏÕæ¶Ô´ý·¢ËÍÕßÌṩµÄ×Ö·û¼¯£»²¢ÇÒµ±Óû§´úÀí£¨user agent£¬Òë×¢£ºÈçä¯ÀÀÆ÷£¬¿ÉÈÏΪÊǽÓÊÕ¶Ë£©¿ªÊ¼ÏÔʾһ¸öÎĵµÊ±£¬ËäÈ»Óû§´úÀí¿ÉÒԲ²âÎĵµµÄ×Ö·û¼¯£¬µ«Èç¹ûcontent-typeÍ·ÓòÀïÌṩÁË×Ö·û¼¯£¬²¢ÇÒÓû§´úÀíÒ²Ö§³ÖÕâÖÖ×Ö·û¼¯µÄÏÔʾ£¬²»¹ÜÓû§´úÀíÊÇ·ñÔ¸Ò⣬Ëü±ØÐëÒªÀûÓÃÕâÖÖ×Ö·û¼¯¡£²Î¼û3.7.1½Ú¡£
3.5 ÄÚÈݱàÂ루Content Codings£©
ÄÚÈݱàÂëÖµ£¨content coding value£©±íʾһÖÖÒѾ»ò¿ÉÒÔÓ¦ÓÃÓÚʵÌåµÄ±àÂëת»»£¨encoding transformation£©¡£ÄÚÈݱàÂëÖ÷ÒªÓÃÓÚÎĵµµÄѹËõ»òÆäËüÓÐЧµÄ±ä»»£¬µ«ÕâÖֱ任ÐèÒª²»ÄܶªÊ§ÎĵµµÄýÌåÀàÐÍ£¨media type£¬Òë×¢£ºÎĵµÒ»°ã»áÓÐýÌåÀàÐÍ£¬Õâͨ¹ýÔÚcontent-typeÀïÖ¸¶¨£©µÄÌØÐÔ£¬Ò²²»ÄܶªÊ§ÎĵµµÄÐÅÏ¢£¨Òë×¢£º¾ÍÏñÓÐËðѹËõºÍÎÞËðѹËõ£¬Ç°Õß²»»á¶ªÊ§ÐÅÏ¢£¬ºóÕ߻ᶪʧÐÅÏ¢£©¡£ÊµÌå¾³£±»±àÂëµÄ´¢´æ£¬È»ºóÖ±½Ó´«ËÍ£¬½ÓÊÕ¶ËÖ»ÄܽâÂë¡£
content-coding = token
ËùÓÐÄÚÈݱàÂëÖµ£¨content-coding value£©ÊDz»Çø·Ö´óСдµÄ¡£HTTP/1.1ÔÚ½ÓÊÕÒëÂë £¨14.3½Ú£©ºÍÄÚÈÝÒëÂ루Content-Encoding£©£¨14.11½Ú£©Í·ÓòÀïʹÓÃÄÚÈݱàÂëÖµ£¨content-coding value£©¡£¾¡¹Ü¸ÃÖµÃèÊöÁËÄÚÈݱàÂ룬¸üÖØÒªµÄÊÇËüÖ¸³öÁËÒ»ÖÖ½âÂë»úÖÆ£¬ÀûÓÃÕâÖÖ»úÖÆ¶ÔʵÌåµÄ±àÂë½øÐнâÂë¡£
ÍøÂç·ÖÅäÊý×ÖȨÍþ£¨ £¨IANA£©³äµ±ÄÚÈݱàÂëÖµ±ê¼Ç£¨token£©µÄ×¢²á»ú¹¹¡£×î³õ£¬×¢²á±íÀï°üº¬ÏÂÁбê¼Ç:
gzip£¨Ñ¹Ëõ³ÌÐò£©
Ò»ÖÖÓÉÎļþѹËõ³ÌÐò"gzip"£¨GNU zip£©²úÉúµÄ±àÂë¸ñʽ£¨ÔÚRFC 1952ÖÐÃèÊö£©¡£ÕâÖÖ±àÂë¸ñʽÊÇÒ»ÖÖ¾ßÓÐ32λCRCµÄLempel-Ziv±àÂ루LZ77£©¡£
compress£¨Ñ¹Ëõ£©
Ò»ÖÖÓÉUNIXÎļþѹËõ³ÌÐò"compress"²úÉúµÄ±àÂë¸ñʽ¡£ÕâÖÖ±àÂë¸ñʽÊÇÒ»ÖÖ¾ßÓпÉÊÊÓ¦ÐÔµÄLempel-Ziv-Welch±àÂ루LZW£©¡£
¶ÔÓÚ½«À´µÄ±àÂ룬ÓóÌÐòÃûʶ±íÕ÷±àÂë¸ñʽÊDz»¿ÉÈ¡¡£ÔÚÕâÀïÓõ½ËûÃÇÊÇÒòΪËûÃÇÔÚÀúÊ·µÄ×÷Óã¬ËäÈ»ÕâÑù×ö²¢²»ºÃ¡£ÎªÁËͬÒÔǰµÄHTTPʵÏÖÏà¼æÈÝ£¬Ó¦ÓóÌÐòÓ¦¸Ã½«"x-gzip"ºÍ"x-compress"·Ö±ðµÈͬÓÚ"gzip"ºÍ"compress"¡£
deflate£¨ËõС£©¡¡
deflate±àÂëÊÇÓÉRFC 1950 [31]¶¨ÒåµÄ"zlib"±àÂë¸ñʽÓëRFC 1951 [29]ÀïÃèÊöµÄ"deflate"ѹËõ»úÖÆµÄ×éºÏµÄ²úÎï¡£
identity£¨Ò»ÖÂÐÔ£©
IdentityÊÇȱʡ±àÂ룻ָÃ÷ÕâÖÖ±àÂë±íÃ÷²»½øÐÐÈκαàÂëת»»¡£ÕâÖÖÄÚÈݱàÂë½ö±»ÓÃÓÚ½ÓÊÕÒëÂ루Accept-Encoding£©Í·Óò£¬µ«²»Äܱ»ÓÃÔÚÄÚÈÝÒëÂ루Content-Encoding£©Í·Óò¡£.
еÄÄÚÈݱàÂëÖµ±ê¼Ç£¨token£©Ó¦¸Ã±»×¢²á£»ÎªÁËʵÏÖ¿Í»§ºÍ·þÎñÆ÷¼äµÄ»¥²Ù×÷ÐÔ£¬ÊµÏÖÐÂÖµµÄÄÚÈݱàÂëËã·¨¹æ·¶Ó¦¸ÃÄܹ«¿ªÀûÓò¢ÇÒÄܶÀÁ¢ÊµÏÖ£¬²¢ÇÒÓë±¾½ÚÖб»¶¨ÒåµÄÄÚÈݱàÂëÄ¿µÄÏàÒ»Ö¡£
3.6 ´«Êä±àÂë £¨Transfer Codings£©
´«Êä±àÂëÖµ£¨transfer-coding value£¬Òë×¢£ºtransfer codingºÍºÍtransfer-codingÕâÁ½¸öÊõÓïÔÚ±¾ÐÒ鹿·¶ÀïËù±í´ïµÄÒâ˼Æäʵûʲô̫´óÇø±ð£¬“transfer-coding”¿ÉÄܸüÄܱí´ïÓïÒ⣬ÒòΪËüÊǹæÔòÖеĹæÔòÃû£¬¼ûÏÂÃæºì×ֵĹæÔò£©±»ÓÃÀ´±íʾһ¸öÒѾ£¬Äܹ»£¬»ò¿ÉÄÜÓ¦ÓÃÓÚÒ»¸öʵÌåµÄ±àÂëת»»£¬´«Êä±àÂëÊÇΪÁËÄܹ»È·±£ÍøÂ簲ȫ´«Êä¡£ÕⲻͬÓÚÄÚÈݱàÂ루content coding£©£¬ÒòΪ´«Êä±àÂ루transfer coding£©ÊÇÏûÏ¢µÄÊôÐÔ¶ø²»ÊÇʵÌåµÄÊôÐÔ¡£
transfer-coding = "chunked" | transfer-extension
transfer-extension = token *£¨ ";" parameter £©
²ÎÊý£¨parameter£©²ÉÓÃÊôÐÔ/Öµ¶ÔµÄÐÎʽ.
parameter = attribute "=" value
attribute = token
value = token | quoted-string
ËùÓд«Êä±àÂëÖµ£¨transfer-coding value£¬Òë×¢£ºÉÏÃæºìÌå×ֵȺÅÓұ߹æÔò±í´ïʽËù±í´ïµÄÖµ£©ÊÇ´óСд²»Ãô¸Ð¡£´«Êä±àÂëÖµÔÚTEÍ·Óò£¨14.39½Ú£©ºÍÔÚ´«ÊäÒëÂ루Transfer-encoding£© Í·ÓòÖУ¨14.41½Ú£©±»ÔËÓá£
ÎÞÂÛºÎʱ£¬´«Êä±àÂ루transfer-coding£©Ó¦ÓÃÓÚÒ»¸öÏûÏ¢Ö÷Ì壨message body£©Ê±£¬Èç¹û´æÔÚ¶à¸ö´«Êä±àÂ룬ÔòÕâЩ´«Êä±àÂëÖбØÐë°üÀ¨“¿é”£¨"chunked"£©´«Êä±àÂ룬³ý·Çͨ¹ý¹Ø±ÕÁ¬½Ó¶øÖжÏÏûÏ¢¡£µ±“¿é”£¨“chunked”£©´«Êä±àÂë±»ÓÃÓÚ´«Êä±àÂëʱ£¬Ëü±ØÐëÊÇÓ¦ÓÃÓÚÏûÏ¢Ö÷ÌåµÄ×îºó´«Êä±àÂë¡£"¿é"£¨"chunked"£©´«Êä±àÂë×î¶àÖ»ÄÜÓÃÓÚÏûÏ¢Ö÷Ì壨message-body£©Ò»´Î¡£¹æ¶¨ÁËÉÏÊö¹æÔòºó£¬½ÓÊÕÕ߾ͿÉÒÔÈ·¶¨ÏûÏ¢µÄ´«Ê䳤¶È£¨transfer-length£©£¨4.4½Ú£©
´«Êä±àÂëÓëMIME[7]µÄÄÚÈÝ´«ÊäÒëÂ루Content-Transfer-Encoding£¬Òë×¢£ºtransferÓ¦¸ÃÊÇ×ªÒÆ£¬Ç¨ÒƵÄÒâ˼£¬ÓÖÀýÈçHTTPÐÒ飬Ӧ¸Ã·Òë³É“³¬Îı¾×ªÒÆÐÒ锣¬µ«ÊÇÀúÊ·É϶¼·Òë³É“³¬Îı¾´«ÊäÐÒ锣¬ËùÒÔÕâÀï·Òë³É“³¬Îı¾´«ÊäÐÒ锣©ÖµÓÐÏàÀàËÆÐÍ£¬Ëü±»¶¨ÒåÄܹ»ÊµÏÖÔÚ7λ´«Êä·þÎñÉϱ£Ö¤¶þ½øÖÆÊý¾ÝµÄ´«Ê䰲ȫ¡£²»¹ý£¬´«Êä±àÂëÓëÄÚÈÝ´«ÊäÒëÂ루Content-Transfer-Encoding£©¶Ô´¿8λ´«ÊäÐÒéÓв»Í¬µÄ¹Ø×¢µã¡£ÔÚHTTPÖУ¬ÏûÏ¢Ö÷Ìå´æÔÚ²»°²È«µÄÒþ»¼£¬ÒòΪÓÐʱºòºÜÄÑÈ·¶¨ÏûÏ¢Ö÷ÌåµÄ³¤¶È£¬ÔÚ¹²ÏíµÄ´«ÊäÉϼÓÃÜÊý¾ÝÒ²»á´øÀ´°²È«ÐÔÎÊÌ⣨7.2.2½Ú£©¡£
ÍøÂç·ÖÅäÊý×ÖȨÍþ£¨IANA£©µ£ÈÎ×¢²á´«Êä±àÂëÖµ±ê£¨token£©¼ÇµÄ½ÇÉ«¡£Æð³õ,×¢²á°üº¬Èçϱê¼Ç:"¿é"£¨3.6.1½Ú£©,"Éí·Ý"£¨3.6.2½Ú£©,"gzip"£¨3.5½Ú£©,"ѹËõ"£¨3.5½Ú£©,ºÍ"ËõС"£¨3.5½Ú£©.
еĴ«Êä±àÂëÖµ±ê¼ÇÓ¦¸Ã×¢²á£¬ÕâͬеÄÄÚÈݱàÂëÖµ±ê¼ÇÒ²ÐèҪע²áÒ»Ñù¡£.
½ÓÊն˽ÓÊÕµ½Ò»¸ö´øÓд«Êä±àÂ루transfer-coding£©£¨Òë×¢£ºÍ¨¹ýÏûϢͷÓòtransfer-encodingÖ¸Ã÷´ËʵÌåÖ÷ÌåµÄ´«Êä±àÂ룩µÄʵÌåÖ÷Ì壨entity body£©£¬Èç¹ûËü²»ÄܶÔÕâ¸ö±àÂëºóµÄʵÌåÖ÷Ìå½øÐнâÂ룬ÄÇôËüÓ¦·µ»Ø501£¨²»ÄÜʵÏÖ£©£¬²¢ÇÒÒªÇжÏÁªÏµ¡£·þÎñÆ÷²»ÄÜÏòHTTP/1.0¿Í»§·¢ËÍ´«Êä±àÂë.
3.6.1¿é´«Êä±àÂ루Chunked Transfer Coding£©
¿é±àÂ루chunked encoding£©¸Ä±äÏûÏ¢Ö÷ÌåʹÏûÏ¢Ö÷Ì壨message body£¬Òë×¢£ºÏûÏ¢Ö÷ÌåÓëʵÌåÖ÷ÌåÊÇÓÐÇø±ðµÄ£¬ºóÃæÕ½ڽ«»á½éÉÜ£©³É¿é·¢ËÍ¡£Ã¿Ò»¸ö¿éÓÐËü×Ô¼ºµÄ´óС£¨size£©Ö¸Ê¾Æ÷£¬ÔÚËùÓеĿéÖ®ºó»á½ô½Ó×ÅÒ»¸ö¿ÉÑ¡µÄ°üº¬ÊµÌåÍ·ÓòµÄβ²¿£¨trailer£©¡£ÕâÔÊÐí·¢ËͶËÄܶ¯Ì¬Éú³ÉÄÚÈÝ£¬²¢ÄÜЯ´øÓÐÓõÄÐÅÏ¢£¬ÕâЩÐÅÏ¢ÄÜÈýÓÊÕÕßÅжÏÏûÏ¢ÊÇ·ñ½ÓÊÕÍêÕû¡£
Chunked-Body£¨¿éÕýÎÄ£© = *chunk£¨¿é£©
last-chunk£¨×îºó¿é£©
trailer£¨Î²²¿£©
CRLF
chunk£¨¿é£© = chunk-size [ chunk-extension ] CRLF
chunk-data CRLF
chunk-size = 1*HEX
last-chunk = 1*£¨"0"£© [ chunk-extension ] CRLF
chunk-extension= *£¨ ";" chunk-ext-name [ "=" chunk-ext-val ] £©
chunk-ext-name = token
chunk-ext-val = token | quoted-string
chunk-data = chunk-size£¨OCTET£©
trailer = *£¨entity-header CRLF£©
chunk-sizeÊÇÓÃ16 ½øÖÆÊý×Ö×Ö·û´®¡£¿é±àÂ루chunked encoding£©ÒÔÈÎÒ»´óСΪ0µÄ¿é½áÊø£¬½ô½Ó×ÅÊÇβ²¿£¨trailer£©£¬Î²²¿ÒÔÒ»¸ö¿ÕÐÐÖÕÖ¹¡£
β²¿£¨trailer£©ÔÊÐí·¢ËͶËÔÚÏûÏ¢µÄĩβ°üº¬¸½¼ÓµÄHTTPÍ·Óò£¨header field£©¡£TrailerÍ·Óò£¨Trailer header field£¬Òë×¢£ºTrailerÍ·Êdz£ÓÃÏûϢͷ£¬ÔÚ14.40½Ú˵Ã÷£©±»Ó¦ÓÃÀ´Ö¸Ã÷ÄÄЩͷÓò±»°üº¬ÔÚ¿é±àÂëµÄβ²¿£¨trailer£© £¨¼û14.40½Ú£©
Èç¹û·þÎñÆ÷ÒªÓÿ鴫Êä±àÂë½øÐÐÏìÓ¦£¬Ëü²»Äܰüº¬Î²²¿£¨trailer£©£¬³ý·ÇÒÔÏÂÖÁÉÙÒ»ÌõÎªÕæ£º
a£©Èç¹û´ËÏìÓ¦µÄÇëÇó°üÀ¨Ò»¸öTEÍ·Óò£¬²¢ÇÒËüÖ¸Ã÷ÁË´«Êä±àÂëÖеētrailers”ÊǿɽÓÊܵ쬵±ÏìÓ¦µÄ´«Êä±àÂ루transfer-coding£©ÊÇ¿é±àÂëʱ¡£ÕâÔÚ14.39½ÚÖÐÃèÊö£»»òÕß
b£©Èç¹û·þÎñÆ÷ÊÇÏìÓ¦µÄÔ´·þÎñÆ÷£¬²¢ÇÒ½ÓÊն˽ÓÊÕ¿é´«Êä±àÂëÏìÓ¦µ«²»»áÈ¥Àí»áÏìÓ¦µÄβ²¿£¨trailer£¬Òë×¢£ºÎ²²¿°üº¬Í·Óò£¬Í·Óò¾ÍÊÇÏûÏ¢µÄÔªÊý¾Ý£¨metadata£©£©²¢ÇÒÕâÖÖ·½Ê½Ô´·þÎñÆ÷ÊÇ¿ÉÒÔ½ÓÊܵģ¬Õâʱ·þÎñÆ÷ÊDz»ÐèÒª°Ñβ²¿£¨trailer£©°üº¬½øÏûÏ¢µÄ¿é´«Êä±àÂëÖÐÈ¥µÄ¡£»»¾ä»°Ëµ£¬Ô´·þÎñÆ÷ÔÒâ½ÓÊÜβ²¿£¨trailer£©¿ÉÄÜ»áÔÚµ½´ï¿Í»§¶Ëʱ±»¶ªÆúµÄ¿ÉÄÜÐÔ¡£
´ËÒªÇó·ÀÖ¹ÁËÒ»ÖÖ»¥²Ù×÷ÐÔµÄʧ°Ü£¬µ±ÏûÏ¢±»Ò»¸öHTTP/1.1£¨»ò¸ü³ÙµÄ£©´úÀí£¨proxy£©½ÓÊÕ²¢ÇÒתµ½Ò»¸öHTTP/1.0µÄ½ÓÊն˵Äʱºò¡£
ÔÚ¸½Â¼19.4.6½Ú½éÉÜÁËÒ»¸öÀý×Ó£¬Õâ¸öÀý×Ó½éÉÜÔõÑù¶ÔÒ»¸ö¿éÕýÎÄ£¨chunked-body£©½øÐнâÂë¡£
ËùÓÐHTTP/1.1Ó¦ÓóÌÐò±ØÐëÄܽÓÊպͽâÂë¿é£¨chunked£©´«ÊäÒëÂ룬²¢ÇÒ±ØÐëºöÂÔËüÃDz»ÄÜÀí½âµÄ¿éÀ©Õ¹£¨chunk-extentsion£¬Òë×¢£º¼ûÉÏÃæµÄ¹æÔò±í´ïʽ£©.
3.7 ýÌåÀàÐÍ£¨Media Type£©
HTTPÔÚContent-Type£¨14.17½Ú£©ÊµÌåÍ·ÓòºÍAcceptÇëÇóÍ·ÓòÀïÀûÓÃÍøÂçýÌå[17]ÀàÐÍ£¬ÕâÊÇΪÁËÌṩ¹«¿ªµÄ£¬¿ÉÀ©Õ¹µÄÊý¾Ý´òÓ¡ºÍÀàÐÍÐÉÌ¡£
media-type = type "/" subtype *£¨ ";" parameter £©
type = token
subtype = token
²ÎÊý£¨parameter£©ÒÔÒ»ÖÖÊôÐÔ/Öµ¶ÔµÄÐÎʽ¸úËætype/subtype£¨Èç3.6½Ú¶¨Ò壩 ¡£
ÀàÐÍ£¨type£©£¬×ÓÀàÐÍ£¨subtype£©£¬ºÍ²ÎÊý£¨parameter£©ÀïÊôÐÔÃû³ÆÊÇ´óСд²»Ãô¸ÐµÄ¡£²ÎÊýÖµÓпÉÄÜÊÇ´óСдÃô¸ÐµÄ£¬Ò²¿ÉÄܲ»ÊÇ£¬Õâ¸ù¾Ý²ÎÊýÀïÊôÐÔÃûµÄÓïÒâ¡£ÏßÐÔ¿Õ°×£¨LWS£©²»Äܱ»ÓÃÓÚÀàÐÍ£¨type£©ºÍ×ÓÀàÐÍ£¨subtype£©Ö®¼ä£¬Ò²²»ÄÜÓÃÓÚ²ÎÊýµÄÊôÐÔºÍÖµÖ®¼ä¡£²ÎÊýµÄ³öÏÖ»ò²»³öÏÖ¶Ô´¦ÀíýÌåÀàÐÍ£¨media-type£©¿ÉÄÜ»áÓаïÖú£¬ÕâÈ¡¾öÓÚËüÔÚýÌåÀàÐÍ×¢²á±íÀïµÄ¶¨Òå¡£
×¢ÒâһЩ¾ÉµÄHTTPÓ¦ÓóÌÐò²»ÄÜʶ±ðýÌåÀàÐ͵IJÎÊý£¨parameter£©¡£µ±ÏòÒ»¸ö¾ÉµÄHTTPÓ¦ÓóÌÐò·¢ËÍÊý¾Ýʱ£¬·¢ËͶËÖ»ÓÐÔÚ±»type/subtype¶¨ÒåÐèҪʱ²ÅʹÓÃÀàÐͲÎÊý£¨parameter£©¡£
ýÌåÀàÐÍ£¨media-type£©ÖµÐèÒª±»×¢²áµ½ÍøÂçÊý×Ö·ÖÅäȨÍþ£¨IANA[19]£©ÀýÌåÀàÐ͵Ä×¢²á³ÌÐòÔÚRFC 1590[17]Öдó¸ÅÃèÊö¡£Ê¹ÓÃδ¾×¢²áµÄýÌåÀàÐÍÊDz»±»¹ÄÀøµÄ¡£
3.7.1¹æ·¶»¯ºÍÎı¾È±Ê¡ £¨Canonicalization and Text Defaults£©
ÍøÂçýÌåÀàÐÍÒԹ淶»¯µÄ¸ñʽ±»×¢²á¡£Ò»¸öʵÌåÖ÷Ì壨entity-body£©Í¨¹ýHTTPÏûÏ¢´«Ê䣬Ëü±ØÐëÔÚ´«ÊäǰÒÔÒ»ÖÖºÏÊʵĹ淶»¯µÄ¸ñʽ±íÕ÷³ýÁËÎı¾ÀàÐÍ£¨text type£©£¬Îı¾ÀàÐͽ«»áÔÚÏÂÒ»¶Î²ûÊö¡£
µ±ÏûÏ¢ÒÔÒ»Öֹ淶»¯µÄ¸ñʽ±íÏÖʱ£¬Îı¾ÀàÐ͵Ä×ÓÀàÐÍ£¨subtype£©ÔËÓÃGRLF×÷ΪÎı¾ÀïµÄ»»Ðзû¡£HTTP·ÅËÉÁËÕâ¸öÒªÇ󣬲¢ÇÒÔÊÐíÎı¾Ã½ÌåÒÔÒ»¸öCR»òLF´ú±íÒ»¸ö»»Ðзû´«Ê䣬²¢ÇÒÕâÑù×öÒª¹á´©Õû¸öʵÌåÖ÷Ì壨entity-body£©¡£HTTPÓ¦ÓóÌÐò±ØÐëÄܽÓÊÕCRLF£¬CRºÍLF×÷ΪÔÚÎı¾Ã½ÌåÒ»¸ö»»Ðзû¡£ÁíÍ⣬Èç¹ûÎı¾×Ö·û¼¯£¨character set£©²»ÄÜÓÃ×Ö½Ú13ºÍ10À´·Ö±ðµØ±íÕ÷CRºÍLFÒòΪ´æÔÚһЩ¶à×Ö½Ú×Ö·û£¬HTTPÔÊÐíÓ¦ÓÃ×Ö·û¼¯ÀïµÈ¼ÛÓÚCRºÍLFµÄ×Ö½ÚÐòÁÐÀ´±íʾ»»Ðзû¡£¶Ô»»ÐзûµÄÁé»î´¦ÀíÖ»ÄÜÓ¦ÓÃÓÚʵÌåÖ÷ÌåÀïµÄÎı¾Ã½Ì壻ÔÚHTTPÏûÏ¢½á¹¹Àһ¸öµ¥¶ÀµÄCR»òLF¶¼²»ÄÜ´úÌæCRLF£¨ÈçÍ·ÓòºÍ¶à±ß½çÌ壨multipart boundaries£©½á¹¹À¡£
Èç¹ûÒ»¸öʵÌåÖ÷Ì壨entity-body£©ÓÃÄÚÈݱàÂ루content-coding£©½øÐбàÂ룬ÔʼÊý¾Ý£¨Òë×¢£º±»±àÂëǰµÄÊý¾Ý£©ÔÚ±»±àÂëǰ±ØÐëÊÇÒ»ÖÖ¶¨ÒåµÄýÌåÀàÐ͸ñʽ¡£.
"charset"²ÎÊý£¨parameter£©±»Ó¦ÓÃÓÚһЩýÌåÀàÐÍ£¬À´¶¨ÒåÊý¾ÝµÄ×Ö·û¼¯£¨¼û3.4½Ú£©¡£µ±·¢ËÍÕßûÓÐÔÚýÌåÀàÐÍ£¨media-type£©ÀïÖ¸Ã÷charset²ÎÊý£¨parameter£©Ê±£¬Îı¾ÀàÐ͵Ä×ÓýÌåÀàÐÍ£¨subtype£©±»ÈÏΪÊÇȱʡµÄISO-8859-1×Ö·û¼¯µ±±»½ÓÊÕÕß½ÓÊÕºó¡£Êý¾Ý±ØÐë±»ºÏÊʵÄ×Ö·û¼¯±êʶ¡£3.4.1½ÚÃèÊöÁ˼æÈÝÐÔÎÊÌâ¡£
3.7.2¶à²¿·ÖÀàÐÍ£¨Multipart type£©
MIMEÌṩÁËһϵÁÐ"¶à²¿·Ö"ÀàÐÍ---ÔÚµ¥¸öÏûÏ¢Ö÷ÌåÄÚ°ü×°Ò»¸ö»ò¶à¸öʵÌå¡£ËùÓеĶಿ·ÖÀàÐ͹²ÏíÒ»¸ö¹«¹²µÄÓï·¨£¨ÕâÔÚRFC 2046[40]µÄ5.1.1½ÚÖÐÃèÊö£©£¬²¢ÇÒ°üº¬Ò»¸ö±ß½ç£¨boundary£©²ÎÊý×÷Ϊ¶à²¿·ÖýÌåÀàÐÍÖµµÄÒ»²¿·Ö¡£¶à²¿·ÖÀàÐ͵ÄÏûÏ¢Ö÷ÌåÊÇÒ»¸öÐÒéÔªËØ£¬²¢ÇÒ±ØÐëÓÃCRLFÀ´±êʶÌ岿·Ö£¨body-part£¬Òë×¢£º¼ûRFC 2046 µÄ5½Ú£©Ö®¼äµÄ»»ÐС£
²»Í¬ÓÚRFC 2046ÀïµÄ¶à²¿·ÖÏûÏ¢ÀàÐ͵ÄÃèÊö£¬HTTP1.1¹æ¶¨Èκζಿ·ÖÀàÐ͵ÄÏûϢβÉù£¨epilogue£¬Ò룺¼ûRFC 2046¶Ô¶à²¿·ÖÏûÏ¢ÀàÐ͵ĹæÔòÃèÊö£©±ØÐë²»ÄÜ´æÔÚ£»HTTPÓ¦ÓóÌÐò²»ÄÜ´«ÊäβÉù£¨epilogue£©£¨¼´Ê¹ÔʼµÄ¶à²¿·ÖÏûϢβ²¿°üº¬Ò»¸öβÉù£©¡£´æÔÚÕâЩÏÞÖÆÊÇΪÁ˱£»¤¶à²¿·ÖÏûÏ¢Ö÷ÌåµÄ×ÔÎÒ¶¨½çµÄÌØÐÔ£¬ÒòΪ¶à²¿·Ö±ß½çµÄ½áÊø£¨Òë×¢£º¸ù¾ÝRFC2046Öж¨Ò壬¶à²¿·Ö±ß½ç½áÊøºó¿ÉÄÜ»¹»áÓÐβÉù£©±êÖ¾×ÅÏûÏ¢Ö÷ÌåµÄ½áÊø¡£
ͨ³££¬HTTP°ÑÒ»¸ö¶à²¿·ÖÀàÐ͵ÄÏûÏ¢Ö÷Ì壨message-body£©ºÍÈÎºÎÆäËûýÌåÀàÐ͵ÄÏûÏ¢Ö÷ÌåÏàͬ¶Ô´ý£ºÑϸñ¿´×÷ÓÐÓõĸºÔØÌå¡£ÓÐÒ»¸öÀýÍâ¾ÍÊÇ"multipart/byterange"ÀàÐÍ£¨¸½Â¼19.2£©£¬µ±Ëü³öÏÖÔÚ206£¨²¿·ÖÄÚÈÝ£©ÏìӦʱ£¬´ËÏìÓ¦»á±»Ò»Ð©HTTP»º´æ»úÖÆ½âÎö£¬»º´æ»úÖÆ½«»áÔÚ13.5.4½ÚºÍ14.16½Ú½éÉÜ¡£ÔÚÆäËüÇé¿öÏ£¬Ò»¸öHTTPÓû§´úÀí»á×ñÑMIMEÓû§´úÀíÒ»ÑùµÄ»òÕßÏàËÆµÄÐÐΪ£¬ÕâÒÀÀµÓÚ½ÓÊÕºÎÖֶಿ·ÖÀàÐÍ¡£Ò»¸ö¶à²¿·ÖÀàÐÍÏûÏ¢µÄÿһ¸öÌ岿·Ö£¨bady-part£©ÀïµÄMIMEÍ·Óò¶ÔÓÚHTTP²¢Ã»ÓÐÌ«´óÒâÒå³ýÁËMIMEÓïÒâ¡£
ͨ³££¬ Ò»¸öHTTPÓû§´úÀíÓ¦¸Ã×ñÑÓëÒ»¸öMINEÓû§´úÀíÏàͬ»òÏàËÆ¡£Èç¹ûÒ»¸öÓ¦ÓóÌÐòÊÕµ½Ò»¸ö²»ÄÜʶ±ðµÄ¶à²¿·Ö×ÓÀàÐÍ£¬Õâ¸öÓ¦ÓóÌÐò±ØÐ뽫ËüÊÓΪ"multipart/mixed"¡£
×¢:"multipart/form-data"ÀàÐÍÒѾ±»¹æ·¶µÄ¶¨ÒåΪ´«ËÍ´°ÌåÊý¾Ý£¨Òë×¢£ºÒ»°ãÓô°ÌåÉÏ´«Êý¾Ýʱ£¬ÉÏ´«µÄÊý¾ÝÀàÐ;ÍÊÇΪmultipart/form-dataÀàÐÍ£©£¬µ±ÓÃPOSTÇëÇó·½·¨´¦ÀíÊý¾Ýʱ¡£ÕâÔÚRFC 1867[15]ÀﶨÒå¡£
3.8 ²úÆ·±ê¼Ç £¨product Tokens£©
²úÆ·±ê¼ÇÓòúÆ·ÃûºÍ°æ±¾ºÅʶ±ðͨѶӦÓÃÈí¼þ¡£ºÜ¶àÍ·Óò¶¼»áÀûÓòúÆ·±ê¼Ç£¬ËüÔÊÐí¹¹³ÉÓ¦ÓóÌÐòÖØÒª²¿·ÖµÄ×Ó²úÆ·±»ÒÔ¿Õ°×·Ö¸ôÁо١£Í¨³££¬²úÆ·ÒÔÓ¦ÓóÌÐòµÄÖØÒªÐÔµÄ˳ÐòÀ´Áоٵġ£
product = token ["/" product-version]
product-version = token
Àý:
User-Agent:CERN-LineMode/2.15 libwww/2.17b3
Server: Apache/0.8.4
²úÆ·±êʾӦÑÔ¼òÒâêà¡£ËüÃDz»ÄÜÓÃÀ´×ö¹ã¸æ»òÆäËû²»ÖØÒªµÄÐÅÏ¢¡£ËäÈ»ÈÎÒ»±ê¼Ç¿ÉÄܳöÏÖproduct-versionÀµ«Õâ¸ö±ê¼Ç½öÄÜÓÃÀ´×öÒ»¸ö°æ±¾ £¨i.e., ͬ²úÆ·ÖеĺóÐø°æ±¾Ó¦¸ÃÔÚproduct-versionÉÏÓÐÇø±ð£©
3.9 ÖÊÁ¿Öµ£¨Quality Values£©
HTTPÄÚÈÝÐÉÌ£¨content negotiation£¬12½Ú½éÉÜ£©ÔËÓö̓¸¡µã”Êý×Ö£¨short floating point number£©À´±íÕ벻ͬÐÉ̲ÎÊýµÄÏà¶ÔÖØÒªÐÔ¡£ÖØÒªÐÔµÄȨֵ±»¹æ·¶»¯³ÉÒ»¸ö´Ó0µ½1µÄʵÊý¡£0ÊÇ×îСֵ£¬1ÊÇ×î´óÖµ¡£Èç¹ûÒ»¸ö²ÎÊýµÄÖÊÁ¿Öµ£¨quanlity value£©Îª0£¬ÄÇôÕâ¸ö²ÎÊýµÄÄÚÈݲ»±»¿Í»§¶Ë½ÓÊÜ¡£HTTP/1.1Ó¦ÓóÌÐò²»ÄܲúÉú¶àÓÚÈýλСÊýµÄʵÊý¡£ÏÂÃæ¹æÔòÏÞ¶¨ÁËÕâЩֵ¡£
qvalue = £¨ "0" [ "." 0*3DIGIT ] £©
| £¨ "1" [ "." 0*3£¨"0"£© ] £©
"ÖÊÁ¿Öµ" ÊÇÒ»¸ö²»µ±µÄÓôʣ¬ÒòΪÕâЩֵ½ö½ö±íÏÖÒ»ÖÐÏà¶ÔµÄ½µ¼¶¡£
3.10 ÓïÑÔ±êÇ© £¨Language Tags£©
Ò»¸öÓïÑÔ±êÇ©±íÕ÷Ò»ÖÖ×ÔÈ»ÓïÑÔ£¬ÕâÖÖ×ÔÈ»ÓïÑÔÄÜ˵£¬ÄÜд£¬»òÕß±»ÓÃÀ´ÈËÓëÈËÖ®¼äµÄ¹µÍ¨¡£¼ÆËã»úÓïÑÔÃ÷ÏÔ²»°üÀ¨ÔÚÄڵġ£HTTPÔÚAccept-LanguageºÍContent-LanguageÍ·ÓòÀïÓ¦Óõ½ÓïÑÔ±êÇ©£¨language tag£©¡£
HTTPÓïÑÔ±êÇ©µÄÓï·¨ºÍ×¢²áºÍRFC 1766[1]Öж¨ÒåµÄÒ»Ñù¡£×ÜÖ®£¬Ò»¸öÓïÑÔ±êÇ©ÊÇÓÉÒ»²¿·Ö»ò¶à²¿·Ö¹¹³É£ºÒ»¸öÖ÷ÓïÑÔ±êÇ©ºÍ¿ÉÄÜΪ¿ÕµÄ×Ó±êǩϵÁС£
Language-tag = primary-tag*£¨"-" subtag£©
primary = 1*8ALPHA
subtag = 1*8ALPHA
±êÇ©Öв»ÔÊÐí³öÏÖ¿Õ¸ñ£¬±êÇ©´óСд²»Ãô¸Ð£¨case-insensitive£©¡£ÓÉIANAÀ´¹ÜÀíÓïÑÔ±êÇ©ÖеÄÃû×Ö¡£µäÐ͵ıêÇ©°üÀ¨:
en, en-US, en-cockney, i-cherokee, x-pig-latin
ÉÏÃæµÄÈÎÒâÁ½¸ö×ÖĸµÄÖ÷±êÇ©ÊÇÒ»¸öISO-639ÓïÑÔµÄËõ£¬²¢ÇÒÁ½¸ö´óд×ÖĸµÄ×Ó±êÇ©ÊÇÒ»¸öISO-3166µÄ¹ú¼Ò´úÂë¡££¨ÉÏÃæµÄ×îºóÈý¸ö±êÇ©ÊÇδ¾×¢²áµÄ±êÇ©£»µ«Êdzý×îºóÒ»¸öÖ®ÍâËùÓеıêÇ©¶¼»á½«À´×¢²á£©¡£
3.11 ʵÌå±êÇ© £¨Entity Tags£©
ʵÌå±êÇ©±»ÓÃÓڱȽÏÏàͬÇëÇó×ÊÔ´ÖÐÁ½¸ö»ò¸ü¶àʵÌå¡£HTTP/1.1ÔÚETag£¨14.19½Ú£©£¬If-match£¨14.24½Ú£©£¬If-None-match£¨14.26½Ú£©ºÍIf-Rang£¨14.27½Ú£©Í·ÓòÖÐÔËÓÃʵÌå±êÇ©¡£¹ØÓÚËüÃÇÔõÑù±»µ±×÷Ò»¸ö»º´æÑéÖ¤Æ÷£¨cache validator£©¶øÊ¹ÓúͱȽÏÔÚ13.3.3½Ú±»¶¨Òå¡£Ò»¸öʵÌå±êÇ©ÓÉÒ»¸ö¸ø¶¨µÄ»ÞɬµÄÒýÓÃ×Ö·û´®£¨opaque quoted string£©£¬»¹¿ÉÄÜÇ°Ãæ´øÒ»¸öÈõָʾÆ÷×é³É¡£
entity-tag = [ weak ] opaque-tag
weak = "W/"
opaque-tag = quoted-string
Ò»¸ö“ǿʵÌå±êÇ©”Èç¹û±»Ò»¸ö×ÊÔ´µÄÁ½¸öʵÌåÀï¹²Ïí£¬ÄÇôÕâÁ½¸öʵÌ屨ÐëÔÚ×Ö½ÚÉϵȼۡ£
Ò»¸ö“ÈõʵÌå±êÇ©”ÊÇÒÔ"W/"ǰ׺µÄ£¬Ëü¿ÉÄܻᱻһ¸ö×ÊÔ´µÄÁ½¸öʵÌå¹²Ïí£¬Èç¹ûÕâÁ½¸öʵÌåÊǵȼ۵쬲¢ÇÒÄܱ˴ËÖ®¼äÄÜ»¥ÏàÌæ´ú£¬²¢ÇÒÒ²²»»áÔÚÓïÒåÉÏÓÐÌ«´ó¸Ä±ä¡£Ò»¸öÈõʵÌå±êǩֻÄÜÓÃÓÚÈõ±È½Ï£¨weak comparison£©¡£
ÔÚÒ»¸öÌØ¶¨×ÊÔ´µÄËùÓÐʵÌå°æ±¾Àһ¸öʵÌå±êÇ©±ØÐëÄÜΨһ¡£Ò»¸ö¸ø¶¨µÄʵÌå±êǩֵ¿ÉÒÔ±»ÓÚ²»Í¬µÄURIÇëÇóÓÃÀ´»ñµÃµÄʵÌå¡£ÏàͬʵÌå±êǩֵÔËÓÃÓÚ²»Í¬URIÇëÇó»ñµÃµÄʵÌ壬²¢²»Òâζ×ÅÕâЩʵÌåÊǵȼ۵ġ£
3.12 ·¶Î§µ¥Î»£¨Range Units£©
HTTP/1.1ÔÊÐíÒ»¸ö¿Í»§ÇëÇóÏìӦʵÌåµÄÒ»²¿·Ö¡£HTTP/1.1ÔÚRange£¨14.35½Ú£©ºÍContent-Range£¨14.16½Ú£©Í·ÓòÀïÓ¦Ó÷¶Î§µ¥Î»£¨range units£©¡£ÈκÎʵÌå¸ù¾Ý²»Í¬µÄ½á¹¹»¯µ¥Ôª¶¼Äܱ»·Ö½âÊÇ×Ó·¶Î§
range-unit = bytes-unit | other-range-unit
bytes-unit = "bytes"
other-range-unit = token
HTTP/1.1Öж¨ÒåµÄΨһµÄ·¶Î§µ¥Î»ÊÇ"bytes"¡£HTTP/1.1ʵÏÖʱ¿ÉÄܺöÂÔÆäËûµ¥Î»Ö¸¶¨µÄ·¶Î§¡£
HTTP/1.1±»Éè¼ÆÔÊÐíÓ¦ÓóÌÐòʵÏÖ²»ÒÀ¿¿ÓйضԷ¶Î§µÄÁ˽⡣
4 HTTPÏûÏ¢
4.1 ÏûÏ¢ÀàÐÍ£¨Message Types£©
HTTPÏûÏ¢ÓÉ´Ó¿Í»§µ½·þÎñÆ÷µÄÇëÇóºÍ´Ó·þÎñÆ÷µ½¿Í»§µÄÏìÓ¦×é³É.
HTTP-message = Request|Response ;HTTP/1.1
ÇëÇ󣨵Ú5½Ú£©ºÍÏìÓ¦£¨µÚ6½Ú£©ÏûÏ¢ÀûÓÃRFC 822[9]¶¨ÒåµÄ³£ÓÃÏûÏ¢µÄ¸ñʽ£¬ÕâÖÖÏûÏ¢¸ñʽÊÇÓÃÓÚ´«ÊäʵÌ壨ÏûÏ¢µÄ¸ºÔØ£©¡£Á½ÖÖÀàÐ͵ÄÏûÏ¢ÓÉ¿ªÊ¼ÐУ¨start-line£©£¬Áã¸ö»ò¸ü¶à¸öÍ·Óò£¨¾³£±»³Æ×÷“Í·”£©£¬Ò»¸öָʾͷÓò½áÊøµÄ¿ÕÐУ¨Ò²¾ÍÊÇ£¬Ò»¸öÒÔCRLFΪǰ׺µÄʲôҲûÓеÄÐУ©£¬Ò»¸ö¿ÉÓпÉÎÞµÄÏûÏ¢Ö÷Ì壨message-body£©¡£
generic-message = start-line
*£¨message-header CRLF£©
CRLF
[ message-body ]
start-line = Request-Line | Status-Line
ΪÁ˽¡×³ÐÔ£¬·þÎñÆ÷Ó¦¸ÃºöÂÔÈÎÒâÇëÇóÐУ¨Request-Line£©Ç°ÃæµÄ¿ÕÐС£»»¾ä»°Ëµ£¬Èç¹û·þÎñÆ÷¿ªÊ¼¶ÁÏûÏ¢Á÷µÄʱºò·¢ÏÖÁËÒ»¸öCRLF£¬ËüÓ¦¸ÃºöÂÔÕâ¸öCRLF¡£
Ò»°ãÒ»¸öÓÐÎÊÌâµÄHTTP/1.0¿Í»§¶Ë»áÔÚPOSTÇëÇóÏûÏ¢Ö®ºó²úÉú¶îÍâµÄCRLF¡£ÎªÁËÖØÊöʲôÊÇBNFÃ÷È·½ûÖ¹µÄ£¬Ò»¸öHTTP/1.1¿Í»§¶Ë²»ÄÜÔÚÇëÇóǰºÍÇëÇóºó¼ÓһЩ²»±ØÒªµÄCRLF¡£
4.2 ÏûϢͷ £¨Message Headers£©
HTTPÍ·Óò°üÀ¨³£ÓÃÍ·£¨4.5½Ú£©£¬ÇëÇóÍ·£¨5.3½Ú£©£¬ÏìӦͷ£¨6.2½Ú£©ºÍʵÌåÍ·£¨7.1½Ú£©Óò¡£ËüÃÇ×ñÑRFC822[0]3.1½ÚÖиø³öµÄͬһ¸ö³£¹æµÄ¸ñʽ¡£Ã¿Ò»¸öÍ·ÓòÓÉÒ»¸öÃû×Ö£¨ÓòÃû£©¸úËæÒ»¸ö":"ºÍÓòÖµ¹¹³É¡£ÓòÃûÊÇ´óСд²»Ãô¸ÐµÄ¡£ÓòÖµÇ°Ãæ¿ÉÄÜÓÐÈÎÒâÊýÁ¿µÄLWSµÄ¡£µ«SP£¨¿Õ¸ñ£©ÊÇÊ×Ñ¡µÄ¡£Í·ÓòÄܱ»ÑÓÉý¶àÐУ¬Í¨¹ýÔÚÕâЩÐÐÇ°Ãæ¼ÓһЩSP»òHT¡£Ó¦Óó̱¾Ó¦¸Ã×ñÑ“³£Óøñʽ”µ±²úÉúHTTPÏûϢʱ£¬ÒòΪ¿ÉÄÜ´æÔÚһЩӦÓóÌÐò£¬ËûÃDz»ÄܽÓÊÕÈκγ£ÓÃÐÎʽ֮ÍâµÄÐÎʽ¡£.
message-header = field-name ":" [ field-value ]
field-name = token
field-value = *£¨ field-content | LWS £©
field-content = <the OCTETs making up the field-value
and consisting of either *TEXT or combinations
of token, separators, and quoted-string>
filed-content²»°üÀ¨ÈκÎǰµ¼»òºóÐøµÄLWS£¨ÏßÐÔ¿Õ°×£©:ÏßÐԿհ׳öÏÖÔÚÓòÖµ£¨filed-value£©µÄµÚÒ»¸ö·Ç¿Õ°××Ö·û֮ǰ»ò×îºóÒ»¸ö·Ç¿Õ°××Ö·ûÖ®ºó¡£Ç°µ¼»òºóÐøLWS¿ÉÄÜ»á±»ÒÆ³ý¶ø²»»á¸Ä±äÓòÖµµÄÓïÒâ¡£ÈκγöÏÖÔÚfiled-contentÖ®¼äµÄLWS¿ÉÄܻᱻһ¸öSP´úÌæÔÚ½âÎöÓòֵ֮ǰ»ò°ÑÕâ¸öÏûÏ¢ÍùÏÂÁ÷´«µÝʱ¡£.
²»Í¬ÓòÃûµÄÍ·Óò±»½ÓÊÕµÄ˳ÐòÊDz»ÖØÒªµÄ¡£È»¶ø£¬Ê×ÏÈ·¢Ëͳ£ÓÃÍ·Óò£¬È»ºó½ô½Ó×ÅÊÇÇëÇóÍ·Óò»òÕßÊÇÏìӦͷÓò£¬È»ºóÊÇÒÔʵÌåÍ·Óò½áÊø£¬ÕâÑù×öÊÇÒ»¸öºÃµÄµÄ·½·¨¡£
¶à¸öÏûϢͷÓòʹÓÃͬһ¸öÓòÃû£¨filed-name£©¿ÉÄÜ»á³öÏÖÔÚһЩÏûÏ¢ÖУ¬Èç¹ûÒ»¸öÍ·ÓòµÄÓòÖµ±»¶¨Òå³ÉÒ»¸öÒÔ¶ººÅ¸ô¿ªµÄÁÐ±í¡£°ÑÏàͬÃûµÄ¶à¸öÍ·Óò½áºÏ³ÉÒ»¸ö“ÓòÃû£ºÓòÖµ”¶ÔµÄÐÎʽ¶ø²»¸Ä±äÏûÏ¢µÄÓïÒ⣬¿ÉÒÔͨ¹ý°Ñÿһ¸öºóÐøµÄÓòÖµ¼Óµ½µÚÒ»¸öÀÿһ¸öÓòÖµÓöººÅ¸ô¿ª¡£Í¬ÃûµÄÍ·ÓòµÄ½ÓÊÕ˳Ðò¶ÔºÏ²¢µÄÓòÖµµÄ½âÊÍÓÐÖØÒªÒâÒ壬ËùÒÔ´úÀí£¨proxy£©²»ÄܸıäÓòÖµµÄ˳Ðò£¬µ±Ëü°Ñ´ËÏûÏ¢ÔÙ´Îת·¢Ê±¡£
4.3 ÏûÏ¢Ö÷Ìå £¨Message Body£©
HTTPÏûÏ¢µÄÏûÏ¢Ö÷ÌåÓÃÀ´³ÐÔØÇëÇóºÍÏìÓ¦µÄʵÌåÖ÷Ì壨entity-body£©¡£ÕâЩÏûÏ¢Ö÷Ì壨message-body£©½ö½öµ±´«Êä±àÂ루transfer-coding£©Ó¦ÓÃÓÚ´«ÊäÒëÂ루Transfer-Encoding£©Í·Óòʱ²ÅºÍʵÌåÖ÷Ì壨entity-body£©²»Í¬£¬ÆäËüÇé¿öÏûÏ¢Ö÷ÌåºÍʵÌåÖ÷ÌåÏàͬ¡£´«ÊäÒëÂëÍ·ÓòÔÚ14.41½Ú²ûÊö¡£
message-body=entity-body|<entity-body encoded as per Transfer-Encoding>
´«ÊäÒëÂëÍ·Óò±»ÓÃÀ´Ö¸Ã÷Ó¦ÓóÌÐòµÄ´«Êä±àÂ룬ËüÊÇΪÁ˱£Ö¤°²È«ºÍÊʺϵÄÏûÏ¢´«Êä¡£´«ÊäÒëÂ루Transfer-Encoding£©Í·ÓòÊÇÏûÏ¢µÄÊôÐÔ£¬¶ø²»ÊÇʵÌåµÄÊôÐÔ£¬²¢ÇÒÑØ×ÅÇëÇó/ÏìÓ¦Á´Äܱ»Ìí¼Ó»òɾ³ý¡££¨È»¶ø£¬3.6½ÚÃèÊöÁËһЩÏÞÖÆµ±Ê¹ÓÃij¸ö´«Êä±àÂëʱ£©
ʲôʱºòÏûÏ¢Ö÷Ì壨message-body£©ÔÊÐí³öÏÖÔÚÏûÏ¢ÖУ¬Õâ¸ù¾Ý²»Í¬ÇëÇóºÍÏìÓ¦À´¾ö¶¨µÄ¡£
ÇëÇóÖÐÏûÏ¢Ö÷Ì壨message-body£©µÄ´æÔÚÊDZ»ÇëÇóÖÐÏûϢͷÓòÖÐÊÇ·ñ´æÔÚÄÚÈݳ¤¶È£¨Content-Length£©»ò´«ÊäÒëÂ루Transfer-Encoding£©Í·ÓòÀ´°µÊ¾µÄ¡£Ò»¸öÏûÏ¢Ö÷Ì壨message-body£©²»Äܱ»°üº¬ÔÚÇëÇóÀïÈç¹ûÇëÇó·½·¨£¨¼û5.1.1½Ú£©²»ÔÊÐíÇëÇóÀï°üº¬ÊµÌåÖ÷Ì壨entity-body£©¡£Ò»¸ö·þÎñÆ÷Ó¦¸ÃÄÜÔĶÁ»òÔÙ´Îת·¢ÇëÇóÀïµÄÏûÏ¢Ö÷Ì壻Èç¹ûÇëÇó·½·¨²»ÔÊÐí°üº¬Ò»¸öʵÌåÖ÷Ì壨entity-body£©£¬ÄÇôÏûÏ¢Ö÷ÌåÓ¦¸Ã±»ºöÂÔµ±·þÎñÆ÷´¦ÀíÕâ¸öÇëÇóʱ¡£
¶ÔÓÚÏìÓ¦ÏûÏ¢£¬ÏûÏ¢ÀïÊÇ·ñ°üº¬ÏûÏ¢Ö÷ÌåÒÀÀµÏàÓ¦µÄÇëÇó·½·¨ºÍÏìӦ״̬Âë¡£ËùÓÐHEADÇëÇó·½·¨µÄÇëÇóµÄÏìÓ¦ÏûÏ¢²»Äܰüº¬ÏûÏ¢Ö÷Ì壬¼´Ê¹ÊµÌåÍ·Óò³öÏÖÔÚÇëÇóÀï¡£ËùÓÐ1XX£¨ÐÅÏ¢µÄ£©£¬204£¨ÎÞÄÚÈݵģ©ºÍ304£¨Ã»ÓÐÐ޸ĵ쩵ÄÏìÓ¦¶¼²»ÄܰüÀ¨Ò»¸öÏûÏ¢Ö÷Ì壨message-body£©¡£ËùÓÐÆäËûµÄÏìÓ¦±ØÐë°üÀ¨ÏûÏ¢Ö÷Ì壬ËäÈ»Ëü¿ÉÄܳ¤¶ÈΪÁã.
4.4 ÏûÏ¢µÄ³¤¶È£¨Message Length£©
Ò»ÌõÏûÏ¢µÄ´«Ê䳤¶È£¨transfer-length£©ÊÇÏûÏ¢Ö÷Ì壨message-body£©µÄ³¤¶È£¬µ±ÏûÏ¢Ö÷Ìå³öÏÖÔÚÏûÏ¢ÖÐʱ£»ÄǾÍÊÇ˵ÔÚʵÌåÖ÷Ìå±»Ó¦ÓÃÁË´«Êä±àÂ루transfer-coding£©ºó¡£µ±ÏûÏ¢ÖгöÏÖÏûÏ¢Ö÷Ìåʱ£¬ÏûÏ¢Ö÷ÌåµÄ´«Ê䳤¶È£¨transfer-length£©ÓÉÏÂÃæ£¨ÒÔÓÅÏÈȨµÄ˳Ðò£©¾ö¶¨£º:
1¡£Èκβ»Äܰüº¬ÏûÏ¢Ö÷Ì壨message-body£©µÄÏûÏ¢£¨ÕâÖÖÏûÏ¢Èç1xx,204ºÍ304ÏìÓ¦ºÍÈκÎHEADÇëÇóµÄÏìÓ¦£©×ÜÊDZ»Í·ÓòºóµÄµÚÒ»¸ö¿ÕÐУ¨Òë×¢:CRLF£©ÖÕÖ¹£¬²»¹ÜÏûÏ¢ÀïÊÇ·ñÓÐʵÌåÍ·Óò£¨entity-header fields£©¡£
2¡£Èç¹ûTransfer-EncodingÍ·Óò£¨¼û14.41½Ú£©³öÏÖ£¬²¢ÇÒËüµÄÓòÖµ²»ÊÇ”identity”£¬ÄÇô´«Ê䳤¶È£¨transfer-length£©±»“¿é”´«Êä±àÂ붨Ò壬³ý·ÇÏûÏ¢ÒòΪ¹Ø±ÕÁ¬½Ó¶ø±»ÖÕ½áÁË¡£
3¡£Èç¹ûContent-LengthÍ·Óò£¨ÊôÓÚʵÌåÍ·Óò£©£¨¼û14.13½Ú£©³öÏÖ£¬ÄÇôËüµÄÊ®½øÖÆÖµ£¨ÒÔ×Ö½Ú±íʾ£©¾Í´ú±íʵÌåÖ÷Ì峤¶È£¨entity-length£¬Òë×¢£ºÊµÌ峤¶ÈÆäʵ¾ÍÊÇʵÌåÖ÷ÌåµÄ³¤¶È£¬ÒÔºó°Ñentity-length·Òë³ÉʵÌåÖ÷ÌåµÄ³¤¶È£©Ò²´ú±í´«Ê䳤¶È£¨transfer-length£©¡£Content-LengthÍ·Óò²»Äܰüº¬ÔÚÏûÏ¢ÖУ¬Èç¹ûʵÌåÖ÷Ì峤¶È£¨entity-length£©ºÍ´«Ê䳤¶È£¨transfer-length£©Á½Õß²»ÏàµÈ£¨Ò²¾ÍÊÇ˵£¬ÏûÏ¢ÀïÓ¦ÓÃÁË´«ÊäÒëÂ루Transfer-Encoding£©Í·Óò£©¡£Èç¹ûÒ»¸öÏûÏ¢¼´Óд«ÊäÒëÂ루Transfer-Encoding£©Í·Óò²¢ÇÒÒ²Content-LengthÍ·Óò£¬ºóÕ߻ᱻºöÂÔ¡£
4¡£Èç¹ûÏûÏ¢Óõ½Ã½ÌåÀàÐÍ“multipart/byteranges”£¬²¢ÇÒ´«Ê䳤¶È£¨transfer-length£©ÁíÍâҲûÓÐÖ¸¶¨£¬ÄÇôÕâÖÖ×ÔÎÒ¶¨½çµÄýÌåÀàÐͶ¨ÒåÁË´«Ê䳤¶È£¨transfer-length£©¡£ÕâÖÖýÌåÀàÐͲ»Äܱ»ÀûÓóý·Ç·¢ËÍÕßÖªµÀ½ÓÊÕÕßÄÜÔõÑùÈ¥½âÎöËü£» HTTP1.1¿Í»§¶ËÇëÇóÀïÈç¹û³öÏÖRangeÍ·Óò²¢ÇÒ´øÓжà¸ö×Ö½Ú·¶Î§£¨byte-range£©Ö¸Ê¾·û£¬Õâ¾ÍÒâζ×ſͻ§¶ËÄܽâÎömultipart/byterangesÏìÓ¦¡£
Ò»¸öRangeÇëÇóÍ·Óò¿ÉÄܻᱻһ¸ö²»ÄÜÀí½âmultipart/byterangesµÄHTTP1.0´úÀí£¨proxy£©ÔÙ´Îת·¢£»ÔÚÕâÖÖÇé¿öÏ£¬·þÎñÆ÷±ØÐëÄܶ¨½ç´ËÏûÏ¢ÀûÓÃÕâ½ÚµÄ1,3»ò5ÏîÀﶨÒåµÄ·½·¨¡£
5¡£Í¨¹ý·þÎñÆ÷¹Ø±ÕÁ¬½ÓÄÜÈ·¶¨ÏûÏ¢µÄ´«Ê䳤¶È¡££¨¹Ø±ÕÁ¬½Ó²¢²»ÄÜÓÃÀ´Ö¸Ã÷ÇëÇóÏûÏ¢ÌåµÄ½áÊø£¬ÒòΪÕâÑù¿ÉÒÔÈ÷þÎñÆ÷ûÓлú»á¼ÌÐø¸øÓèÏìÓ¦£©¡£
ΪÁËÓëHTTP/1.0Ó¦ÓóÌÐò¼æÈÝ£¬°üº¬HTTP/1.1ÏûÏ¢Ö÷ÌåµÄÇëÇó±ØÐë°üÀ¨Ò»¸öÓÐЧµÄÄÚÈݳ¤¶È£¨Content-Length£©µÄÍ·Óò£¬³ý·Ç·þÎñÆ÷ÊǺÍHTTP/1.1×ñѵġ£Èç¹ûÒ»¸öÇëÇó°üº¬Ò»¸öÏûÏ¢Ö÷Ìå²¢ÇÒûÓиø³öÄÚÈݳ¤¶È£¨Content-Length£©£¬ÄÇô·þÎñÆ÷Ó¦¸ÃÒÔ400ÏìÓ¦£¨´íÎóµÄÇëÇó£©Èç¹ûËû²»ÄÜÅжÏÏûÏ¢³¤¶ÈµÄ»°£¬»òÕßÒÔ411ÏìÓ¦£¨ÒªÇ󳤶ȣ©Èç¹ûËü¼á³ÖÏëÒªÊÕµ½Ò»¸öÓÐЧÄÚÈݳ¤¶È£¨Content-length£©¡£
ËùÓеÄÄܽÓÊÕʵÌåµÄHTTP/1.1Ó¦ÓóÌÐò±ØÐëÄܽÓÊÜ"chunked"µÄ´«Êä±àÂ루3.6½Ú£©£¬Òò´Ë¿ÉÒÔÔÊÐíÕâÖÖ»úÖÆÀ´´¦ÀíÏûÏ¢µ±ÏûÏ¢µÄ³¤¶È²»Äܱ»Ìáǰ¾ö¶¨Ê±¡£
ÏûÏ¢²»ÄÜͬʱ¶¼°üÀ¨ÄÚÈݳ¤¶È£¨Content-Length£©Í·ÓòºÍ·Çidentity´«Êä±àÂë¡£Èç¹ûÏûÏ¢°üÀ¨ÁËÒ»¸ö·ÇidentityµÄ´«Êä±àÂ룬ÄÚÈݳ¤¶È£¨Content-Length£©Í·Óò±ØÐë±»ºöÂÔ.
µ±ÄÚÈݳ¤¶È£¨Content-Length£©Í·Óò³öÏÖÒ»¸ö¾ßÓÐÏûÏ¢Ö÷Ì壨message-body£©µÄÏûÏ¢ÀËüµÄÓòÖµ±ØÐ뾫ȷƥÅäÏûÏ¢Ö÷ÌåÀï×Ö½ÚÊýÁ¿¡£HTTP/1.1Óû§´úÀí±ØÐë֪ͨÓû§µ±Ò»¸öÎÞЧµÄ³¤¶È½ÓÊÕÁË¡£
4.5 ³£ÓÃÍ·Óò£¨General Header Fields£©
ÓÐһЩͷÓò¼´ÊÊÓÃÓÚÇëÇóÒ²ÊÊÓÃÓÚÏìÓ¦ÏûÏ¢£¬µ«ÊÇÕâЩͷÓò²¢²»Êʺϱ»´«ÊäµÄʵÌå¡£ÕâЩͷÓòÖ»ÄÜÓ¦ÓÃÓë±»´«ÊäµÄÏûÏ¢¡£
general-header = Cache-Control ; Section 14.9
| Connection ; Section 14.10
| Date ; Section 14.18
| Pragma ; Section 14.32
| Trailer ; Section 14.40
| Transfer-Encoding ; Section 14.41
| Upgrade ; Section 14.42
| Via ; Section 14.45
| Warning ; Section 14.46
³£ÓÃÍ·ÓòµÄÃûÄܱ»À©Õ¹£¬µ«ÕâÒªºÍÐÒé°æ±¾µÄ±ä»¯Ïà½áºÏ¡£È»¶ø£¬ÐµĻòʵÑéÐÔµÄÍ·Óò¿ÉÄܱ»¸³Óè³£ÓÃÍ·ÓòµÄÓïÒ⣬Èç¹ûͨÐÅÀïµÄËùÓвÎÓëÕß¶¼ÈÏΪËûÃÇÊdz£ÓÃÍ·Óò¡£²»±»Ê¶±ðµÄÍ·Óò»á±»×÷ΪʵÌåÍ·£¨entity-header£©Í·ÓòÀ´¿´´ý¡£
5 ÇëÇó£¨Request£©
Ò»¸öÇëÇóÏûÏ¢ÊÇ´Ó¿Í»§¶Ëµ½·þÎñÆ÷¶ËµÄ£¬ÔÚÏûÏ¢Ê×ÐÐÀï°üº¬·½·¨£¬×ÊԴָʾ·û£¬ÐÒé°æ±¾¡£
Request = Request-Line ; Section 5.1
*£¨£¨ general-header ; Section 4.5
| request-header ; Section 5.3
| entity-header £© CRLF£© ; Section 7.1
CRLF
[ message-body ] ; Section 4.3
5.1 ÇëÇóÐÐ £¨Request-Line£©
ÇëÇóÐУ¨Request-Line£©ÊÇÒÔÒ»¸ö·½·¨±ê¼Ç¿ªÊ¼£¬ºóÃæ¸úËæRequest-URIºÍÐÒé°æ±¾£¬×îºóÒÔCRLF½áÊø¡£ÔªËØÊÇÒÔSP×Ö·û·Ö¸ô¡£CR»òLFÊDz»±»ÔÊÐíµÄ³ýÁË×îºóµÄCRLF¡£
Request-Line =Method SP Request-URL SP HTTP-Version CRLF
5.1.1·½·¨ £¨Method£©
·½·¨±ê¼ÇָʾÁËÔÚ±»Request-URIÖ¸¶¨µÄ×ÊÔ´ÉÏÖ´Ðеķ½·¨¡£ÕâÖÖ·½·¨ÊÇ´óСдÃô¸ÐµÄ¡£
Method = "OPTIONS" ;9.2½Ú
| "GET" ;9.3½Ú
| "HEAD" ;9.4½Ú
|"POST" ;9.5½Ú
|"PUT" ;9.6½Ú
|"DELETE" ;9.7½Ú
|"TRACE" ;9.8½Ú
|"CONNECT" ;9.9½Ú
| extension-method
Extension-method = token
×ÊÔ´ÔÊÐíµÄ·½·¨ÓÉAllowÍ·ÓòÖ¸¶¨£¨14.7½Ú£©¡£ÏìÓ¦µÄ·µ»ØÂë×ÜÊÇ֪ͨ¿Í»§ÊÇ·ñÒ»¸ö·½·¨¶ÔÒ»¸ö×ÊÔ´ÔÚµ±Ç°ÊDZ»ÔÊÐíµÄ£¬ÒòΪ±»ÔÊÐíµÄ·½·¨¼¯ºÏÄܱ»¶¯Ì¬µÄ¸Ä±ä¡£Ò»¸öÔ´·þÎñÆ÷Ó¦¸Ã·µ»Ø405״̬Â루·½·¨²»ÄÜÔÊÐí£©Èç¹û´Ë·½·¨¶ÔÓÚÒ»¸öÇëÇó×ÊÔ´ÔÚ·þÎñÆ÷ÄÇÀï²»±»ÔÊÐí£¬²¢ÇÒ·µ»Ø501״̬Â루ûÓÐʵÏÖ£©Èç¹û´Ë·½·¨²»±»Ô´·þÎñÆ÷ʶ±ð»òʵÏÖ¡£·½·¨GETºÍHEAD±ØÐë±»ËùÓг£¹æÄ¿µÄµÄ·þÎñÆ÷Ö§³Ö¡£ËùÓÐÆäËüµÄ·½·¨ÊÇ¿ÉÑ¡µÄ£»È»¶ø£¬Èç¹ûÉÏÃæµÄËùÓз½·¨¶¼±»ÊµÏÖ£¬ÕâЩ·½·¨±ØÐë×ñѵÄÓïÒâºÍµÚ9½ÚÖ¸¶¨µÄÏàͬ¡£
5.1.2ÇëÇóURL£¨Request-URI£©
Request-URIÊÇÒ»ÖÖÈ«Çòͳһ×ÊÔ´±êʶ·û£¨£³.2 ½Ú£©£¬²¢ÇÒËüÖ¸¶¨ÇëÇóµÄ×ÊÔ´¡£
Request-URI ="*" | absoluteURI | abs_path | authotity
Request-URIµÄOPTIONSÒÀÀµÓÚÇëÇóµÄÐÔÖÊ¡£ÐǺÅ"*"Òâζ×ÅÇëÇó²»ÄÜÓ¦ÓÃÓÚÒ»¸öÌØ¶¨µÄ×ÊÔ´£¬µ«ÊÇÄÜÓ¦ÓÃÓÚ·þÎñÆ÷£¬²¢ÇÒÖ»Äܱ»ÔÊÐíµ±Ê¹Óõķ½·¨²»ÄÜÓ¦ÓÃÓÚ×ÊÔ´µÄʱºò¡£¾ÙÀýÈçÏÂ
OPTIONS * HTTP/1.1
µ±Ïò´úÀí£¨proxy£©Ìá½»ÇëÇóʱ£¬¾ø¶ÔURI£¨absoluteRUI£©ÊDz»¿ÉȱÉٵġ£´úÀí£¨proxy£©¿ÉÄܻᱻҪÇóÔÙ´Îת¼Ä´ËÇëÇó¡£×¢Ò⣺´úÀí¿ÉÄÜÔÙ´ÎÌá½»´ËÇëÇóµ½ÁíÒ»¸ö´úÀí»òÖ±½Ó¸øÔ´·þÎñÆ÷¡£ÎªÁ˱ÜÃâÑ»·ÇëÇ󣬴úÀí£¨proxy£©±ØÐëÄÜʶ±ðËùÓеķþÎñÆ÷Ãû×Ö£¬°üÀ¨ÈκαðÃû£¬±¾µØ±äÁ¿£¬Êý×ÖIPµØÖ·¡£Ò»¸öÇëÇóÐУ¨Request-Line£©µÄÀý×ÓÈçÏ£º
£ÇET http://www.w3.org/pub/www/TheProject.html HTTP/1.1
ΪÁËδÀ´HTTP°æ±¾µÄËùÓÐÇëÇóÄÜÇ¨ÒÆµ½¾ø¶ÔURI£¨absoluteURI£©µØÖ·£¬ËùÓлùÓÚ£ÈTTP/1.1µÄ·þÎñÆ÷±ØÐë½ÓÊܾø¶ÔURLµØÖ·£¬¼´Ê¹HTTP/1.1µÄ¿Í»§¶ËÖ»Ïò´úÀí²úÉú¸ø¾ø¶ÔURI£¨absoluteURI£©¡£
authority²¿·ÖÖ»±»ÓÃÓÚCONNECT·½·¨£¨£¹.9½Ú£©£®
Request-URI´ó¶àÊýÇé¿öÊDZ»ÓÃÓÚÖ¸¶¨Ò»¸öÔ´·þÎñÆ÷»òÍø¹Ø£¨gateway£©ÉϵÄ×ÊÔ´¡£ÕâÖÖÇé¿öÏ£¬URIµÄ¾ø¶Ô·¾¶£¨abs_path£©±ØÐë±»ÓÃ×÷Request-URI£¬²¢ÇÒ´ËURI£¨authority£©µÄÍøÂçλÖñØÐëÔÚHostÍ·ÓòÀïÖ¸³ö¡£ÀýÈ磺¿Í»§Ï£ÍûÖ±½Ó´ÓÔ´·þÎñÆ÷»ñÈ¡×ÊÔ´£¬ÕâÖÖÇé¿öÏ£¬Ëü¿ÉÄܻὨÁ¢Ò»¸öTCPÁ¬½Ó£¬´ËÁ¬½ÓÊÇÌØ¶¨ÓÚÖ÷»ú”www.w3.org”µÄ80¶Ë¿ÚµÄ£¬ÕâÊǻᷢËÍÏÂÃæÐУº
GET /pub/WWW/TheProject.html HTTP/1.1
Host£ºwww.w3.org
½ÓÏÂÀ´ÊÇÇëÇóµÄÆäËû²¿·Ö£¬×¢Òâ¾ø¶Ô·¾¶²»ÄÜÊǿյģ»Èç¹ûÔÚÔʼµÄURIÀïûÓгöÏÖ¾ø¶Ô·¾¶£¬±ØÐë¸ø³ö"£¯"£¨·þÎñÆ÷¸ùĿ¼£©£®
Request-URIÊÇÒÔ3.2.1½ÚÀïÖ¸¶¨µÄ¸ñʽ´«Êä¡£Èç¹ûRequest-URIÓÃ"%HEX HEX"[42]±àÂ룬Դ·þÎñÆ÷ΪÁ˽âÎöÇëÇó±ØÐëÄܽâÂëËü¡£·þÎñÆ÷½ÓÊÕµ½Ò»¸öÎÞЧµÄRequest-URIʱ±ØÐëÒÔÒ»¸öºÏÊʵÄ״̬ÂëÏìÓ¦¡£
͸Ã÷´úÀí£¨proxy£©²»ÄÜÖØÐ´½ÓÊÕµ½µÄRequest-URIÀïµÄ”abs_path”µ±Ëüת¼Ä´ËÇëÇóµ½ÏÂÒ»¸ö·þÎñÆ÷ʱ£¬³ýÁ˸ù¾ÝÉÏÃæÉùÃ÷µÄ°ÑÒ»¸ö¿ÕµÄabs_pathÓÔ/”´úÌæ¡£
×¢£º²»ÖØÐ´µÄ¹æÔò·ÀÖ¹ÁË´úÀí£¨proxy£©¸Ä±äÇëÇóµÄÒâ˼£¬µ±Ô´·þÎñÆ÷²»ÄÜÕýÈ·µÄÀûÓ÷DZ£Áô£¨non-reserved£©µÄURI×Ö·ûʱ ¡£ÊµÏÖÕßÓ¦¸ÃÖªµÀijЩpre-HTTP/1.1´úÀí£¨proxy£©ÄÜÖØÐ´Request-URI¡£
5.2ÇëÇó×ÊÔ´ £¨The Resource Identified by a Request£©
ÇëÇóÀï×ÊÔ´µÄ¾«È·¶¨Î»ÊÇÓÉÇëÇóÀïµÄRequest-URIºÍHostÍ·Óò¾ö¶¨µÄ¡£
Èç¹ûÔ´·þÎñÆ÷×ÊÔ´²»ÒÀÀµÓÚÇëÇóµÄHostÍ·ÓòÖ¸¶¨µÄÖ÷»ú£¨Òë×¢£º¿ÉÄÜ»á´æÔÚÐéÄâÖ÷»ú£©£¬ÄÇôËü»áºöÂÔÇëÇóµÄÍ·Óòµ±Ëü¾ö¶¨Æä×ÊÔ´µÄʱºò¡££¨¶ÔÓÚÒ»¸öÖ§³ÖHostµÄHTTP/1.1·þÎñÆ÷£¬ÔÚ19.6.1.1½ÚÃèÊöÁËÆäËûµÄÐèÇó£©.
Ô´·þÎñÆ÷Èç¹û¸ù¾ÝÇëÇóÀïµÄÖ÷»úÇø±ð×ÊÔ´£¨ÕâÊÇÒòΪ´æÔÚÐéÄâÖ÷»úºÍÐéÄâÖ÷»úÃû£©£¬Ëü±ØÐë×ñÑÏÂÃæµÄ¹æÔòÈ¥¾ö¶¨ÇëÇóµÄ×ÊÔ´µ±³öÏÖÒ»¸öHTTP/1.1ÇëÇóʱ£º
£±£® Èç¹ûRequest-URIÊǾø¶ÔµØÖ·£¨absoluteURI£©£¬ÕâʱÇëÇóÀïµÄÖ÷»ú´æÔÚÓÚRequest-URIÀï¡£ÈκγöÏÖÔÚÇëÇóÀïHostÍ·ÓòÖµÓ¦µ±±»ºöÂÔ¡£
£²£® ¼ÙÈçRequest-URI²»ÊǾø¶ÔµØÖ·£¨absoluteURI£©£¬²¢ÇÒÇëÇó°üÀ¨Ò»¸öHostÍ·Óò£¬ÔòÖ÷»úÓɸÃHostÍ·ÓòÖµ¾ö¶¨£®
£³£® ¼ÙÈçÓɹæÔò£±»ò¹æÔò£²¶¨ÒåµÄÖ÷»úÊÇÒ»¸öÎÞЧµÄÖ÷»ú£¬ÔòÓ¦µ±ÒÔÒ»¸ö400£¨´íÎóÇëÇ󣩴íÎóÏûÏ¢·µ»Ø¡£
ȱÉÙHostÍ·ÓòµÄHTTP/1.0ÇëÇóµÄ½ÓÊÕÕß¿ÉÄÜ»áÍÆ²â¾ö¶¨Ê²Ã´ÑùµÄ×ÊÔ´±»ÇëÇó£¨ÀýÈ磺¼ì²éURIµÄ·¾¶¶ÔÓÚij¸öÌØ¶¨µÄÖ÷»úÊÇΨһµÄ£©¡£
5.3ÇëÇó±¨Í·Óò £¨Request Header Fields£©
ÇëÇóÍ·ÓòÔÊÐí¿Í»§¶Ë´«µÝÇëÇóµÄ¸½¼ÓÐÅÏ¢ºÍ¿Í»§¶Ë×Ô¼ºµÄ¸½¼ÓÐÅÏ¢¸ø·þÎñÆ÷¡£ÕâЩͷÓò×÷ΪÇëÇóµÄÐÞÊηû£¬ÕâºÍ³ÌÐòÓïÑÔ·½·¨µ÷ÓõIJÎÊýÓïÒåÊÇÒ»ÑùµÄ¡£
ÇëÇóÍ·£¨request-header£© = Accept ;14.1½Ú
| Accept-Charset ;14.2½Ú
|Accept-Encoding ;14.3½Ú
|Accept-Language ;14.4½Ú
|Authorization ;14.8½Ú
|Expect ;14.20½Ú
|From ;14.22½Ú
|Host ;14.23½Ú
|If-Match ;14.24½Ú
|If-Modified-Since ;14.25½Ú
| If-None-Match ;14.26½Ú
| If-Range ;14.27½Ú
| If-Unmodified-Since ;14.28½Ú
| Max-Forwards ;14.31½Ú
| Proxy-Authorization ;14.34½Ú
| Range ;14.35½Ú
| Referer ;14.36½Ú
|TE ;14.39½Ú
| User-Agent ;14.43½Ú
ÇëÇóÍ·ÓòµÄÃû×ÖÊÇÄܽáºÏÓÚÐÒé°æ±¾¶øÄܱ»À©Õ¹µÄ¡£È»¶øÐµĻòʵÑéÐÔµÄÍ·ÓòÓ¦¸Ã±»¸ø³öÇëÇóÍ·ÓòµÄÓïÒåÈç¹ûͨÐŵÄËùÓз½¶¼°ÑËü¿´×÷ÇëÇóÍ·Óò¡£²»ÄÜʶ±ðµÄÍ·Óò»á±»¿´×÷ʵÌåÍ·Óò£¨entity-header£©¡£
£¶ ÏìÓ¦ £¨Response£©
½ÓÊպͷÒëÒ»¸öÇëÇóÏûÏ¢ºó£¬·þÎñÆ÷·¢³öÒ»¸öHTTPÏìÓ¦ÏûÏ¢¡£
response £½Status-Line ;6.1½Ú
*£¨£¨ general-header£© ; 4.5½Ú
| response-header ;6.2½Ú
| entity-header£©CRLF£© ;7.1½Ú
CRLF
[ message-body ] ;7.2½Ú
6.1 ״̬ÐÐ £¨Status-Line£©
ÏìÓ¦ÏûÏ¢µÄµÚÒ»ÐÐÊÇ״̬ÐУ¨stauts-Line£©£¬ÓÉÐÒé°æ±¾ÒÔ¼°Êý×Ö״̬ÂëºÍÏà¹ØµÄÎı¾¶ÌÓï×é³É,¸÷²¿·Ö¼äÓÿոñ·û¸ô¿ª£¬³ýÁË×îºóµÄ»Ø³µ»ò»»ÐÐÍ⣬Öм䲻ÔÊÐíÓлسµ»»ÐУ®
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
6.1.1״̬ÂëÓëÔÒò¶ÌÓï £¨Status Code and Reason Phrase£©
״̬ÂëÊÇÊÔͼÀí½âºÍÂú×ãÇëÇóµÄÈýλÊý×ÖµÄÕûÊýÂ룬ÕâЩÂëµÄÍêÕû¶¨ÒåÔÚµÚʮա£ÔÒò¶ÌÓReason-Phrase£©ÊÇΪÁ˸ø³öµÄ¹ØÓÚ״̬ÂëµÄÎı¾ÃèÊö¡£×´Ì¬ÂëÓÃÓÚ¿ØÖÆÌõ¼þ£¬¶øÔÒò¶ÌÓReason-Phrase£©ÊÇÈÃÓû§±ãÓÚÔĶÁ¡£¿Í»§¶Ë²»ÐèÒª¼ì²éºÍÏÔʾÔÒò¶ÌÓï¡£
״̬ÂëµÄµÚһλÊý×Ö¶¨ÒåÏìÓ¦ÀàÐÍ¡£ºóÁ½Î»Êý×ÖûÓÐÈκηÖÀà½ÇÉ«¡£µÚһλÊý×ÖÓÐÎåÖÖÖµ£º
-1xx: ±¨¸æµÄ - ½ÓÊÕµ½ÇëÇ󣬼ÌÐø½ø³Ì.
-2xx ³É¹¦ - ²½Öè³É¹¦½ÓÊÕ£¬±»Àí½â£¬²¢±»½ÓÊÜ
-3xx ÖØ·¢ - ΪÁËÍê³ÉÇëÇó,±ØÐë²ÉÈ¡½øÒ»²½´ëÊ©.
-4xx ¿Í»§¶Ë³ö´í - ÇëÇó°üÀ¨´íµÄ˳Ðò»ò²»ÄÜÍê³É.
-5xx ·þÎñÆ÷³ö´í - ·þÎñÆ÷ÎÞ·¨Íê³ÉÏÔÈ»ÓÐЧµÄÇëÇó.
ÏÂÃæÁоÙÁËΪHTTP/1.1¶¨ÒåµÄ̬ÂëÖµ£¬ºÍ¶ÔÓ¦µÄÔÒò¶ÌÓReason-Phrase£©µÄÀý×Ó¡£ÔÒò¶ÌÓïÔÚÕâÀïÀý¾ÙÖ»Êǽ¨ÒéÐÔµÄ----ËüÃÇÒ²Ðí±»Ò»¸ö¾Ö²¿µÄµÈ¼ÛÌå´úÌæ¶ø²»»áÓ°Ïì´ËÐÒéµÄÓïÒå¡£
Status-Code £½
"100" ; 10.1.1½Ú: ¼ÌÐø
|"101" ; 10.1.2½Ú: ת»»ÐÒé
|"200" ; 10.2.1½Ú: OK
|"201" ; 10.2.2½Ú: ´´½¨
|"202" ; 10.2.3½Ú: ½ÓÊÜ
|"203" ; 10.2.4½Ú: ·ÇȨÍþÐÅÏ¢
|"204" ; 10.2.5½Ú: ÎÞÄÚÈÝ
|"205" ; 10.2.6½Ú: ÖØÖÃÄÚÈÝ
|"206" ; 10.2.7½Ú: ¾Ö²¿ÄÚÈÝ
|"300" ; 10.3.1½Ú: ¶àÑùÑ¡Ôñ
|"301" ; 10.3.2½Ú: ÓÀ¾ÃÒÆ¶¯
|"302" ; 10.3.3½Ú: ´´½¨
|"303" ; 10.3.4½Ú: ¹Û²ì±ðµÄ²¿·Ö
|"304" ; 10.3.5½Ú: Ö»¶Á
|"305" ; 10.3.6½Ú: Óû§´úÀí
|"307" ; 10.3.8½Ú ÁÙÊ±ÖØ·¢
|"400" ; 10.4.1½Ú: »µÇëÇó
|"401" ; 10.4.2½Ú: δÊÚȨµÄ
|"402" ; 10.4.3½Ú: ±ØÒªµÄÖ§¸¶
|"403" ; 10.4.4½Ú: ½ûÓÃ
|"404" ; 10.4.5½Ú: ûÕÒµ½
|"405" ; 10.4.6½Ú: ²»ÔÊÐíµÄ·½Ê½
|"406" ; 10.4.7½Ú: ²»½ÓÊÜ
|"407" ; 10.4.8½Ú: ÐèÒª´úÀíÑéÖ¤
|"408" ; 10.4.9½Ú£º ÇëÇó³¬Ê±
|"409" ; 10.4.10½Ú£» ³åÍ»
|"410" ; 10.4.11½Ú£º Í£Ö¹
|"411" ; 10.4.12½Ú£º ÐèÒªµÄ³¤¶È
|"412" £» 10.4.13½Ú£» Ô¤´¦Àíʧ°Ü
|"413" ; 10.4.14½Ú£º ÇëÇóʵÌåÌ«´ó
|"414" ; 10.4.15½Ú£» ÇëÇó-URIÌ«´ó
|"415" ; 10.4.16½Ú£º ²»Ö§³ÖµÄýÌåÀàÐÍ
|"416" £» 10.4.17½Ú£º ÇëÇóµÄ·¶Î§²»Âú×ã
|"417" ; 10.4.18½Ú£º ÆÚÍûʧ°Ü
|"500" ; 10.5.1½Ú: ·þÎñÆ÷ÄÚ²¿´íÎó
|"501" ; 10.5.2½Ú: ²»ÄÜʵÏÖ
|"502" ; 10.5.3½Ú: »µÍø¹Ø
|"503" ; 10.5.4½Ú: ·þÎñ²»ÄÜʵÏÖ
|"504" ; 10.5.5½Ú: Íø¹Ø³¬Ê±
|"505" ; 10.5.6½Ú: HTTP°æ±¾²»Ö§³Ö
|À©Õ¹Âë
extension-code =3DIGIT
Reason-Phrase = *<TEXT,excluding CR,LF>
HTTP״̬ÂëÊÇ¿ÉÀ©Õ¹µÄ¡£HTTPÓ¦ÓóÌÐò²»ÐèÒªÀí½âËùÓÐÒÑ×¢²á״̬ÂëµÄº¬Ò壬¾¡¹ÜÄÇÑùµÄÀí½âÏÔ¶øÒ×¼ûÊǺܺÏËãµÄ¡£µ«ÊÇ£¬Ó¦ÓóÌÐò±ØÐëÁ˽âÓɵÚһλÊý×ÖÖ¸¶¨µÄ״̬ÂëµÄÀàÐÍ£¬ÈκÎδ±»Ê¶±ðµÄÏìÓ¦Ó¦±»¿´×÷ÊǸÃÀàÐ͵Äx00״̬£¬ÓÐÒ»¸öÀýÍâ¾ÍÊÇδ±»Ê¶±ðµÄÏìÓ¦²»ÄÜ»º´æ¡£ÀýÈ磬Èç¹û¿Í»§¶ËÊÕµ½Ò»¸öδ±»Ê¶±ðµÄ״̬Âë431£¬Ôò¿ÉÒÔ°²È«µÄ¼Ù¶¨ÇëÇóÓÐ´í£¬²¢ÇÒËü»á¶Ô´ý´ËÏìÓ¦¾ÍÏñËü½ÓÊÕÁËÒ»¸ö״̬ÂëÊÇ400µÄÏìÓ¦¡£ÔÚÕâÖÖÇé¿öÏ£¬Óû§´úÀí£¨user agent£©Ó¦µ±°ÑʵÌåºÍÏìÓ¦Ò»ÆðÌá½»¸øÓû§£¬ÒòΪʵÌåºÜ¿ÉÄܰüÀ¨È˿ɶÁµÄ¹ØÓÚ½âÊͲ»Õý³£×´Ì¬µÄÐÅÏ¢¡£
£¶.2ÏìӦͷÓò £¨Response Header Fields£©
ÏìӦͷÓòÔÊÐí·þÎñÆ÷´«ËÍÏìÓ¦µÄ¸½¼ÓÐÅÏ¢£¬ÕâЩÐÅÏ¢²»ÄÜ·ÅÔÚ״̬ÐУ¨Status-Line£©Àï.¡£ÕâЩͷÓò¸ø³öÓйطþÎñÆ÷µÄÐÅÏ¢ÒÔ¼°ÇëÇóURI£¨Request-URI£©Ö¸¶¨µÄ×ÊÔ´µÄ¸ü½øÒ»²½µÄ·ÃÎÊ¡£
response-header = Accept-Ranges ; 14.5½Ú
|Age ; 14.6½Ú
|Etag ; 14.19½Ú
|Location ; 14.30½Ú
|Proxy-Autenticate ; 14.33½Ú
|Retry-After ; 14.37½Ú
|Server ; 14.38½Ú
|Vary ; 14.44½Ú
|WWW-Authenticate ; 14.47½Ú
ÏìӦͷÓòµÄÃû×ÖÄÜÒÀÀµÓÚÐÒé°æ±¾µÄ±ä»¯¶øÀ©Õ¹¡£È»¶ø£¬ÐµĻòÕßʵÑéÐÔµÄÍ·Óò¿ÉÄÜ»á¸øÓÚÏìӦͷÓòµÄÓïÒåÈç¹ûͨÐŵijÉÔ±¶¼ÄÜʶ±ðËûÃDz¢°ÑËûÃÇ¿´×÷ÏìӦͷÓò¡£²»±»Ê¶±ðµÄÍ·Óò±»¿´×÷ʵÌåÍ·Óò¡£
7 ʵÌ壨Entity£©
Èç¹û²»±»ÇëÇóµÄ·½·¨»òÏìÓ¦µÄ״̬ÂëËùÏÞÖÆ£¬ÇëÇóºÍÏìÓ¦ÏûÏ¢¶¼¿ÉÒÔ´«ÊäʵÌå¡£ ʵÌå°üÀ¨ÊµÌåÍ·Óò£¨entity-header£©ÓëʵÌåÖ÷Ì壨entity-body£©£¬¶øÓÐЩÏìÓ¦Ö»°üÀ¨ÊµÌåÍ·Óò£¨entity-header£©¡£
ÔÚ±¾½ÚÖеķ¢ËÍÕߺͽÓÊÕÕßÊÇ·ñÊǿͻ§¶Ë»ò·þÎñÆ÷£¬ÕâÒÀÀµÓÚË·¢ËÍ»ò˽ÓÊÕ´ËʵÌå¡£
7.1 ʵÌ屨ÎÄÓò£¨Entity Header Fields£©
ʵÌ壨entity-header£©Í·Óò¶¨ÒåÁ˹ØÓÚʵÌåÖ÷ÌåµÄµÄÔªÐÅÏ¢£¬»òÔÚÎÞÖ÷ÌåµÄÇé¿ö϶¨ÒåÁËÇëÇóµÄ×ÊÔ´µÄÔªÐÅÏ¢¡£ÓÐЩԪÐÅÏ¢ÊÇ¿ÉÑ¡µÄ£»Ò»Ð©ÊDZØÐëµÄ¡£
entity-header = Allow ; Section 14.7
| Content-Encoding ; Section 14.11
| Content-Language ; Section 14.12
| Content-Length ; Section 14.13
| Content-Location ; Section 14.14
| Content-MD5 ; Section 14.15
| Content-Range ; Section 14.16
| Content-Type ; Section 14.17
| Expires ; Section 14.21
| Last-Modified ; Section 14.29
| extension-header
extension-header = message-header
À©Õ¹Í·»úÖÆÔÊÐíÔÚ²»¸Ä±äÐÒéµÄǰÌá϶¨Òå¶îÍâµÄʵÌåÍ·Óò£¬µ«²»±£Ö¤ÕâЩÓòÔÚ½ÓÊÕ¶ËÄܹ»±»Ê¶±ð¡£Î´±»Ê¶±ðµÄÍ·ÓòÓ¦µ±±»½ÓÊÕÕߺöÂÔ£¬ÇÒ±ØÐ뱻͸Ã÷´úÀí£¨transparent proxy£©×ª·¢¡£
7.2 ʵÌåÖ÷Ì壨Entity Body£©
ÓÉHTTPÇëÇó»òÏìÓ¦·¢Ë͵ÄʵÌåÖ÷Ì壨Èç¹û´æÔڵϰ£©µÄ¸ñʽÓë±àÂ뷽ʽӦÓÉʵÌåµÄÍ·Óò¾ö¶¨¡£
Entity-body= *OCTET
Èç4¡£3½ÚËùÊö£¬ÊµÌåÖ÷Ì壨entity-body£©Ö»Óе±ÏûÏ¢Ö÷Ìå´æÔÚʱʱ²Å´æÔÚ¡£ÊµÌåÖ÷Ì壨entity-body£©´ÓÏûÏ¢Ö÷Ìåͨ¹ý´«ÊäÒëÂëÍ·Óò£¨Transfer-Encoding£©ÒëÂëµÃµ½£¬´«ÊäÒëÂëÓÃÓÚÈ·±£ÏûÏ¢µÄ°²È«ºÍºÏÊʵĴ«Êä¡£
7.2.1ÀàÐÍ£¨Type£©
µ±ÏûÏ¢°üº¬ÊµÌåÖ÷Ì壨entity-body£©Ê±£¬Ö÷ÌåµÄÊý¾ÝÀàÐÍÓÉʵÌåÍ·ÓòContent-TypeºÍContent-Encoding¾ö¶¨¡£ÕâЩͷÓò¶¨ÒåÁËÁ½²ãµÄ˳ÐòµÄ±àÂëÄ£ÐÍ£º
Entity-body£º=Content-Encoding£¨ Content-Type£¨ data£© £©
Content-TypeÖ¸¶¨ÁËϲãÊý¾ÝµÄýÌåÀàÐÍ¡£Content-Encoding¿ÉÄܱ»ÓÃÀ´Ö¸¶¨¸½¼ÓµÄÓ¦ÓÃÓÚÊý¾ÝµÄÄÚÈݱàÂ룬¾³£ÓÃÓÚÊý¾ÝѹËõµÄÄ¿µÄ£¬ÄÚÈݱàÂëÊÇÇëÇó×ÊÔ´µÄÊôÐÔ¡£Ã»ÓÐȱʡµÄÒëÂë¡£
ÈÎÒ»°üº¬ÁËʵÌåÖ÷ÌåµÄHTTP/1.1ÏûÏ¢¶¼Ó¦°üÀ¨Content-TypeÍ·ÓòÒÔ¶¨ÒåʵÌåÖ÷ÌåµÄýÌåÀàÐÍ¡£Èç¹û²¢ÇÒÖ»ÓÐýÌåÀàÐÍûÓÐͨ¹ýContent-TypeÍ·ÓòÖ¸¶¨Ê±£¬½ÓÊÕÕß¿ÉÄ᳢ܻÊԲ²âýÌåÀàÐÍ£¬Õâͨ¹ý¹Û²ìʵÌåÖ÷ÌåµÄÄÚÈݲ¢ÇÒ/»òÕßͨ¹ý¹Û²ìURIÖ¸¶¨×ÊÔ´µÄÀ©Õ¹Ãû¡£Èç¹ûýÌåÀàÐÍÈÔÈ»²»ÖªµÀ£¬½ÓÊÕÕßÓ¦¸Ã°ÑÀàÐÍ¿´×÷”application/octec-stream”¡£
7.2.2ʵÌåÖ÷Ì峤¶È£¨Entity Length£©
ÏûÏ¢µÄʵÌåÖ÷Ì峤¶ÈÖ¸µÄÊÇÏûÏ¢Ö÷ÌåÔÚ±»Ó¦ÓÃÓÚ´«Êä±àÂ루transfer-coding£©Ö®Ç°µÄ³¤¶È¡£4.4½Ú¶¨ÒåÁËÔõÑùȥȷ¶¨ÏûÏ¢Ö÷ÌåµÄ´«Ê䳤¶È¡£
8 Á¬½Ó
8.1 ³ÖÐøÁ¬½Ó£¨Persistent Connection£©¡£
8.1.1Ä¿µÄ
ÔÚ³ÖÐøÁ¬½Ó֮ǰ£¬Îª»ñȡÿһ¸öURLÖ¸¶¨µÄ×ÊÔ´¶¼±ØÐ뽨Á¢Á˶ÀÁ¢µÄTCP Á¬½Ó£¬ Õâ¾Í¼ÓÖØÁËHTTP·þÎñÆ÷µÄ¸ºµ££¬Ò×ÒýÆð»¥ÁªÍøµÄ×èÈû¡£Ç¶ÈëµÄͼƬÓëÆäËüÏà¹ØÊý¾Ýͨ³£Ê¹Óû§ÔÚ¶Ìʱ¼äÄÚ¶Ôͬһ·þÎñÆ÷Ìá½»¶à¸öÇëÇó¡£Ä¿Ç°ÒÑÓÐÕë¶ÔÕâЩÐÔÄÜÎÊÌâµÄ·ÖÎöÒÔ¼°ÔÐÍʵÏֵĽá¹û[26][30]¡£ ¶ÔÆäËû·½·¨Ò²ÓÐÁ˳õ²½Ì½¾¿£¬ÈçT/TCP [27]¡£
³ÖÐøHTTP Á¬½ÓÓÐ×ÅÖî¶àµÄÓŵ㣺
--- ͨ¹ý½¨Á¢Óë¹Ø±Õ½ÏÉÙµÄTCPÁ¬½Ó£¬²»½ö½ÚÊ¡ÁË·ÓÉÆ÷ÓëÖ÷»ú£¨¿Í»§¶Ë£¬·þÎñÆ÷£¬´úÀí·þÎñÆ÷£¬Íø¹Ø£¬ËíµÀ»ò»º´æ£©µÄCPUʱ¼ä£¬»¹½ÚÊ¡ÁËÖ÷»úÓÃÓÚTCPÐÒé¿ØÖÆ¿éµÄÄÚ´æ¡£
---ÄÜÔÚÁ¬½ÓÉϽøÐÐÁ÷Ë®ÏßÇëÇó·½Ê½¡£ Á÷Ë®ÏßÇëÇó·½Ê½ÄÜÔÊÐí¿Í»§¶ËÖ´Ðжà´ÎÇëÇó¶ø²»Óõȴýÿһ¸öÇëÇóµÄÏìÓ¦£¨Òë×¢£º¼´¿Í»§¶Ë¿ÉÒÔ·¢ËÍÇëÇó¶ø²»ÓõȴýÒÔǰµÄÇëÇóµÄÏìÓ¦µ½À´ºóÔÙ·¢ÇëÇ󣩣¬²¢ÇÒ´Ëʱֻ½øÐÐÁËÒ»¸öTCPÁ¬½Ó£¬´Ó¶øÐ§Âʸü¸ß£¬¼õÉÙÁËʱ¼ä¡£
--- ÍøÂç×èÈû»á±»¼õÉÙ£¬ÕâÊÇÓÉÓÚTCPÁ¬½Óºó¼õÉÙÁ˰üµÄÊýÁ¿£¬²¢ÇÒÓÉÓÚÔÊÐíTCPÓгä·ÖµÄʱ¼äÈ¥¾ö¶¨ÍøÂç×èÈûµÄ״̬¡£
--- ÒòΪÎÞÐëÔÚ´´½¨TCPÁ¬½ÓʱµÄÎÕÊÖÉϺķÑʱ¼ä£¬¶øÊ¹ºóÐøÇëÇóµÄµÈ´ýʱ¼ä¼õÉÙ¡£
---HTTP¸Ä½øµÄÔ½À´Ô½ºÃ£¬ÒòΪÔÚ²»ÐèÒª¹Ø±ÕTCPÁ¬½ÓµÄ´ú¼ÛÏ¿ÉÒÔ±¨¸æ´íÎó¡£½«À´µÄHTTP°æ±¾¿Í»§¶Ë¿ÉÒÔÀֹ۵ij¢ÊÔÒ»¸öеÄÌØÐÔ£¬µ«ÊÇÈç¹ûºÍÀϵķþÎñÆ÷ͨÐÅʱ£¬ÔÚ´íÎó±»±¨¸æºó¾ÍÒªÓþɵÄÓïÒå¶ø½øÐÐÖØÐ³¢ÊÔÁ¬½Ó¡£
HTTPʵÏÖÓ¦¸ÃʵÏÖ³Ö¾ÃÁ¬½Ó¡£
8.1.2×ÜÌå²Ù×÷
HTTP/1.1 ÓëÔçÆÚHTTP °æ±¾µÄÒ»¸öÏÔÖøÇø±ðÔÚÓÚ³ÖÐøÁ¬½ÓÊÇÈκÎHTTP/1.1Á¬½ÓµÄȱʡ·½Ê½¡£Ò²¾ÍÊÇ˵£¬³ý·ÇÁíÓÐÖ¸¶¨£¬¿Í»§¶Ë×ÜÓ¦µ±¼Ù¶¨·þÎñÆ÷»á±£³Ö³ÖÐøÁ¬½Ó£¬¼´±ãÔÚ½Óµ½·þÎñÆ÷µÄ³ö´íÏìӦʱҲӦÈç´Ë¡£
³ÖÐøÁ¬½ÓÌṩÁËÒ»ÖÖ¿ÉÒÔÓɿͻ§¶Ë»ò·þÎñÆ÷·¢ÐźÅÀ´ÖÕÖ¹TCPÁ¬½ÓµÄ»úÖÆ¡£ÀûÓÃConnectÍ·Óò£¨14¡£10½Ú£©¿ÉÒÔ²úÉúÖÕÖ¹Á¬½ÓÐźš£Ò»µ©³öÏÖÁËÖÕÖ¹Á¬½ÓµÄÐźţ¬¿Í»§¶Ë±ã²»¿ÉÔÙÏò´ËÁ¬½ÓÌá³öÈκÎÐÂÇëÇó¡£
8.1.2.1 ÐÉÌ£¨Negotiation£©
³ý·ÇÇëÇóµÄConnectÍ·ÓòÖаüº¬ÁË"close"±êÇ©£¬HTTP/1.1·þÎñÆ÷×Ü¿ÉÒÔ¼Ù¶¨HTTP/1.1 ¿Í»§¶ËÏëҪά³Ö³ÖÐøÁ¬½Ó£¨persistent connection£©¡£Èç¹û·þÎñÆ÷ÏëÔÚ·¢³öÏìÓ¦ºóÁ¢¼´¹Ø±ÕÁ¬½Ó£¬ËüÓ¦µ±·¢ËÍÒ»¸öº¬”close”µÄConnectÍ·Óò¡£
Ò»¸öHTTP/1.1¿Í»§¶Ë¿ÉÄÜÆÚÍû±£³ÖÁ¬½ÓÒ»Ö±¿ª×Å£¬µ«Õâ±ØÐëÊÇ»ùÓÚ·þÎñÆ÷ÏìÓ¦ÀïÊÇ·ñ°üº¬Ò»¸öConnectÍ·Óò²¢ÇÒ´ËÍ·ÓòÀïÊÇ·ñ°üº¬”close”¡£Èç¹û¿Í»§¶Ë²»ÏëΪ¸ü¶àµÄÇëÇóά³ÖÁ¬½Ó£¬ËüÓ¦¸Ã·¢ËÍÒ»¸öֵΪ”close”µÄConnectÍ·Óò¡£
Èç¹û¿Í»§¶ËºÍ·þÎñÆ÷Ö®Ò»ÔÚ·¢Ë͵ÄConnectÍ·ÓòÀï°üº¬”close”£¬ÄÇô¿Í»§¶ËµÄÇëÇ󽫻á±äΪ´ËÁ¬½ÓµÄ×îºóÒ»¸öÇëÇ󡣡£
¿Í»§¶ËºÍ·þÎñÆ÷²»Ó¦¸ÃÈÏΪ³ÖÐøÁ¬½ÓÊǵÍÓÚ1.1µÄHTTP°æ±¾ËùÓµÓе쬳ý·ÇËü±»ÏÔʾµØÖ¸Ã÷ÁË¡£19.6.2½ÚÖ¸³öÁ˸úHTTP/1.1¿Í»§¶Ë¼æÈݵĸü¶àÐÅÏ¢¡£
8.1.2.2 Á÷Ë®Ïߣ¨pilelining£©
Ö§³Ö³ÖÐøÁ¬½Ó£¨persistent conncetio£©µÄ¿Í»§¶Ë¿ÉÒÔÒÔÁ÷Ë®Ïߵķ½Ê½·¢ËÍÇëÇ󣨼´ÎÞÐëµÈ´ýÏìÓ¦¶ø·¢ËͶà¸öÇëÇ󣩡£·þÎñÆ÷±ØÐë°´½ÓÊÕÇëÇóµÄ˳Ðò·¢ËÍÏìÓ¦¡£
¼Ù¶¨³ÖÐøÁ¬½Ó²¢ÇÒÔÚÁ¬½Ó½¨Á¢ºó½øÐÐÁ÷Ë®Ïß·½Ê½ÇëÇóµÄ¿Í»§¶ËÓ¦¸Ã×¼±¸È¥ÖØÐ³¢ÊÔËûÃǵÄÁ¬½ÓÈç¹ûµÚÒ»¸öÁ÷Ë®ÏßÇëÇó·½Ê½³¢ÊÔʧ°Ü¡£Èç¹û¿Í»§¶ËÖØÐ³¢ÊÔÁ¬½Ó£¬ÔÚ¿Í»§¶ËÖªµÀÁ¬½ÓÊdzÖÐøÖ®Ç°¿Í»§¶Ë²»ÄܽøÐÐÁ÷Ë®Ïß·¢ËÍÇëÇ󡣿ͻ§¶Ë±ØÐë×¼±¸È¥ÖØÐ·¢ËÍÇëÇóÈç¹û·þÎñÆ÷ÔÚÏìÓ¦ËùÓжÔÓ¦µÄÇëÇó֮ǰ¹Ø±ÕÁ¬½Ó
¿Í»§¶Ë²»Ó¦¸ÃÀûÓ÷ǵÈÃݵķ½·¨»òÕ߷ǵÈÃݵķ½·¨ÐòÁУ¨¼û9.1.2½Ú£©½øÐÐÁ÷Ë®Ïß·½Ê½µÄÇëÇó¡£·ñÔòÒ»¸ö¹ýÔçµÄ´«Êä²ãÁ¬½ÓµÄÖÕÖ¹¿ÉÄܻᵼÖ²»È·¶¨µÄ½á¹û¡£Ò»¸ö¿ÉÄÜÏ£Íû·¢ËÍÒ»¸ö·ÇµÈÃÝ·½·¨ÇëÇóµÄ¿Í»§¶ËÖ»ÓнÓÊÕÁËÉÏ´ÎËü·¢³öÇëÇóµÄÏìÓ¦ºó²ÅÄÜÔٴη¢ËÍÇëÇó¸ø·þÎñÆ÷¡£
8.1.3´úÀí·þÎñÆ÷ £¨Proxy Servers£©
ËüÊǷdz£ÖØÒªµÄÒòΪ´úÀí·þÎñÆ÷ÕýÈ·µØÊµÏÖÁËConnectÍ·ÓòµÄÊôÐÔ£¬ÕâÔÚ14.10½ÚÖ¸³öÁË¡£
´úÀí·þÎñÆ÷±ØÐë·Ö±ðÏòºÍËüÏàÁ¬µÄ¿Í»§¶Ë»òÕßÔ´·þÎñÆ÷£¨»òÆäËûµÄ´úÀí·þÎñÆ÷£©Ö¸Ã÷³ÖÐøÁ¬½Ó¡£Ã¿Ò»¸ö³ÖÐøÁ¬½ÓÖ»ÄÜÓ¦ÓÃÓÚÒ»¸ö´«Êä²ãÁ¬½Ó¡£
´úÀí·þÎñÆ÷²»ÄܺÍÒ»¸öHTTP/1.0¿Í»§¶Ë½¨Á¢Ò»¸öHTTP/1.1³ÖÐøÁ¬½Ó£¨µ«ÊDzμûRFC2068[33]ÀïµÄ¹ØÓÚÐí¶àHTTP/1.1¿Í»§¶ËÀûÓÃKeep-AliveÍ·ÓòµÄÎÊÌâµÄÌÖÂÛ£©¡£
8.1.4ʵ¼ÊµÄ¿¼ÂÇ £¨Practical Considerations£©
·þÎñÆ÷ͨ³£ÓÐÒ»¸öʱÏÞÖµ£¬³¬¹ýÒ»¶¨Ê±¼ä¼´²»ÔÙά³Ö´¦ÓڷǻµÄÁ¬½Ó¡£´úÀí·þÎñÆ÷»áѡһ¸ö½Ï¸ßµÄÖµ£¬ÒòΪ¿Í»§¶ËºÜ¿ÉÄÜ»áÓëͬһ·þÎñÆ÷½¨Á¢¶à¸öÁ¬½Ó¡£³ÖÐøÁ¬½Ó·½Ê½µÄ²ÉÓöÔÓÚ¿Í»§¶ËÓë·þÎñÆ÷µÄʱÏÞ¾ùδÌá³öÈκÎÒªÇó¡£
µ±¿Í»§¶Ë»ò·þÎñÆ÷Ï£Íû³¬Ê±ÖÕֹʱ£¬ ËüÓ¦¸Ã°´¹æ·¶ÖÕÖ¹´«ÊäÁ¬½Ó¡£¿Í»§¶ËÓë·þÎñÆ÷¶ËӦʼÖÕ×¢Òâ¶Ô·½ÊÇ·ñÖÕÖ¹ÁËÁ¬½Ó£¬²¢Êʵ±µÄÓèÒÔÏìÓ¦¡£Èô¿Í»§¶Ë»ò·þÎñÆ÷δÄܼ°Ê±¼ì²âµ½¶Ô·½ÒÑÖÕÖ¹ÁËÁ¬½Ó£¬½«»áÔì³É²»±ØÒªµÄÍøÂç×ÊÔ´ÀË·Ñ¡£
¿Í»§¶Ë£¬·þÎñÆ÷£¬»ò´úÀí·þÎñÆ÷¿ÉÄÜÔÚÈÎÒâʱ¿Ì»áÖÕÖ¹´«ÊäÁ¬½Ó¡£±ÈÈ磬¿Í»§¶Ë¿ÉÄÜÕýÏë·¢³öеÄÇëÇ󣬶ø´Ëʱ·þÎñÆ÷È´¾ö¶¨¹Ø±Õ"ÏÐÖÃ"µÄÁ¬½Ó¡£ÔÚ·þÎñÆ÷¿´À´£¬Á¬½ÓÒѾÒòΪÏÐÖñ»¹Ø±ÕÁË£¬ µ«¿Í»§¶ËÈÏΪÎÒÕýÔÚÇëÇó¡£
Õâ±íÃ÷¿Í»§¶Ë£¬·þÎñÆ÷Óë´úÀí·þÎñÆ÷±ØÐëÓÐÄÜÁ¦´ÓÒì²½µÄÁ¬½ÓÖÕֹʼþÖлָ´¡£Ö»ÒªÇëÇóÊǵÈÃݵ썼û9.1.2½Ú£©£¬¿Í»§¶ËÈí¼þÓ¦¸ÃÄÜÖØÐ´ò¿ª´«Êä²ãÁ¬½Ó²¢ÖØÐ´«ÊäÒÅÆúµÄÇëÇóÐòÁжø²»ÐèÒªÓû§½øÐн»»¥À´ÊµÏÖ¡£¶Ô·ÇµÈÃÝ·½·¨µÄÇëÇó²»ÄÜ×Ô¶¯½øÐÐÖØÊÔÇëÇ󣬾¡¹Ü¿Í»§´úÀí£¨user agent£©¿ÉÄÜÄÜÌṩһ¸öÈ˹¤²Ù×÷È¥ÖØÊÔÕâЩÇëÇó¡£Ó¦¸ÃÓÃÓû§´úÀí£¨user-agent£©Èí¼þ¶ÔÓ¦ÓóÌÐòÓïÒåʶ±ðµÄÈ·ÈÏÀ´Ìæ´úÓû§µÄÈ·ÈÏ¡£Èç¹ûÔÙ´ÎÖØÊÔÇëÇóʧ°Ü£¬ÄÇô¾Í²»ÄÜÔÙ½øÐÐÖØ¸´ÇëÇóÁË¡£
·þÎñÆ÷¾¡¿ÉÄÜÓ¦¸ÃÔÚÿ´ÎÁ¬½ÓÖÐÖÁÉÙÏìÓ¦Ò»¸öÇëÇó¡£³ý·Ç³öÓÚÍøÂç»ò¿Í»§¶ËµÄ¹ÊÕÏ£¬·þÎñÆ÷²»Ó¦ÔÚ´«ËÍÏìÓ¦µÄÖÐ;¶Ï¿ªÁ¬½Ó¡£
ʹÓóÖÐøÁ¬½ÓµÄ¿Í»§¶ËÓ¦ÏÞÖÆÓëijһ·þÎñÆ÷ͬʱÁ¬½ÓµÄ¸öÊý¡£µ¥Óû§¿Í»§¶Ë²»Ó¦ÓëÈÎÒ»·þÎñÆ÷»ò´úÀí·þÎñÆ÷±£³ÖÁ½¸öÒÔÉϵÄÁ¬½Ó¡£´úÀí·þÎñÆ÷ÓëÆäËü·þÎñÆ÷»ò´úÀí·þÎñÆ÷Ö®¼äӦά»¤2*N¸öÁ¬½Ó£¬ÆäÖÐNÊÇͬʱÔÚÏßµÄÓû§Êý¡£ÕâЩ׼ÔòÊÇΪÁ˸ÄÉÆÏìӦʱ¼äºÍºÍ±ÜÃâ×èÈû¡£
8.2 ÏûÏ¢´«ËÍÒªÇó£¨Message Transmission Requirements£©
8.2.1³ÖÐøÁ¬½ÓÓëÁ÷Á¿¿ØÖÆ £¨Persistent Connections and Flow Control£©
HTTP/1.1·þÎñÆ÷Ó¦µ±±£³Ö³ÖÐøÁ¬½Ó²¢Ê¹ÓÃTCPÁ÷Á¿¿ØÖÆ»úÖÆÀ´½â¾öÁÙʱ¹ýÔØ£¬¶ø²»ÊÇÔÚÖÕÖ¹Á¬½ÓºóÖ¸Íû¿Í»§¶ËµÄÖØÊÔ¡£ºóÒ»·½·¨»á¶ñ»¯ÍøÂç×èÈû¡£
8.2.2¼àÊÓÁ¬½ÓÖгö´í״̬µÄÏûÏ¢
HTTP/1.1£¨»ò¸üУ©¿Í»§¶ËÓ¦ÔÚ·¢ËÍÏûÏ¢Ö÷ÌåµÄʱºòͬʱ¼àÊÓÍøÂçÁ¬½ÓÊÇ·ñ´¦ÓÚ³ö´í״̬¡£Èô¿Í»§¶Ë·¢ÏÖÁË´íÎó£¬ËüÓ¦µ±Á¢¼´Í£Ö¹ÏûÏ¢Ö÷ÌåµÄµÄ´«ËÍ¡£ÈôÕýÎÄÊÇÒÔ¿é´«Êä±àÂ뷽ʽ·¢Ë͵ģ¨3.6½Ú£©£¬¿ÉÒÔÓó¤¶ÈΪÁãµÄ¿éºÍ¿Õβ²¿À´Ìáǰ±ê¼Ç±¨ÎĽáÊø¡£ÈôÏûÏ¢Ö÷ÌåǰÓÐContent-LengthÍ·Óò£¬Ôò¿Í»§¶Ë±ØÐë¹Ø±ÕÁ¬½Ó¡£
8.2.3 100״̬ÂëµÄÓÃ;
100״̬Â루¼ÌÐø£¬¼û10.1.1½Ú£©µÄÄ¿µÄÔÚÓÚÔÊÐí¿Í»§¶ËÅж¨·þÎñÆ÷ÊÇ·ñÔ¸Òâ½ÓÊܿͻ§¶Ë·¢À´µÄÏûÏ¢Ö÷Ì壨»ùÓÚÇëÇóÍ·Óò£©ÔÚ¿Í»§¶Ë·¢ËÍ´ËÇëÇóÏûÏ¢Ö÷Ìåǰ¡£ ÔÚÓÐЩÇé¿öÏ£¬Èç¹û·þÎñÆ÷¾Ü¾ø²é¿´ÏûÏ¢Ö÷Ì壬Õâʱ¿Í»§¶Ë·¢ËÍÏûÏ¢Ö÷ÌåÊDz»ºÏÊʵĻò»á½µµÍЧÂÊ¡£
HTTP/1.1¿Í»§¶ËµÄÒªÇó£º
--- Èô¿Í»§¶ËÒªÔÚ·¢ËÍÇëÇóÏûÏ¢Ö÷Ìå֮ǰµÈºò100£¨¼ÌÐø£©ÏìÓ¦£¬ÔòËü±ØÐë·¢ËÍÒ»¸öExpectÇëÇóÍ·Óò£¨¼û14.20½Ú£©£¬²¢ÇÒÖµÊÇ”100-continue”¡£
--- ¿Í»§¶Ë²»ÄÜ·¢ËÍÒ»¸öÖµÊÇ”100-continue”µÄExpectÇëÇóÍ·Óò£¬Èç¹û´Ë¿Í»§¶Ë²»´òËã·¢ËÍ´øÏûÏ¢Ö÷ÌåµÄÇëÇó¡£
ÓÉÓÚ´æÔھɵÄʵÏÖ·½·¨£¬ÐÒéÔÊÐí¶þÒåÐÔµÄÇéÐδæÔÚ£¬ÕâÔÚ¿Í»§¶ËÔÚ·¢ËÍ”Expect:100-continue”ºó¶øÃ»ÓнÓÊÕÒ»¸ö417£¨ÆÚÍûʧ°Ü£©×´Ì¬Âë»ò×Å100£¨¼ÌÐø£©×´Ì¬ÂëµÄÇé¿öÏ·¢Éú¡£Òò´Ë£¬µ±Ò»¸ö¿Í»§¶Ë·¢ËÍ´ËÍ·Óò¸øÒ»¸öÔ´·þÎñÆ÷£¨¿ÉÄÜͨ¹ý´úÀí£©£¬´Ë·þÎñÆ÷ҲûÓÐÒÔ100£¨¼ÌÐø£©×´Ì¬ÂëÏìÓ¦£¬ÄÇô¿Í»§¶Ë²»Ó¦¸ÃÔÚ·¢ËÍÇëÇóÏûÏ¢µÄÖ÷ÌåǰÎÞÏ޵ȴý¡£
HTTP’/1.1Ô´·þÎñÆ÷µÄÒªÇó£º
--- µ±½ÓÊÕÒ»¸ö°üº¬ÖµÎª”100-contitue”µÄExpectÇëÇóÍ·ÓòµÄÇëÇóʱ£¬Ô´·þÎñÆ÷±ØÐë»òÕßÒÔ100£¨¼ÌÐø£©×´Ì¬ÂëÏìÓ¦²¢ÇÒ¼ÌÐø´ÓÊäÈëÁ÷Àï½ÓÊÕÊý¾Ý£¬»òÕßÒÔfinal״̬ÂëÏìÓ¦¡£Ô´·þÎñÆ÷²»ÄÜÔÚ·¢ËÍ100£¨¼ÌÐø£©×´Ì¬ÂëÏìӦ֮ǰ½ÓÊÕÇëÇóÖ÷Ìå¡£Èç¹û·þÎñÆ÷ÒÔfinal״̬ÂëÏìÓ¦ºó£¬Ëü¿ÉÄÜ»á¹Ø±Õ´«Êä²ãÁ¬½Ó»òÕßËüÒ²¿ÉÄÜ»á¼ÌÐø½ÓÊÕ»òÒÅÆúÊ£ÓàµÄÇëÇó¡£µ«ÊǼÈÈ»Ëü·µ»ØÁËÒ»¸öfinal״̬ÂëµÄÏìÓ¦£¬Ëü¾Í²»ÄÜÔÙÈ¥ÄǸöÖ´ÐÐÇëÇóµÄ·½·¨£¨È磺POST·½·¨£¬PUT·½·¨£©¡£
--- ÈçÇëÇóÏûÏ¢²»º¬ÖµÎª"100-continue"µÄExpectÇëÇóÍ·Óò£¬ Ô´·þÎñÆ÷²»Ó¦·¢ËÍ100£¨¼ÌÐø£©ÏìÓ¦¡£µ±ÇëÇóÀ´×ÔHTTP/1.0£¨»ò¸üÔ磩µÄ¿Í»§¶ËʱҲ²»µÃ·¢ËÍ100£¨¼ÌÐø£©ÏìÓ¦¡£¶Ô´Ë¹æ¶¨ÓÐÒ»ÀýÍ⣺ΪÁËÓëRFC 2068¼æÈÝ£¬Ô´·þÎñÆ÷¿ÉÄܻᷢËÍÒ»¸ö100£¨¼ÌÐø£©×´Ì¬ÏìÓ¦ÒÔÏìÓ¦HTTP/1.1µÄPUT»òPOStÇëÇó£¬ËäÈ»ÕâЩÇëÇóÖÐûÓаüº¬ÖµÎª”100-continue”µÄExpectÇëÇóÍ·Óò¡£Õâ¸öÀýÍâµÄÄ¿µÄÊÇΪÁ˼õÉÙÈκοͻ§¶ËÒòΪµÈ´ý100£¨¼ÌÐø£©×´Ì¬ÏìÓ¦µÄÑÓʱ£¬µ«´ËÀýÍâÖ»ÄÜÓ¦ÓÃÓÚHTTP/1.1ÇëÇ󣬲¢²»ÊʺÏÓÚÆäËûHTTP°æ±¾µÄÇëÇó¡£
--- ÈôÒѾ½ÓÊÕµ½²¿·Ö»òÈ«²¿ÇëÇóµÄÏûÏ¢µÄÖ÷Ì壬Դ·þÎñÆ÷¿ÉÒÔ²»ÐèÒª·¢100£¨¼ÌÐø£©ÏìÓ¦¡£
--- ·¢ËÍ100£¨¼ÌÐø£©ÏìÓ¦µÄÔ´·þÎñÆ÷±ØÐë×îÖÕÄÜ·¢ËÍÒ»¸öfinal״̬ÏìÓ¦£¬Ò»µ©ÇëÇóÏûÏ¢Ö÷Ìå±»Ëü½ÓÊÕµ½²¢ÇÒÒѾ±»Ëü´¦ÀíÁË£¬³ý·ÇÔ´·þÎñÆ÷¹ýÔçÇжÏÁË´«Êä²ãÁ¬½Ó¡£
--- ÈôÔ´·þÎñÆ÷½ÓÊÕµ½²»º¬ÖµÎª"100-contitue"µÄExpectÇëÇóÍ·ÓòµÄÇëÇ󣬸ÃÇëÇóº¬ÓÐÇëÇóÏûÏ¢Ö÷Ì壬¶ø·þÎñÆ÷ÔÚ´Ó´«Êä²ãÁ¬½ÓÉϽÓÊÕÕû¸öÇëÇóÏûÏ¢Ö÷Ìåǰ·µ»ØÒ»¸öfinalµÄ״̬ÏìÓ¦£¬ÄÇô´ËÔ´·þÎñÆ÷²»Äܹرմ«Êä²ãÁ¬½ÓÖ±µ½Ëü½ÓÊÕÁËÕû¸öÇëÇó»òÕßÖ±µ½¿Í»§¶Ë¹Ø±ÕÁË´ËÁ¬½Ó¡£·ñÔò¿Í»§¶Ë¿ÉÄܲ»»áÐÅÈνÓÊÕ´ËÏìÓ¦ÏûÏ¢¡£È»¶ø£¬ÕâÒ»ÒªÇó²»Ó¦¸Ã±»½âÊÍÓÃÀ´·ÀÖ¹·þÎñÆ÷µÖ¿¹·þÎñ¹¥»÷£¬»òÕß·ÀÖ¹·þÎñÆ÷±»¿Í»§¶ËʵÏÖ¹¥»÷¡£
¶ÔHTTP/1.1´úÀí·þÎñÆ÷µÄÒªÇó£º
--- Èô´úÀí·þÎñÆ÷½Óµ½Ò»¸öÇëÇ󣬴ËÇëÇó°üº¬ÖµÎª"100-continue"µÄExpectÇëÇóÍ·Óò£¬²¢ÇÒ´úÀí·þÎñÆ÷¿ÉÄÜÖªµÀÏÂÒ»Õ¾µãµÄ·þÎñÆ÷×ñÑHTTP/1.1»ò¸ü¸ß°æÐÒ飬»òÕß²»ÖªµÀÏÂÒ»Õ¾µã·þÎñÆ÷µÄHTTP°æ±¾£¬ÄÇôËü±ØÐë°üº¬´ËExpectÍ·ÓòÀ´×ª·¢´ËÇëÇó¡£
--- Èô´úÀí·þÎñÆ÷ÖªµÀÏÂÒ»Õ¾µã·þÎñÆ÷°æ±¾ÊÇHTTP/1.0»ò¸üµÍ£¬ÔòËü²»ÄÜת·¢´ËÇëÇ󣬲¢ÇÒËü±ØÐëÒÔ417£¨ÆÚÍûʧ°Ü£©×´Ì¬ÏìÓ¦¡£
--- ´úÀí·þÎñÆ÷Ó¦µ±Î¬»¤Ò»¸ö»º´æ£¬ÒԼǼ×î½ü·ÃÎÊÏÂÒ»Õ¾µã·þÎñÆ÷µÄHTTP°æ±¾ºÅ¡£
--- Èô½ÓÊÕµ½µÄÇëÇóÀ´×ÔÓÚ°æ±¾ÊÇHTTP/1.0£¨»ò¸üµÍ£©µÄ¿Í»§¶Ë£¬²¢ÇÒ´ËÇëÇ󲻺¬ÖµÎª"100-continue"µÄExpectÇëÇóÍ·Óò£¬ÄÇô´úÀí·þÎñÆ÷²»ÄÜת·¢100£¨¼ÌÐø£©ÏìÓ¦¡£ ÕâÒ»ÒªÇó¿É¸²¸Ç1xxÏìӦת·¢µÄÒ»°ã¹æÔò£¨²Î¼û10.1½Ú£©¡£
8.2.4·þÎñÆ÷¹ýÔç¹Ø±ÕÁ¬½Óʱ¿Í»§¶ËµÄÐÐΪ
Èç¹ûHTTP/1.1 ¿Í»§¶Ë·¢ËÍÒ»Ìõº¬ÓÐÏûÏ¢Ö÷ÌåµÄÇëÇóÏûÏ¢£¬µ«²»º¬ÖµÎª"100-continue"µÄExpectÇëÇóÍ·Óò£¬²¢ÇÒ¿Í»§¶ËÖ±½ÓÓëHTTP/1.1Ô´·þÎñÆ÷ÏàÁ¬£¬²¢ÇÒ¿Í»§¶ËÔÚ½ÓÊÕµ½·þÎñÆ÷µÄ״̬ÏìӦ֮ǰ¿´µ½ÁËÁ¬½ÓµÄ¹Ø±Õ£¬ÄÇô¿Í»§¶ËÓ¦¸ÃÖØÊÔ´ËÇëÇó¡£ÔÚÖØÊÔʱ£¬¿Í»§¶Ë¿ÉÒÔÀûÓÃÏÂÃæµÄËã·¨À´»ñµÃ¿É¿¿µÄÏìÓ¦¡£
1£® Ïò·þÎñÆ÷·¢ÆðÒ»ÐÂÁ¬½Ó¡£
2£® ·¢ËÍÇëÇëÇóÍ·Óò¡£
3£® ³õʼ»¯±äÁ¿R£¬Ê¹RµÄֵΪͨÍù·þÎñÆ÷µÄÍù·µÊ±¼äµÄ¹À¼ÆÖµ£¨±ÈÈç»ùÓÚ½¨Á¢Á¬½ÓµÄʱ¼ä£©£¬»òÔÚÎÞ·¨¹À¼ÆÍù·µÊ±¼äʱÉèΪһ³£ÊýÖµ5Ãë¡£
4£® ¼ÆËãT=R*£¨2**N£©£¬NΪ´ËÇ°ÖØÊÔÇëÇóµÄ´ÎÊý¡£
5£® µÈ´ý·þÎñÆ÷³ö´íÏìÓ¦£¬»òÊǵȴýTÃ루Á½ÕßÖÐʱ¼ä½Ï¶ÌµÄ£©¡£
6£® ÈôûµÈµ½³ö´íÏìÓ¦£¬TÃëºó·¢ËÍÇëÇóµÄÏûÏ¢Ö÷Ìå¡£
7£® Èô¿Í»§¶Ë·¢ÏÖÁ¬½Ó±»Ìáǰ¹Ø±Õ£¬×ªµ½µÚ1²½£¬Ö±µ½ÇëÇó±»½ÓÊÜ£¬½ÓÊÕµ½³ö´íÏìÓ¦£¬»òÊÇÓû§Òò²»ÄÍ·³¶øÖÕÖ¹ÁËÖØÊÔ¹ý³Ì¡£
ÔÚÈÎÒâµãÉÏ£¬¿Í»§¶ËÈç¹û½ÓÊÕµ½·þÎñÆ÷µÄ³ö´íÏìÓ¦£¬¿Í»§¶Ë
--- ²»Ó¦ÔÙ¼ÌÐø·¢ËÍÇëÇó£¬ ²¢ÇÒ
--- Ó¦¸Ã¹Ø±ÕÁ¬½ÓÈç¹û¿Í»§¶ËûÓÐÍê³É·¢ËÍÇëÇóÏûÏ¢¡£
£¹ ·½·¨¶¨Ò壨Method Definitions£©
HTTP/1.1³£Ó÷½·¨µÄ¶¨ÒåÈçÏ¡£ËäÈ»·½·¨¿ÉÒÔ±»Õ¹¿ª£¬µ«Ð¼ӵķ½·¨²»ÄÜÈÏΪÄÜ·ÖÏíÓëÀ©Õ¹µÄ¿Í»§¶ËºÍ·þÎñÆ÷ͬÑùµÄÓïÒå¡£
HstÇëÇóÍ·Óò£¨¼û13.23½Ú£©±ØÐëÄÜÔÚËùÓеÄHTTP/1.1ÇëÇóÀï³öÏÖ¡£
9.1 °²È«ºÍµÈÃÝ£¨Idempotent£©·½·¨
9.1.1°²È«·½·¨£¨Safe Methods£©
ʵÏÖÕßÓ¦µ±ÖªµÀÈí¼þÊÇ´ú±íÓû§ÔÚ»¥ÁªÍøÉϽøÐн»»¥£¬²¢ÇÒÓ¦¸ÃСÐĵØÔÊÐíÓû§ÖªµÀÈκÎËüÃÇ¿ÉÄܲÉÈ¡µÄ¶¯×÷(action)£¬ÕâЩ¶¯×÷¿ÉÄܸøËûÃÇ×Ô¼º»òËûÈË´øÀ´ÎÞ·¨Ô¤ÁϵĽá¹û¡£
ÌØ±ðµÄ£¬GETºÍHEAD·½·¨½ö½öÓ¦¸Ã»ñÈ¡×ÊÔ´¶ø²»ÊÇÖ´Ðж¯×÷£¨action£©¡£ÕâЩ·½·¨Ó¦¸Ã±»¿¼ÂÇÊÇ“°²È«”µÄ¡£¿ÉÒÔÈÃÓû§´úÀíÓÃÆäËûµÄ·½·¨£¬È磺POST£¬PUT£¬DELETE£¬ÕâÑùÓû§´úÀí¾ÍÄÜÖªµÀÕâЩ·½·¨¿ÉÄÜ»áÖ´Ðв»°²È«µÄ¶¯×÷¡£
×ÔÈ»µÄ£¬±£Ö¤µ±·þÎñÆ÷ÓÉÓÚÖ´ÐÐGETÇëÇó¶ø²»ÄܲúÉú¸±×÷ÓÃÊDz»¿ÉÄܵģ»Êµ¼ÊÉÏ£¬Ò»Ð©¶¯Ì¬µÄ×ÊÔ´»á¿¼ÂÇÕâ¸öÌØÐÔ¡£Óû§²¢Ã»ÓÐÇëÇóÕâЩ¸±×÷Óã¬Òò´Ë²»ÐèÒª¶ÔÕâЩ¸±×÷ÓøºÔð¡£
9.1.2µÈÃÝ·½·¨£¨Idempotent Mehtods£©
·½·¨¿ÉÒÔÓеÈÃݵÄÐÔÖÊÒòΪ£¨³ýÁ˳ö´í»òÖÕÖ¹ÎÊÌ⣩N>0¸öÏàͬÇëÇóµÄ¸±×÷ÓÃͬµ¥¸öÇëÇóµÄ¸±×÷ÓõÄЧ¹ûÊÇÒ»Ñù£¨Òë×¢£ºµÈÃݾÍÊÇÖµ²»±äÐÔ£¬ÏàͬµÄÇëÇóµÃµ½ÏàͬµÄÏìÓ¦½á¹û£¬²»»á³öÏÖÏàͬµÄÇëÇó³öÏÖ²»Í¬µÄÏìÓ¦½á¹û£©¡£·½·¨GET£¬HEAD£¬PUT£¬DELETE¶¼ÓÐÕâÖÖÐÔÖÊ¡£Í¬Ñù£¬·½·¨OPTIONSºÍTRACE²»Ó¦¸ÃÓи±×÷Óã¬Òò´Ë¾ßÓÐÄÚÔڵĵÈÃÝÐÔ¡£È»¶ø£¬ÓпÉÄܼ¸¸öÇëÇóµÄÐòÁÐÊDz»µÈÃݵ쬼´Ê¹ÔÚÄÇÑùµÄÐòÁÐÖÐËùÓз½·¨¶¼ÊǵÈÃݵġ££¨Èç¹ûÕû¸öÐòÁÐÕûÌåµÄÖ´ÐеĽá¹û×ÜÊÇÏàͬµÄ£¬²¢ÇҴ˽á¹û²»»áÒòΪÐòÁеÄÕûÌ壬²¿·ÖµÄÔÙ´ÎÖ´Ðжø¸Ä±ä£¬ÄÇô´ËÐòÁÐÊǵÈÃݵġ££©ÀýÈ磬һ¸öÐòÁÐÊǷǵÈÃݵÄÈç¹ûËüµÄ½á¹ûÒÀÀµÓÚÒ»¸öÖµ£¬´ËÖµÔÚÒÔºóÏàͬµÄÐòÁÐÀï»á¸Ä±ä¡£
¸ù¾Ý¶¨Ò壬һ¸öÐòÁÐÈç¹ûûÓи±×÷Óã¬ÄÇô´ËÐòÁÐÊǵÈÃݵ썼ÙÉèÔÚ×ÊÔ´¼¯ÉÏûÓв¢ÐеIJÙ×÷£©¡£
9.2 OPTIONS£¨Ñ¡Ï
OPTIONS·½·¨±íÃ÷ÇëÇóÏëµÃµ½ÇëÇó/ÏìÓ¦Á´ÉϹØÓÚ´ËÇëÇóÀïµÄURI£¨Request-URI£©Ö¸¶¨×ÊÔ´µÄͨÐÅÑ¡ÏîÐÅÏ¢¡£´Ë·½·¨ÔÊÐí¿Í»§¶ËÈ¥Åж¨ÇëÇó×ÊÔ´µÄÑ¡ÏîºÍ/»òÐèÇ󣬻òÕß·þÎñÆ÷µÄÄÜÁ¦£¬¶ø²»ÐèÒªÀûÓÃÒ»¸ö×ÊÔ´¶¯×÷£¨Òë×¢£ºÊ¹ÓÃPOST£¬PUT£¬DELETE·½·¨£©»òÒ»¸ö×ÊÔ´»ñÈ¡£¨Òë×¢£ºÓÃGET·½·¨£©·½·¨¡£
ÕâÖÖ·½·¨µÄÏìÓ¦ÊDz»ÄÜ»º´æµÄ.¡£
Èç¹ûOPTIONSÇëÇóÏûÏ¢Àï°üÀ¨Ò»¸öʵÌåÖ÷Ì壨µ±ÇëÇóÏûÏ¢Àï³öÏÖContent-Length»òÕßTransfer-EncodingÍ·Óòʱ£©£¬ÄÇôýÌåÀàÐͱØÐëͨ¹ýContent-TypeÍ·ÓòÖ¸Ã÷¡£ËäÈ»´Ë¹æ·¶Ã»Óж¨ÒåÈçºÎʹÓôËʵÌåÖ÷Ì壬½«À´µÄHTTPÀ©Õ¹¿ÉÄÜ»áÀûÓÃOPTIONSÇëÇóµÄÏûÏ¢Ö÷ÌåÈ¥µÃµ½·þÎñÆ÷µÃ¸ü¶àÐÅÏ¢¡£Ò»¸ö·þÎñÆ÷Èç¹û²»Ö§³ÖOPTIONÇëÇóµÄÏûÏ¢Ö÷Ì壬Ëü»áÒÅÆú´ËÇëÇóÏûÏ¢Ö÷Ìå¡£
Èç¹ûÇëÇóURIÊÇÒ»¸öÐǺţ¨"*"£©,£¬OPTIONSÇëÇ󽫻áÓ¦ÓÃÓÚ·þÎñÆ÷µÄËùÓÐ×ÊÔ´¶ø²»ÊÇÌØ¶¨×ÊÔ´¡£ÒòΪ·þÎñÆ÷µÄͨÐÅÑ¡Ïîͨ³£ÒÀÀµÓÚ×ÊÔ´£¬ËùÒÔ”*”ÇëÇóÖ»ÄÜÔÚ“ping”»òÕß“no-op”·½·¨Ê±²ÅÓÐÓã»Ëü¸É²»ÁËÈκÎÊÂÇé³ýÁËÔÊÐí¿Í»§¶Ë²âÊÔ·þÎñÆ÷µÄÄÜÁ¦¡£ÀýÈ磺ËüÄܱ»ÓÃÀ´²âÊÔ´úÀíÊÇ·ñ×ñÑHTTP/1.1¡£
Èç¹ûÇëÇóURI²»ÊÇÒ»¸öÐǺţ¨"*"£©,£¬OPTIONSÇëÇóÖ»ÄÜÓ¦ÓÃÓÚÇëÇóURIÖ¸¶¨×ÊÔ´µÄÑ¡Ïî¡£
200ÏìÓ¦Ó¦¸Ã°üº¬ÈκÎÖ¸Ã÷Ñ¡ÏîÐÔÖʵÄÍ·Óò£¬ÕâЩѡÏîÐÔÖÊÓÉ·þÎñÆ÷ʵÏÖ²¢ÇÒÖ»ÊʺÏÄǸöÇëÇóµÄ×ÊÔ´£¨ÀýÈ磬AllowÍ·Óò£©£¬µ«Ò²¿ÉÄܰüһЩÀ©Õ¹µÄÔڴ˹淶ÀïûÓж¨ÒåµÄÍ·Óò¡£Èç¹ûÓÐÏìÓ¦Ö÷ÌåµÄ»°Ò²Ó¦¸Ã°üº¬Ò»Ð©Í¨ÐÅÑ¡ÏîµÄÐÅÏ¢¡£Õâ¸öÏìÓ¦Ö÷ÌåµÄ¸ñʽ²¢Ã»ÓÐÔڴ˹淶ÀﶨÒ壬µ«ÊÇ¿ÉÄÜ»áÔÚÒÔºóµÄHTTPÀﶨÒå¡£ÄÚÈÝÐÉÌ¿ÉÄܱ»ÓÃÓÚÑ¡ÔñºÏÊʵÄÏìÓ¦¸ñʽ¡£Èç¹ûûÓÐÏìÓ¦Ö÷Ìå°üº¬£¬ÏìÓ¦¾ÍÓ¦¸Ã°üº¬Ò»¸öֵΪ“0”µÄContent-LengthÍ·Óò¡£
Max-ForwardsÇëÇóÍ·Óò¿ÉÄܻᱻÓÃÓÚÕë¶ÔÇëÇóÁ´ÖÐÌØ¶¨µÄ´úÀí¡£µ±´úÀí½ÓÊÕµ½Ò»¸öOPTIONSÇëÇó£¬ÇÒ´ËÇëÇóµÄURIΪabsoluteURI£¬²¢ÇÒ´ËÇëÇóÊÇ¿ÉÒÔ±»×ª·¢µÄ£¬ÄÇô´úÀí±ØÐëÒª¼ì²âMax-ForwardsÍ·Óò¡£Èç¹ûMax-ForwardsÍ·ÓòµÄֵΪ“0”£¬ÄÇô´Ë´úÀí²»ÄÜת·¢´ËÏûÏ¢£»¶øÊÇ£¬´úÀíÓ¦¸ÃÒÔËü×Ô¼ºµÄͨÐÅÑ¡ÏîÏìÓ¦¡£Èç¹ûMax-ForwardsÍ·ÓòÊDZÈ0´óµÄÕûÊýÖµ£¬ÄÇô´úÀí±ØÐëµÝ¼õ´ËÖµµ±Ëüת·¢´ËÇëÇóʱ¡£Èç¹ûûÓÐMax-ForwardsÍ·Óò³öÏÖÔÚÇëÇóÀÄÇô´úÀíת·¢´ËÇëÇóʱ²»Äܰüº¬Max-ForwardsÍ·Óò¡£
9.3 GET
GET·½·¨Òâ˼ÊÇ»ñÈ¡±»ÇëÇóURI£¨Request-URI£©Ö¸¶¨µÄÐÅÏ¢£¨ÒÔʵÌåµÄ¸ñʽ£©¡£Èç¹ûÇëÇóURIÉæ¼°µ½Ò»¸öÊý¾ÝÉú³É¹ý³Ì£¬ÄÇôÕâ¸öÉú³ÉµÄÊý¾ÝÓ¦¸Ã±»×÷ΪʵÌåÔÚÏìÓ¦Öзµ»Ø£¬µ«Õâ²¢²»Êǹý³ÌµÄ×ÊÔ´Îı¾£¬³ý·Ç×ÊÔ´Îı¾Ç¡ºÃÊǹý³ÌµÄÊä³ö£¨Òë×¢£ºURIָʾµÄ×ÊÔ´ÊǶ¯Ì¬Éú³ÉµÄ£©¡£
Èç¹ûÇëÇóÏûÏ¢°üº¬ If-Modified-Since,£¬If-Unmodified-Since£¬If-Match,£¬If-None-Match,»òÕß If-RangeÍ·Óò,£¬GETµÄÓïÒ彫±ä³É“Ìõ¼þ£¨conditionall£© GET”¡£Ò»¸öÌõ¼þGET·½·¨»áÇëÇóÂú×ãÌõ¼þÍ·ÓòµÄʵÌå¡£Ìõ¼þGET·½·¨µÄÄ¿µÄÊÇΪÁ˼õÉÙ²»±ØÒªµÄÍøÂçʹÓã¬Õâͨ¹ýÀûÓûº´æµÄʵÌåµÄ¸üУ¬´Ó¶ø²»Óöà´ÎÇëÇó»ò´«Êä¿Í»§ÒѾӵÓеÄÊý¾Ý¡£.
Èç¹ûÇëÇó·½·¨°üº¬Ò»¸öRangeÍ·Óò£¬ÄÇôGET·½·¨¾Í±ä³É“²¿·ÖGet”·½·¨¡£Ò»¸ö²¿·ÖGET»áÇëÇóʵÌåµÄÒ»²¿·Ö£¬ÕâÔÚ14.35½ÚÀïÃèÊöÁË¡£ ²¿·ÖGET·½·¨µÄÄ¿µÄÊÇΪÁ˼õÉÙ²»±ØÒªµÄÍøÂçʹÓã¬Õâͨ¹ýÔÊÐí»ñÈ¡²¿·ÖʵÌ壬´Ó¶ø²»ÐèÒª´«Êä¿Í»§¶ËÒѾӵÓеÄÊý¾Ý¡£
GETÇëÇóµÄÏìÓ¦Êǿɻº´æµÄ£¨cacheable£©Èç¹û´ËÏìÓ¦Âú×ãµÚ13½ÚHTTP»º´æµÄÒªÇó¡£
¿´15.1.3½Ú¹ØÓÚGETÇëÇóÓÃÓÚ±íµ¥Ê±°²È«¿¼ÂÇ¡£
9.4 HEAD
HEAD·½·¨ºÍGET·½·¨Ò»Ö£¬³ýÁË·þÎñÆ÷²»ÄÜÔÚÏìÓ¦Àï·µ»ØÏûÏ¢Ö÷Ìå¡£HEADÇëÇóÏìÓ¦ÀïHTTPÍ·ÓòÀïµÄÔªÐÅÏ¢Ó¦¸ÃºÍGETÇëÇóÏìÓ¦ÀïµÄÔªÐÅÏ¢Ò»Ö¡£´Ë·½·¨±»ÓÃÀ´»ñÈ¡ÇëÇóʵÌåµÄÔªÐÅÏ¢¶ø²»ÐèÒª´«ÊäʵÌåÖ÷Ì壨entity-body£©¡£´Ë·½·¨¾³£±»ÓÃÀ´²âÊÔ³¬Îı¾Á´½ÓµÄÓÐЧÐÔ£¬¿É·ÃÎÊÐÔ£¬ºÍ×î½üµÄ¸Ä±ä¡£.
HEADÇëÇóµÄÏìÓ¦Êǿɻº´æµÄ£¬ÒòΪÏìÓ¦ÀïµÄÐÅÏ¢¿ÉÄܱ»ÓÃÓÚ¸üÐÂÒÔǰµÄÄǸö×ÊÔ´µÄ»º´æÊµÌå.¡£Èç¹û³öÏÖÒ»¸öеÄÓòÖµÖ¸Ã÷ÁË»º´æÊµÌåºÍµ±Ç°Ô´·þÎñÆ÷ÉÏʵÌåµÄ²»Í¬£¨¿ÉÄÜÒòΪContent-Length£¬Content-MD5£¬ETag»òLast-ModifiedÖµµÄ¸Ä±ä£©£¬ÄÇô»º´æ£¨cache£©±ØÐëÈÏΪ´Ë»º´æÏîÊǹýʱµÄ£¨stale£©¡£
9.5 POST
POST ·½·¨±»ÓÃÓÚÇëÇóÔ´·þÎñÆ÷½ÓÊÜÇëÇóÖеÄʵÌå×÷ΪÇëÇó×ÊÔ´µÄÒ»¸öеĴÓÊôÎï¡£POST±»Éè¼Æº¸ÇÏÂÃæµÄ¹¦ÄÜ¡£
-ÒÑ´æÔÚµÄ×ÊÔ´µÄ×¢ÊÍ£»
-·¢²¼ÏûÏ¢¸øÒ»¸ö²¼¸æ°å£¬ÐÂÎÅ×飬ÓʼþÁÐ±í£¬»òÕßÏàËÆµÄÎÄÕÂ×é¡£
-Ìṩһ¸öÊý¾Ý¿é£¬ÈçÌá½»Ò»¸ö±íµ¥¸øÒ»¸öÊý¾Ý´¦Àí¹ý³Ì¡£
-ͨ¹ý×·¼Ó²Ù×÷À´À©Õ¹Êý¾Ý¿â¡£
POST·½·¨µÄʵ¼Ê¹¦ÄÜÊÇÓÉ·þÎñÆ÷¾ö¶¨µÄ£¬²¢ÇÒ¾³£ÒÀÀµÓÚÇëÇóURI£¨Request-URI£©¡£POSTÌá½»µÄʵÌåÊÇÇëÇóURIµÄ´ÓÊôÎ¾ÍºÃÏñÒ»¸öÎļþ´ÓÊôÓÚÒ»¸öĿ¼£¬Ò»ÆªÐÂÎÅÎÄÕ´ÓÊôÓÚÒ»¸öÐÂÎÅ×飬»òÕßÒ»Ìõ¼Ç¼´ÓÊôÓÚÒ»¸öÊý¾Ý¿â¡£
POST·½·¨Ö´Ðе͝×÷¿ÉÄܲ»»á¶ÔÇëÇóURIËùÖ¸µÄ×ÊÔ´Æð×÷Óá£ÔÚÕâÖÖÇé¿öÏ£¬200£¨³É¹¦£©»òÕß204£¨Ã»ÓÐÄÚÈÝ£©½«ÊÇÊʺϵÄÏìӦ״̬£¬ÕâÒÀÀµÓÚÏìÓ¦ÊÇ·ñ°üº¬Ò»¸öÃèÊö½á¹ûµÄʵÌå¡£
Èç¹û×ÊÔ´±»Ô´·þÎñÆ÷´´½¨£¬ÏìÓ¦Ó¦¸ÃÊÇ201£¨Created£©²¢ÇÒ°üº¬Ò»¸öʵÌ壬´ËʵÌåÃèÊöÁËÇëÇóµÄ״̬²¢ÇÒ´ËʵÌåÒýÓÃÁËÒ»¸öÐÂ×ÊÔ´ºÍÒ»¸öLocationÍ·Óò£¨¼û14.30½Ú£©¡£
POST·½·¨µÄÏìÓ¦Êǿɻº´æµÄ¡£³ý·ÇÏìÓ¦ÀïÓÐCache-Control»òÕßExpiresÍ·ÓòָʾÆäÏìÓ¦²»¿É»º´æ¡£È»¶ø£¬303£¨¼ûÆäËû£©ÏìÓ¦Äܱ»ÀûÓÃÈ¥Ö¸µ¼Óû§´úÀí£¨agent£©È¥»ñµÃ¿É»º´æµÄÏìÓ¦¡£
POST ÇëÇó±ØÐë×ñÑ8.2½ÚÀïÖ¸Ã÷µÄÏûÏ¢´«ÊäÐèÇó¡£
²Î¼û15.1.3½Ú¹ØÓÚ°²È«ÐԵĿ¼ÂÇ.
9.6 PUT
PUT·½·¨ÇëÇó·þÎñÆ÷È¥°ÑÇëÇóÀïµÄʵÌå´æ´¢ÔÚÇëÇóURI£¨Request-URI£©±êʶÏ¡£Èç¹ûÇëÇóURI£¨Request-URI£©Ö¸¶¨µÄµÄ×ÊÔ´ÒѾÔÚÔ´·þÎñÆ÷ÉÏ´æÔÚ£¬ÄÇô´ËÇëÇóÀïµÄʵÌåÓ¦¸Ã±»µ±×÷ÊÇÔ´·þÎñÆ÷´ËURIËùÖ¸¶¨×ÊԴʵÌåµÄÐ޸İ汾¡£Èç¹ûÇëÇóURI£¨Request-URI£©Ö¸¶¨µÄ×ÊÔ´²»´æÔÚ£¬²¢ÇÒ´ËURI±»Óû§´úÀí£¨user agent£¬Òë×¢£ºÓû§´úÀí¿ÉÈÏΪÊǿͻ§ä¯ÀÀÆ÷£©¶¨ÒåΪһ¸öÐÂ×ÊÔ´£¬ÄÇôԴ·þÎñÆ÷¾ÍÓ¦¸Ã¸ù¾ÝÇëÇóÀïµÄʵÌå´´½¨Ò»¸ö´ËURIËù±êʶϵÄ×ÊÔ´¡£Èç¹ûÒ»¸öеÄ×ÊÔ´±»´´½¨ÁË£¬Ô´·þÎñÆ÷±ØÐëÄÜÏòÓû§´úÀí£¨user agent£© ·¢ËÍ201£¨ÒÑ´´½¨£©ÏìÓ¦¡£Èç¹ûÒÑ´æÔÚµÄ×ÊÔ´±»¸Ä±äÁË£¬ÄÇôԴ·þÎñÆ÷Ó¦¸Ã·¢ËÍ200£¨Ok£©»òÕß204£¨ÎÞÄÚÈÝ£©ÏìÓ¦¡£Èç¹û×ÊÔ´²»Äܸù¾ÝÇëÇóURI´´½¨»òÕ߸ı䣬һ¸öºÏÊʵĴíÎóÏìÓ¦Ó¦¸Ã¸ø³öÒÔ·´Ó¦ÎÊÌâµÄÐÔÖÊ¡£ÊµÌåµÄ½ÓÊÕÕß²»ÄܺöÂÔÈκÎËü²»Àí½âµÄContent-*£¨È磺Content-Range£©Í·Óò£¬²¢ÇÒ±ØÐë·µ»Ø501£¨Ã»Óб»ÊµÏÖ£©ÏìÓ¦¡£
Èç¹ûÇëÇó´©¹ýÒ»¸ö»º´æ£¨cache£©£¬²¢ÇÒ´ËÇëÇóURI£¨Request-URI£©Ö¸Ê¾ÁËÒ»¸ö»ò¶à¸öµ±Ç°»º´æµÄʵÌ壬ÄÇôÕâЩʵÌåÓ¦¸Ã±»¿´×÷ÊǾɵġ£PUT·½·¨µÄÏìÓ¦²»Ó¦¸Ã±»»º´æ¡£
POST·½·¨ºÍPUT·½·¨ÇëÇó×î¸ù±¾µÄÇø±ðÊÇÇëÇóURI£¨Request-URI£©µÄº¬Ò岻ͬ¡£POSTÇëÇóÀïµÄURIָʾһ¸öÄÜ´¦ÀíÇëÇóʵÌåµÄ×ÊÔ´£¨Òë×¢£º´Ë×ÊÔ´¿ÉÄÜÊÇÒ»¶Î³ÌÐò£¬ÈçjspÀïµÄservlet£© ¡£´Ë×ÊÔ´¿ÉÄÜÊÇÒ»¸öÊý¾Ý½ÓÊÕ¹ý³Ì£¬Ò»¸öÍø¹Ø£¨gateway£¬Òë×¢£ºÍø¹ØºÍ´úÀí·þÎñÆ÷µÄÇø±ðÊÇ£ºÍø¹Ø¿ÉÒÔ½øÐÐÐÒéת»»£¬¶ø´úÀí·þÎñÆ÷²»ÄÜ£¬Ö»ÊÇÆð´úÀíµÄ×÷Ó㬱ÈÈ绺´æ·þÎñÆ÷Æäʵ¾ÍÊÇÒ»¸ö´úÀí·þÎñÆ÷£©£¬»òÕßÒ»¸öµ¥¶À½ÓÊÕ×¢Ê͵ÄʵÌå¡£¶øPUT·½·¨ÇëÇóÀïÓÐÒ»¸öʵÌåÒ»Ò»Óû§´úÀíÖªµÀURIÒâָʲô£¬²¢ÇÒ·þÎñÆ÷²»ÄܰѴËÇëÇóÓ¦ÓÃÓÚÆäËûURIÖ¸¶¨µÄ×ÊÔ´¡£Èç¹û·þÎñÆ÷ÆÚÍûÇëÇó±»Ó¦ÓÃÓÚÒ»¸ö²»Í¬µÄURI£¬ÄÇôËü±ØÐë·¢ËÍ301£¨ÓÀ¾ÃÒÆ¶¯ÁË£©ÏìÓ¦£»Óû§´úÀí¿ÉÒÔ×Ô¼º¾ö¶¨ÊÇ·ñÖØ¶¨ÏòÇëÇó¡£
Ò»¸ö¶ÀÁ¢µÄ×ÊÔ´¿ÉÄܻᱻÐí¶à²»Í¬µÄURIÖ¸¶¨¡£È磺һƪÎÄÕ¿ÉÄÜ»áÓÐÒ»¸öURIÖ¸¶¨µ±Ç°°æ±¾£¬´ËURIÇø±ðÓÚÆäÎÄÕÂÆäËûÌØÊâ°æ±¾µÄURI¡£ÕâÖÖÇé¿öÏ£¬Ò»¸öͨÓÃURIµÄPUTÇëÇó¿ÉÄܻᵼÖÂÆä×ÊÔ´µÄÆäËûURI±»Ô´·þÎñÆ÷¶¨Òå¡£
HTTP/1.1ûÓж¨ÒåPUT·½·¨¶ÔÔ´·þÎñÆ÷µÄ״̬ӰÏì¡£
PUTÇëÇó±ØÐë×ñÑ8.2½ÚÖеÄÏûÏ¢´«ÊäÒªÇó¡£
³ý·ÇÌØ±ðÖ¸³ö£¬PUT·½·¨ÇëÇóÀïµÄʵÌåÍ·ÓòÓ¦¸Ã±»ÓÃÓÚ×ÊÔ´µÄ´´½¨»òÐ޸ġ£
9.7 DELETE£¨É¾³ý£©
DELETE·½·¨ÇëÇóÔ´·þÎñÆ÷ɾ³ýÇëÇóURIÖ¸¶¨µÄ×ÊÔ´¡£´Ë·½·¨¿ÉÄÜ»áÔÚÔ´·þÎñÆ÷Éϱ»ÈËΪµÄ¸ÉÉæ£¨»òÆäËû·½·¨£©¡£¿Í»§¶Ë²»Äܱ£Ö¤´Ë²Ù×÷Äܱ»Ö´ÐУ¬¼´Ê¹Ô´·þÎñÆ÷·µ»Ø³É¹¦×´Ì¬Â롣Ȼ¶ø£¬·þÎñÆ÷²»Ó¦¸ÃÖ¸Ã÷³É¹¦³ý·ÇËü´òËãɾ³ý×ÊÔ´»ò°Ñ´Ë×ÊÔ´ÒÆµ½Ò»¸ö²»¿É·ÃÎʵÄλÖá£
Èç¹ûÏìÓ¦Àï°üº¬ÃèÊö³É¹¦µÄʵÌ壬ÏìÓ¦Ó¦¸ÃÊÇ200£¨Ok£©£»Èç¹ûDELETE¶¯×÷ûÓÐͨ¹ý£¬Ó¦¸ÃÒÔ202£¨ÒѽÓÊÜ£©ÏìÓ¦£»Èç¹ûDELETE·½·¨ÇëÇóÒѾͨ¹ýÁË£¬µ«ÏìÓ¦²»°üº¬ÊµÌ壬ÄÇôӦ¸ÃÒÔ204£¨ÎÞÄÚÈÝ£©ÏìÓ¦¡£
Èç¹ûÇëÇó´©¹ý»º´æ£¬²¢ÇÒÇëÇóURI£¨Request-URI£©Ö¸¶¨Ò»¸ö»ò¶à¸ö»º´æµ±Ç°ÊµÌ壬ÄÇôÕâЩ»º´æÏîÓ¦¸Ã±»ÈÏΪÊǾɵġ£DELETE·½·¨µÄÏìÓ¦ÊDz»Äܱ»»º´æµÄ¡£
9.8 TRACE
TRACE·½·¨±»ÓÃÓÚ¼¤·¢Ò»¸öÔ¶³ÌµÄ£¬Ó¦ÓòãµÄÇëÇóÏûÏ¢»ØÂ·£¨Òë×¢£ºTRACE·½·¨Èÿͻ§¶Ë²âÊÔµ½·þÎñÆ÷µÄÍøÂçͨ·£¬»ØÂ·µÄÒâ˼Èç·¢ËÍÒ»¸öÇë·µ»ØÒ»¸öÏìÓ¦£¬Õâ¾ÍÊÇÒ»¸öÇëÇóÏìÓ¦»ØÂ·£¬£©¡£×îºóµÄ½ÓÊÕÕß»òÕßÊǽÓÊÕÇëÇóÀïMax-ForwardsÍ·ÓòֵΪ0Ô´·þÎñÆ÷»òÕßÊÇ´úÀí·þÎñÆ÷»òÕßÊÇÍø¹Ø¡£TRACEÇëÇó²»Äܰüº¬Ò»¸öʵÌå¡£
TRACE·½·¨ÔÊÐí¿Í»§¶ËÖªµÀÇëÇóÁ´µÄÁíÒ»¶Ë½ÓÊÕʲô£¬²¢ÇÒÀûÓÃÄÇЩÊý¾ÝÈ¥²âÊÔ»òÕï¶Ï¡£ViaÍ·ÓòÖµ£¨¼û14.45£©ÓÐÌØÊâµÄÓÃ;£¬ÒòΪËü¿ÉÒÔ×÷ΪÇëÇóÁ´µÄ¸ú×ÙÐÅÏ¢¡£ÀûÓÃMax-ForwardsÍ·ÓòÔÊÐí¿Í»§¶ËÏÞÖÆÇëÇóÁ´µÄ³¤¶ÈÈ¥²âÊÔÒ»´®´úÀí·þÎñÆ÷ÊÇ·ñÔÚÎÞÏÞ»ØÂ·Àïת·¢ÏûÏ¢¡£
Èç¹ûÇëÇóÊÇÓÐЧµÄ£¬ÏìÓ¦Ó¦¸ÃÔÚÏìӦʵÌåÖ÷ÌåÀï°üº¬Õû¸öÇëÇóÏûÏ¢£¬²¢ÇÒÏìÓ¦Ó¦¸Ã°üº¬Ò»¸öContent-TypeÍ·ÓòֵΪ”message/HTTP”µÄÍ·Óò¡£TRACE·½·¨µÄÏìÓ¦²»Äܲ»»º´æ¡£
9.9 CONNECT£¨Á¬½Ó£©
HTTP1.1ÐÒ鹿·¶±£ÁôÁËCONNECT·½·¨£¬´Ë·½·¨ÊÇΪÁËÄÜÓÃÓÚÄܶ¯Ì¬Çл»µ½ËíµÀµÄ´úÀí·þÎñÆ÷£¨proxy£¬Òë×¢£º¿ÉÒÔΪ´úÀí£¬Ò²¿ÉÒÔÊÇ´úÀí·þÎñÆ÷£©¡£
10.״̬Â붨Òå
ÿһ¸ö״̬ÂëÔÚÏÂÃæ¶¨Ò壬°üÀ¨´Ë״̬ÂëÒÀÀµÓÚ·½·¨µÄÃèÊöºÍÏìÓ¦ÀïÐèÒªµÄÈκÎÔªÐÅÏ¢µÄÃèÊö¡£
10.1 ֪ͨµÄ 1xx
ÕâÀà״̬´úÂëÖ¸Ã÷ÁËÒ»¸ö±¸ÓõÄÏìÓ¦£¬°üº¬Ò»¸öStatus-LineºÍ¿ÉÑ¡µÄÍ·Óò£¬²¢ÇÒÒ»Ò»¸ö¿ÕÐнáÊø£¨Òë×¢£º¿ÕÐоÍÊÇCRLF£©¡£Ã»ÓбØÐëµÄÍ·Óò¶ÔÕâÀà״̬Âë¡£ÒòΪHTTP/1.0ûÓж¨ÒåÈκÎ1xx״̬Â룬ËùÒÔ·þÎñÆ÷²»ÄÜ·¢ËÍÒ»¸ö1xxÏìÓ¦¸øÒ»¸öHTTP/1.1¿Í»§¶Ë£¬³ýÁËʵÑéÐÔµÄÄ¿µÄ¡£
¿Í»§¶Ë±ØÐëÄÜ×¼±¸È¥½ÓÊÜÒ»¸ö»ò¶à¸ö1xx״̬ÏìÓ¦ÓÅÏÈÓÚÒ»¸ö³£¹æÏìÓ¦£¬¼´Ê¹¿Í»§¶Ë²»ÆÚÍû100£¨¼ÌÐø£©×´Ì¬ÏìÓ¦¡£²»±»¿Í»§¶ËÆÚÍûµÄ1xx״̬ÏìÓ¦¿ÉÄܻᱻÓû§´úÀíºöÂÔ¡£
´úÀí·þÎñÆ÷±ØÐëÄÜת·¢1xxÏìÓ¦£¬³ý·Ç´úÀí·þÎñÆ÷ºÍËüµÄ¿Í»§¶ËµÄÁ¬½Ó¹Ø±ÕÁË£¬»òÕß³ý·Ç´úÀí·þÎñÆ÷×Ô¼ºÏìÓ¦ÇëÇó²¢²úÉú1xxÏìÓ¦¡££¨ÀýÈ磺Èç¹û´úÀí·þÎñÆ÷Ìí¼ÓÁË”Expect:100-continue”Í·Óòµ±×ª·¢ÇëÇóʱ£¬ÄÇôËü²»±Ø×ª·¢ÏàÓ¦µÄ100£¨¼ÌÐø£©ÏìÓ¦¡££©
10.1.1 100 ¼ÌÐø £¨Continue£©
100״̬ÏìÓ¦¸æË߿ͻ§¶ËÓ¦¸Ã¼ÌÐøÇëÇó¡£100ÏìÓ¦ÊǸöÖмäÏìÓ¦£¬Ëü±»ÓÃÓÚ֪ͨ¿Í»§¶ËÇëÇóµÄ³õʼ²¿·ÖÒѾ±»½ÓÊÕÁ˲¢ÇÒ´ËÇëÇó»¹Ã»Óб»·þÎñÆ÷¶ªÆú¡£¿Í»§¶ËÓ¦¸Ã¼ÌÐø·¢ËÍÇëÇóµÄÊ£Óಿ·Ö£¬»òÕßÈç¹û´ËÇëÇóÒѾÍê³ÉÁË£¬¿Í»§¶Ë»áºöÂÔ´Ë100ÏìÓ¦¡£·þÎñÆ÷±ØÐë·¢ËÍÒ»¸öfinalÏìÓ¦ÔÚÇëÇó½ÓÊÕºó¡£¼û8.2.3½Ú¹ØÓÚ´Ë״̬ÂëµÄÌÖÂÛºÍʹÓá£
10.1.2 101Çл»ÐÒé £¨Switching Protocols£©
·þÎñÆ÷Àí½âºÍÔ¸Òâ×ñѿͻ§¶ËÕâÑùµÄÇëÇ󣬴ËÇëÇóͨ¹ýUpgradeÏûϢͷÓò£¨¼û14.42½Ú£©Ö¸Ã÷ÔÚÁ¬½ÓÉÏÓ¦ÓòãÐÒéµÄ¸Ä±ä¡£ ·þÎñÆ÷½«»áÇл»µ½ÏìÓ¦ÀïUpgradeÍ·ÓòÀïÖ¸Ã÷µÄÐÒ飬Ȼºó½ô½ÓןúËæÒ»¸ö½áÊø´Ë101ÏìÓ¦µÄ¿ÕÐС£
Ö»Óе±ÐÒéÇл»Ê±ÄÜÊÜÒæ£¬ÐÒé²ÅÓ¦¸ÃÇл»¡£ÀýÈ磬µ±´«Êä×ÊԴʱ£¬Çл»µ½Ò»¸öеÄHTTP°æ±¾±È¾ÉµÄ°æ±¾ÒªºÃ£¬»òÕßÇл»µ½Ò»¸öʵʱµÄ£¬Í¬²½µÄÐÒé´øÀ´ºÃ´¦Ê±£¬ÎÒÃǶ¼Ó¦¸Ã¿¼ÂÇÇл»¡£
10.2 ³É¹¦ 2xx
ÕâÀà״̬ÂëÖ¸Ã÷¿Í»§¶ËµÄÇëÇòÒѾ±»·þÎñÆ÷³É¹¦µÄ½ÓÊÕÁË£¬Àí½âÁË£¬²¢ÇÒ½ÓÊÜÁË¡£
10.2.1 200 OK
´Ë״̬ÂëÖ¸Ã÷¿Í»§¶ËÇëÇóÒѾ³É¹¦ÁË¡£ÏìÓ¦·µ»ØµÄÐÅÏ¢ÒÀÀµÓÚÇëÇóÀïµÄ·½·¨£¬ÀýÈ磺
GET ÇëÇó×ÊÔ´µÄÏàÓ¦µÄʵÌåÒѾ°üº¬ÔÚÏìÓ¦Àï²¢·µ»Ø¸ø¿Í»§¶Ë¡£
HEAD ÏàÓ¦ÓÚÇëÇó×ÊԴʵÌåµÄʵÌåÍ·ÓòÒѾ±»°üº¬ÔÚÎÞÏûÏ¢Ö÷ÌåµÄÏìÓ¦Àï¡£
POST ÏìÓ¦ÀïÒѾ°üº¬Ò»¸öʵÌ壬´ËʵÌåÃèÊö»òÕß°üº¬´ËPOST¶¯×÷Ö´ÐеĽá¹û
TRACE ÏìÓ¦Àï°üº¬Ò»¸öʵÌ壬´ËʵÌå°üº¬Öն˶ԷþÎñÆ÷½ÓµÄÇëÇóÏûÏ¢¡£
10.2.2 201 ÒÑ´´½¨£¨Created£©
ÇëÇóÒѾ±»·þÎñÆ÷Âú×ãÁ˲¢ÇÒÒѾ²úÉúÁËÒ»¸öеÄ×ÊÔ´¡£Ð´´½¨µÄ×ÊÔ´µÄURIÔÚÏìÓ¦µÄʵÌåÀï·µ»Ø£¬µ«ÊÇ´Ë×ÊÔ´×îÈ·¶¨µÄURIÊÇÔÚLocationÍ·ÓòÀï¸ø³öµÄ¡£ÏìÓ¦Ó¦¸Ãº¬ÓÐһʵÌ壬´ËʵÌå°üº¬´Ë×ÊÔ´µÄÌØÐÔºÍλÖã¬Óû§»òÓû§´úÀíÄÜ´ÓÕâÐ©ÌØÐÔºÍλÖÃÀïÑ¡Ôñ×îºÏÊʵġ£ÊµÌå¸ñʽ±»Content-TypeÍ·ÓòÀïýÌåÀàÐÍÖ¸¶¨¡£Ô´·þÎñÆ÷±ØÐëÄÜÔÚ·µ»Ø201״̬Âë֮ǰ½¨Á¢×ÊÔ´¡£Èç¹û¶¯×÷£¨Òë×¢£ºÕâÀïÖ¸ÄÜ´´½¨×ÊÔ´µÄ·½·¨£¬ÈçPOST·½·¨£©²»Äܱ»Á¢¼´Ö´ÐУ¬ÄÇô·þÎñÆ÷Ó¦¸ÃÒÔ202£¨½ÓÊÜ£©ÏìÓ¦´úÌæ¡£
Ò»¸ö201ÏìÓ¦¿ÉÒÔ°üº¬Ò»¸öETagÏìӦͷÓò£¬´ËÍ·ÓòΪÇëÇóµÄ±äÁ¿£¨Òë×¢£º±äÁ¿µÄº¬Òå¼ûµÚ1.3½Ú“±äÁ¿”µÄ½âÊÍ£©Ö¸Ã÷µ±Ç°µÄʵÌå±êÇ©£¨entity tag£©Öµ£¬µ±×ÊÔ´±»´´½¨Ê±£¬¼û14.19½Ú¡£
10.2.3 202 ½ÓÊÜ£¨Accepted£©
ÇëÇóÒѾ±»½ÓÊÜÁË£¬µ«ÊÇ»¹Ã»ÓжԴËÇëÇó´¦ÀíÍê¡£ÇëÇó¿ÉÄÜ´¦ÀíÍêÒ²¿ÉÄÜûÓÐ×îÖÕ±»´¦ÀíÍ꣬ÒòΪµ±´¦Àí·¢ÉúµÄʱºò·þÎñÆ÷¿ÉÄܻᷢÏÖ´ËÇëÇó²»Äܱ»´¦Àí¡£
202ÏìÓ¦ÊÇ·ÇίÍеġ£ÕâÊÇΪÁËÔÊÐí·þÎñÆ÷ΪÆäËû´¦Àí£¨È磺ÿÌìÖ´ÐÐÒ»´ÎµÄ¹ý³Ì£©¶ø½ÓÊÜÒ»¸öÇëÇó´Ó¶ø²»ÐèÒªÓû§´úÀíºÍ·þÎñÆ÷Ö®¼äÔÚ´¦ÀíÍê³É֮ǰ±ØÐë½øÐг־ÃÁ¬½Ó¡£ÏìÓ¦ÀïµÄʵÌåÓ¦¸Ã°üº¬ÇëÇóµ±Ç°×´Ì¬µÄÉùÃ÷²¢ÇÒÓ¦¸Ã°üº¬Ò»¸ö״̬¼àÊÓÖ¸Õë»òһЩÓû§ÆÚÍûºÎʱÇëÇó±»Âú×ãµÄÆÀ¹À¡£
10.2.4 203 ·ÇȨÍþÐÅÏ¢£¨Non-Authoritative information£©
´Ë״̬ÂëÏìÓ¦Ö¸Ã÷ÏìÓ¦ÀïµÄʵÌåÍ·ÓòÀïµÄÔªÐÅÏ¢¶ÔÔ´·þÎñÆ÷À´ËµÊÇûÓÐÒâÒåµÄ£¬ÕâЩԪÐÅÏ¢ÊÇ´Ó¾Ö²¿µÄ»òµÚÈý·½µÄÏìÓ¦¸±±¾ÀïµÃµ½µÄ¡£ÕâЩԪÐÅÏ¢¿ÉÄÜÊÇÔ´·þÎñÆ÷°æ±¾µÄ×Ó¼¯»ò³¬¼¯¡£È磬°üº¬Ò»¸ö´æÔÚ±¾µØµÄ×ÊÔ´×¢ÊÍÐÅÏ¢¾Í¿ÉÒÔ²úÉúÒ»¸öÔ´·þÎñÆ÷ÄÜÀí½âµÄÔªÐÅÏ¢µÄ³¬¼¯¡£203ÏìӦ״̬ÂëµÄʹÓò¢²»ÊDZØÐëµÄ²¢ÇÒÖ»ÓÐÔÚÏìÓ¦ÊÇ·Ç200£¨Ok£©ÏìӦʱ²ÅÊǺÏÊʵġ£
10.2.5 204 ÎÞÄÚÈÝ £¨No Content£©
·þÎñÆ÷ÒѾÂú×ãÁËÇëÇ󵫲»ÐèÒª·µ»ØÒ»¸öʵÌ壬²¢ÇÒ¿ÉÄÜÖ»Ïë·µ»Ø¸üÐÂÁ˵ÄÔªÐÅÏ¢¡£204״̬ÏìÓ¦¿ÉÄܰüº¬Ò»¸öеĻò¸üÐÂÁ˵ģ¬ºÍÇëÇó±äÁ¿£¨Òë×¢£º±äÁ¿ÊÇ×ÊÔ´µÄÒ»ÖÖ±íÏÖÐÎʽ£¬ÕâºÍrest¼Ü¹¹ÀïµÄ¶¨ÒåÊÇÒ»ÑùµÄ£¬ËùÒÔÕâÀïÎÒÃÇ¿ÉÒÔÀí½âÇëÇó±äÁ¿ÊÇÇëÇó×ÊÔ´µÄÒ»ÖÖ±íÏÖÐÎʽ£©ÏàÁªÏµµÄÔªÐÅÏ¢£¨ÔªÐÅÏ¢ÒÔʵÌåÍ·ÓòµÄÐÎʽ±íʽ£©¡£
ÀûÓôË204ÏìÓ¦£¬¿Í»§¶ËÈç¹ûÊÇÒ»¸öÓû§´úÀí£¬Ëü¾Í¿ÉÒÔ²»ÓøıäÒýÆðÇëÇó·¢Ë͵ÄÎĵµÊÓͼ£¨Òë×¢£ºÈçһƪhtmlÎĵµÔÚä¯ÀÀÆ÷Àï³ÊÏÖµÄÑù×Ó£©¡£204״̬ÏìÓ¦Ö÷ÒªµÄÄ¿µÄÊÇÔÊÐíÊäÈ룬¶ø²»±ØÒýÆðÓû§´úÀíµ±Ç°ÎĵµÊÓͼµÄ¸Ä±ä£¬ËäȻһЩеĻò¸üÐÂÁ˵ÄÔªÐÅÏ¢¿ÉÄÜ»áÓ¦ÓÃÓÚÓû§´úÀíÊÓͼÀïµÄ´ËÎĵµ¡£
204ÏìÓ¦²»Äܰüº¬Ò»¸öÏûÏ¢Ö÷Ì壬²¢ÇÒÔÚÍ·Óòºó°üº¬Ò»¸ö¿ÕÐнáÊø¡£
10.2.6 205 ÖØÖÃÄÚÈÝ£¨Reset Content£©
205״̬ÏìÓ¦ÊÇ·þÎñÆ÷¸æËßÓû§´úÀíÓ¦¸ÃÖØÖÃÒýÆðÇëÇó±»·¢Ë͵ÄÎĵµÊÓͼ¡£´ËÏìÓ¦Ö÷ÒªµÄÄ¿µÄÊÇÇå¿ÕÎĵµÊÓͼ±íµ¥ÀïµÄÊäÈë¿òÒÔ±ãÓû§ÄÜÊäÈëÆäËüÐÅÏ¢¡£´ËÏìÓ¦²»Äܰüº¬Ò»¸öʵÌå¡£
10.2.7 206 ²¿·ÖÄÚÈÝ£¨Partial Content£©
·þÎñÆ÷ÒѾÍê³ÉÁ˿ͻ§¶Ë¶Ô×ÊÔ´µÄ²¿·ÖGETÇëÇó¡£ÇëÇó±ØÐë°üº¬Ò»¸öRangeÍ·Óò£¨14.35½Ú£©ÓÃÀ´Ö¸³öÏëÒªµÄ·¶Î§£¬²¢ÇÒÒ²ÓпÉÄܰüº¬Ò»¸öIf-RangeÍ·Óò£¨¼û14.27½Ú£©À´Ê¹ÇëÇó³ÉΪһ¸öÌõ¼þÇëÇó¡£
206״̬µÄÏìÓ¦±ØÐë°üº¬ÒÔϵÄÍ·Óò£º
- »òÕßContent-RangeÍ·Óò£¬´ËÍ·ÓòÖ¸Ã÷ÁËÏìÓ¦ÀïµÄ·¶Î§£»»òÕßÒ»¸öֵΪ”multipart/byteranges”µÄContent-TypeÍ·ÓòºÍΪÿ²¿·ÖÖ¸Ã÷·¶Î§µÄContent-RangeÍ·Óò¡£Èç¹ûÒ»¸öContent-LengthÍ·Óò³öÏÖÔÚÏìÓ¦ÀËüµÄÖµ±ØÐëÊÇʵ¼ÊµÄÏûÏ¢Ö÷ÌåµÄ×Ö½ÚÊý¡£
- DateÍ·Óò
- ETag ºÍ/»ò Content-LocationÍ·Óò£¬Èç¹ûÕâЩͷÓòÒѾÔÚÒÔǰÏàͬÇëÇóµÄ200ÏìÓ¦Àï·µ»Ø¹ý¡£
- Expire£¬Cache-Control£¬ºÍ/»òÕßVaryÍ·Óò£¬Èç¹ûÓòÖµÓëͬһ±äÁ¿ÒÔǰÏìÓ¦ÖеÄÓòÖµ²»Ò»Ñù¡£
Èç¹û206ÏìÓ¦ÊÇʹÓÃÁËÇ¿»º´æÑéÖ¤£¨¼û13.3.3£©µÄIf-RangeÇëÇóµÄ½á¹û£¬ÄÇô´ËÏìÓ¦²»Ó¦¸Ã°üº¬ÆäËûµÄʵÌåÍ·Óò¡£Èç¹ûÏìÓ¦ÊÇʹÓÃÁËÈõ»º´æÑéÖ¤µÄIf-RangeÇëÇóµÄ½á¹û£¬ÄÇôÏìÓ¦²»Äܰüº¬ÆäËûµÄʵÌåÍ·Óò£»ÕâÄÜ·ÀÖ¹³öÏÖÔÚ»º´æµÄʵÌåÖ÷ÌåºÍ¸üеÄÍ·ÓòÖ®¼äµÄ²»Ò»ÖÂÐÔ¡£ÆäËûµÄÇé¿öÏ£¬ÏìÓ¦±ØÐë°üº¬ËùÓеÄʵÌåÍ·Óò£¬ÕâЩͷÓò¿ÉÄÜÒѾÔÚÒÔǰµÄÏàͬÇëÇóµÄ200ÏìÓ¦Àï·µ»Ø¹ý¡£
»º´æ²»ÄܰÑ206ÏìÓ¦ºÍÒÔǰµÄ»º´æÄÚÈݽáºÏÈç¹ûETag»òLast-ModifiedÍ·Óò²¢²»Äܾ«È·Æ¥Å䣬¼û13.5.4¡£
Ò»¸ö²»ÄÜÖ§³ÖRangeºÍContent-RangeÍ·ÓòµÄ»º´æ²»ÄÜ»º´æ206£¨²¿·ÖµÄ£©ÏìÓ¦¡£
10.3 ÖØÐ¶¨Ïò 3xx.
ÕâÀà״̬ÂëÖ¸Ã÷Óû§´úÀíÐèÒª¸ü½øÒ»²½µÄ¶¯×÷È¥Íê³ÉÇëÇó¡£½øÒ»²½µÄ¶¯×÷¿ÉÄܱ»Óû§´úÀí×Ô¶¯Ö´Ðжø²»ÐèÒªÓû§µÄ½»»¥£¬²¢ÇÒ½øÒ»²½¶¯×÷ÇëÇóµÄ·½·¨±ØÐëΪGET»òHEAD¡£Ò»¸ö¿Í»§¶ËÓ¦¸Ã·¢ÏÖÎÞÏÞµÄÖØ¶¨Ïò»ØÂ·£¬ÒòΪ´Ë»ØÂ·ÄܲúÉúÍøÂçÓµ¼·¡£
×¢Ò⣺ÒÔǰ´Ë¹æ·¶°æ±¾½¨ÒéÒ»¸ö×î¶àÄÜÓÐÎå¸öÖØ¶¨Ïò¡£ÄÚÈÝ¿ª·¢ÕßÓ¦¸ÃÖªµÀ¿Í»§¶Ë¿ÉÄÜ´æÔÚÕâ¸öÏÞÖÆ¡£
10.3.1 300 ¶à¸öÑ¡Ôñ.£¨Multiple Choices£©
×ÊÔ´¶ÔÓ¦Óжà¸ö±íÏÖÐÎʽ£¬¿Í»§¶ËÇëÇó×ÊÔ´µÄ±íÏÖÐÎʽ¶ÔÓ¦ÓÚÆäÖеÄÒ»¸ö£¬Ã¿¸ö±íÏÖÐÎʽ¶¼ÓÐÒ»¸öÖ¸Ïò×Ô¼ºµÄλÖÃ(location)£¬²¢ÇÒ´úÀíÇý¶¯ÐÉÌ£¨agent-driven negotiation£©ÄÜÑ¡ÔñÒ»¸ö¸üÊʵıíÏÖÐÎʽ²¢Öض¨ÏòÇëÇóµ½ÄǸö±íÏÖÐÎʽµÄλÖá£
³ý·ÇÊÇHEADÇëÇ󣬷ñÔò300״̬ÏìÓ¦Ó¦¸Ã°üº¬Ò»¸öʵÌ壬´ËʵÌå°üº¬Ò»¸ö×ÊÔ´ÌØÐÔºÍλÖÃÁÐ±í£¬´ÓÕâ¸öÁбíÀïÓû§»òÓû§´úÀíÄÜÑ¡Ôñ×îºÏÊʵÄ×ÊÔ´µÄ±íÏÖÐÎʽ¡£ÊµÌå¸ñʽ±»Content-TypeÍ·ÓòÀïµÄýÌåÀàÐÍÖ¸¶¨¡£ÒÀÀµÓڴ˸ñʽºÍÓû§´úÀíµÄÄÜÁ¦£¬Óû§´úÀíÑ¡Ôñ×îºÏÊʵıíÏÖÐÎʽµÄÐÐΪ¿ÉÄܻᱻ×Ô¶¯Ö´ÐС£È»¶ø£¬´Ë¹æ·¶²¢Ã»Óж¨Òå×Ô¶¯Ö´ÐÐÐÐΪµÄ±ê×¼¡£
Èç¹û·þÎñÆ÷ÄÜÈ·¶¨¸üºÃµÄ±íÏÖÐÎʽ£¬ËüÓ¦¸ÃΪ´Ë±íÏÖÐÎʽÔÚLocationÍ·ÓòÀï°üº¬Ò»¸öÌØ¶¨µÄURIÀ´Ö¸Ã÷´Ë±íÏÖÐÎʽµÄλÖã»Óû§´úÀí¿ÉÄÜ»áÀûÓôËLocationÍ·Óò×Ô¶¯Öض¨Ïò¡£300״̬ÏìÓ¦Êǿɻº´æµÄ³ý·Ç±»ÌرðÖ¸Ã÷¡£
10.3.2 301 ÓÀ¾ÃÒÆ¶¯ £¨Moved Permanently£©
ÇëÇó×ÊÔ´±»¸³ÓÚÒ»¸öеÄÓÀ¾ÃµÄURI£¬²¢ÇÒÈκν«À´¶Ô´Ë×ÊÔ´µÄÒýÓö¼»áÀûÓôË301״̬ÏìÓ¦·µ»ØµÄURI¡£¾ßÓÐÁ´½Ó±à¼ÄÜÁ¦µÄ¿Í»§¶ËÓ¦¸ÃÄÜ×Ô¶¯°ÑÇëÇóURIµÄÒýÓÃתµ½µ½·þÎñÆ÷·µ»ØµÄеÄÒýÓÃÏ¡£´ËÏìÓ¦ÊÇÄÜ»º´æµÄ³ý·ÇÁíÍâÉùÃ÷¡£
еÄÓÀ¾ÃURIÓ¦¸ÃÔÚÏìÓ¦Öб»LocationÍ·Óò¸ø¶¨¡£³ý·ÇÇëÇó·½·¨ÊÇHEAD£¬·ñÔò´ËÏìÓ¦µÄÍ·ÓòÓ¦¸Ã°üº¬¶Ô´ËÐÂURI³¬Îı¾Á´½ÓµÄÒ»¸ö³¬Îı¾Ìáʾ¡£
Èç¹û¿Í»§¶Ë½ÓÊÕÁËÒ»¸ö301״̬ÏìÓ¦£¬´ËÏìÓ¦ÏàÓ¦µÄÇëÇóµÄ·½·¨²»ÊÇGET»òHEAD£¬ÄÇôÓû§´úÀí²»ÄÜ×Ô¶¯Öض¨ÏòÇëÇ󣬳ý·ÇËüÄܱ»Óû§È·ÈÏ£¬ÒòΪÕâ¿ÉÄÜ»á¸Ä±äÇëÇóÌá½»µÄÌõ¼þ¡£
×¢Ò⣺µ±¿Í»§¶ËÔÚ½ÓÊÕÁË301״̬ÂëÏìÓ¦ºó£¬»áÖØ¶¨ÏòPOSTÇëÇó£¬Ò»Ð©ÒѾ´æÔÚµÄHTTP/1.0Óû§´úÀí½«´íÎóµÄ°Ñ´ËÇëÇó±ä³ÉÒ»¸öGETÇëÇó¡£
10.3.3 302 ·¢ÏÖ(Found)
ÇëÇóµÄ×ÊÔ´·ÅÔÚÒ»¸ö²»Í¬µÄÔÝʱµÄURIÏ¡£ÒòÎªÖØ¶¨Ïò¿ÉÄܻῶû±»¸Ä±ä£¬¿Í»§¶ËÓ¦¸Ã¼ÌÐøÀûÓÃÇëÇóURI(Request-URI)Ϊ½«À´µÄÇëÇó¡£302ÏìÓ¦ÊÇÖ»ÓÐÔÚCache-Control»òExpiresÍ·ÓòÖ¸Ã÷µÄÇé¿öϲÅÄܱ»»º´æ¡£
ÁÙʱµÄURIÓ¦¸ÃÔÚLocationÍ·ÓòÀïÖ¸¶¨¡£³ý·ÇÇëÇó·½·¨ÊÇHEAD£¬·ñÔòÏìÓ¦µÄʵÌåÓ¦¸Ã°üº¬Ö¸Ïò´ËÐÂURIµÄ³¬Îı¾Á´½ÓµÄ¶Ì³¬³¬Îı¾Ìáʾ¡£
Èç¹û302״̬´úÂëÔÚÒ»¸ö²»ÊÇGETºÍHEAD·½·¨ÇëÇóµÄÏìÓ¦ÖУ¬Óû§´úÀí²»ÄÜ×Ô¶¯Öض¨ÏòÇëÇó³ý·ÇÓû§È·ÈÏ¿ÉÒÔ×Ô¶¯Öض¨Ïò£¬ÒòΪÕâÄܸıäÇëÇóÌá½»µÄµÄÌõ¼þ¡£
×¢Ò⣺RFC1945ºÍRFC2068Ö¸¶¨¿Í»§¶Ë²»ÄÜÔÚÖØ¶¨ÏòÇëÇóµÄʱºò¸Ä±äÇëÇó·½·¨¡£È»¶ø£¬´ó¶àÊýÓû§´úÀíʵÏÖ°Ñ302ÏìÓ¦¿´³ÉÊÇ303ÏìÓ¦£¬¸ù¾ÝLocationÍ·ÓòÖµµÄURIÖ´ÐÐGETÇëÇ󣬲»¹ÜÔʼµÄÇëÇó·½·¨¡£303ºÍ307״̬ÏìÓ¦µÄÄ¿µÄÊÇΪʹ·þÎñÆ÷Ã÷°×¿Í»§¶ËÆÚÍûÄÄÖÖÀàÐ͵ÄÖØ¶¨Ïò¡£
10.3.4 303 ¼ûÆäËû(See Other)
ÇëÇóµÄÏìÓ¦±»·ÅÔÚÒ»¸ö²»Í¬µÄURIÏ£¬²¢ÇÒÓ¦¸ÃÓÃGET·½·¨»ñµÃÄǸö×ÊÔ´¡£´Ë·½·¨µÄ´æÔÚÖ÷ÒªÊÇÔÊÐíPOSTÖ´Ðнű¾µÄÊä³öÖØ¶¨Ïòµ½Óû§Ñ¡ÔñµÄ×ÊÔ´¡£ÐµÄURI²¢²»ÊÇÔʼÇëÇó×ÊÔ´µÄ´úÌæÒýÓá£303ÏìÓ¦²»Äܱ»»º´æ£¬µ«ÊÇÔÙ´ÎÖØ¶¨ÏòÇëÇóµÄÏìÓ¦Ó¦¸Ã±»»º´æ¡£
²»Í¬µÄURIÓ¦¸ÃÔÚLocationÍ·ÓòÀïÖ¸¶¨¡£³ý·ÇÇëÇó·½·¨ÊÇHEAD£¬303ÏìÓ¦µÄʵÌåÓ¦¸Ã°üº¬Ò»¸ö¶ÌµÄÖ¸ÏòеÄURIÁ´½ÓµÄ³¬Îı¾Ìáʾ¡£
×¢Ò⣺Ðí¶àHTTP/1.1ÒÔǰ°æ±¾µÄÓû§´úÀí²»ÄÜÀí½â303״̬ÏìÓ¦¡£µ±ÕâЩ¿Í»§¶Ë±È½Ï¹Ø×¢ÓÚ»¥²Ù×÷ÐÔµÄʱºò£¬302״̬ÂëÓ¦¸Ã±»´úÌæÀûÓã¬ÒòΪ´ó¶àÓû§´úÀí¶Ô302ÏìÓ¦µÄÀí½â¾ÍÊÇ303ÏìÓ¦¡£
10.3.5 304 ûÓб»¸Ä±ä(Not Modified)
Èç¹û¿Í»§¶ËÒѾִÐÐÁËÌõ¼þGETÇëÇ󣬲¢ÇÒ·ÃÎÊ·þÎñÆ÷×ÊÔ´ÊÇÔÊÐíµÄ£¬µ«ÊÇ·þÎñÆ÷ÉϵÄÎĵµ²¢Ã»Óб»¸Ä±ä£¬ÄÇô·þÎñÆ÷Ó¦¸ÃÒÔ´Ë״̬ÂëÏìÓ¦¡£304ÏìÓ¦²»Äܰüº¬Ò»¸öÏûÏ¢Ö÷Ìå(message-body)£¬²¢ÇÒÔÚÍ·ÓòºóÃæ×ÜÊÇÒÔÒ»¸ö¿ÕÐнáÊø¡£
´ËÏìÓ¦±ØÐë°üº¬ÏÂÃæµÄÍ·Óò£º
-Date£¬³ý·Ç14.18.1Ö¸Ã÷µÄÄÇЩ¹æÔòÏÂDateÊÇ¿ÉÒÔÒÅ©µÄ¡£Èç¹ûʱÖÓ²»×¼È·µÄÔ´·þÎñÆ÷×ñÑÕâЩ¹æÔò£¬²¢ÇÒ´úÀí·þÎñÆ÷ºÍ¿Í»§¶ËÔÚ½ÓÊÕÁËÒ»¸öûÓÐDateÍ·ÓòµÄÏìÓ¦ºó¼ÓÉÏÁË×Ô¼ºµÄDate£¨ÕâÔÚRFC 2086ÀïÉùÃ÷ÁË£¬¼û14.19½Ú£©£¬»º´æ½«»áÕýÈ·µØ²Ù×÷¡£
-ETag ºÍ/»ò Content-Location£¬Èç¹ûÕâЩͷÓòÒѾÔÚÏàÇëÇóµÄ200ÏìÓ¦Àï³öÏÖ¹ý¡£
Expires£¬Cache-Control£¬ºÍ/»ò Vary£¬Èç¹ûÕâЩͷÓòµÄÓòÖµ¿ÉÄÜÓëÒÔǰÏàͬÇëÇóµÄÏìÓ¦µÄÓòÖµ²»Ò»Ö¡£
Èç¹ûÌõ¼þGETÓÃÇ¿»º´æÑéÖ¤£¨¼û13.3.3£©½Ú£¬ÄÇôÏìÓ¦²»Ó¦¸Ã°üº¬ÆäËûµÄʵÌåÍ·Óò¡£µ±Ìõ¼þGETÓÃÓÚÈõ»º´æÑé֤ʱ£¬ÄÇôÏìÓ¦²»Äܰüº¬ÆäËûµÄʵÌåÍ·Óò£»ÕâÄÜ·ÀÖ¹»º´æµÄʵÌåÖ÷ÌåºÍ¸üÐÂÁ˵ÄÍ·ÓòÖ®¼äµÄ²»Ò»ÖÂÐÔ¡£
Èç¹û304ÏìÓ¦Ö¸Ã÷ʵÌå²»Äܱ»»º´æ£¬ÄÇô´Ë»º´æ±ØÐëÒÅÆú´ËÏìÓ¦£¬²¢ÇÒÒÔÎÞÌõ¼þÇëÇóÖØ¸´ÇëÇó¡£
Èç¹û»º´æÀûÓÃÒ»¸ö304ÏìӦȥ¸üÐÂÒ»¸ö»º´æÏÄÇô´Ë»º´æ±ØÐë¸üлº´æÏîÀï¹ØÓÚÏìÓ¦ÀïеÄÓòÖµµÄÄÇЩÓòÖµ¡£
10.3.6 305 ʹÓôúÀí·þÎñÆ÷ £¨User Proxy£©
ÇëÇó×ÊÔ´±ØÐëÄÜͨ¹ý´úÀí·þÎñÆ÷·ÃÎÊ£¬´úÀí·þÎñÆ÷µÄµØÖ·ÔÚÏìÓ¦µÄLocationÍ·ÓòÀïÖ¸¶¨¡£LocationÍ·ÓòÖ¸¶¨ÁË´úÀí·þÎñÆ÷µÄURI¡£½ÓÊÕÕß±»ÆÚÍûͨ¹ý´úÀí·þÎñÆ÷ÖØ¸´´ËÇëÇó£¬305ÏìÓ¦±ØÐëÄܱ»Ô´·þÎñÆ÷²úÉú¡£
×¢Ò⣺RFC 2068²¢Ã»ÓÐ˵Ã÷305ÏìÓ¦µÄÄ¿µÄÊÇÖØ¶¨ÏòÒ»¸ö¶ÀÁ¢ÇëÇ󣬲¢ÇÒÖ»Äܱ»Ô´·þÎñÆ÷²úÉú¡£²»×¢ÒâÕâЩÏÞÖÆ»áÓÐÖØÒªµÄ°²È«ºó¹û¡£
10.3.7 306ûÓÐʹÓõģ¨unused£©
306״̬Âë±»ÓÃÓڴ˹淶ÒÔǰµÄ°æ±¾£¬ÊDz»ÔÙʹÓõÄÒâ˼£¬²¢ÇÒ´Ë״̬Âë±»±£Áô¡£
10.3.8 307ÁÙÊ±ÖØ·¢£¨Temporary Redirect£©
ÇëÇóµÄ×ÊÔ´ÁÙʱ´æÔÚÓÚÒ»¸ö²»Í¬µÄURIÏ¡£ÓÉÓÚÖØÐÂÏò¿ÉÄܻῶû¸Ä±ä£¬ËùÒÔ¿Í»§¶ËÓ¦¸Ã¼ÌÐøÀûÓôËÇëÇóURI£¨Request-URI£©Îª½«À´µÄÇëÇó¡£307ÏìÓ¦Ö»Óб»Cache-Control»òExpireÍ·ÓòÖ¸Ã÷ʱ²ÅÄܱ»»º´æ¡£
ÁÙʱURIÓ¦¸ÃÔÚÏìÓ¦µÄLocationÍ·ÓòÀï¸ø¶¨¡£³ý·ÇÇëÇó·½·¨ÊÇHEAD£¬·ñÔòÏìÓ¦µÄʵÌåÓ¦¸Ã°üº¬Ò»¸öÖ¸ÏòÐÂURIµÄ³¬Îı¾Á´½ÓÌáʾ£¬ÒòΪÐí¶àHTTP/1.1ÒÔǰµÄÓû§´úÀí²»ÄÜÀí½â307״̬ÏìÓ¦¡£Òò´Ë£¬´ËÌáʾӦ¸Ã°üº¬Óû§Öظ´ÔʼÇëÇóµ½ÐµÄURIµÄ±ØÐèµÄÐÅÏ¢¡£
Èç¹û307״̬ÏìÓ¦.¶ÔÓ¦µÄÇëÇóµÄ·½·¨²»ÊÇGET»òHEAD£¬ÄÇôÓû§´úÀí²»ÄÜ×Ô¶¯Öض¨Ïò´ËÇëÇó³ý·ÇËüÄܱ»Óû§È·ÈÏËü¿ÉÒÔÖØ¶¨Ïò£¬ÒòΪÕâ¿ÉÄܸıäÇëÇóÌá½»µÄÌõ¼þ¡£
10.4 ¿Í»§´íÎó 4xx
״̬Âë4xxÀàµÄÄ¿µÄÊÇΪÁËÖ¸Ã÷¿Í»§¶Ë³öÏÖ´íÎóµÄÇé¿ö¡£³ýÁ˵±ÏìÓ¦Ò»¸öHEADÇëÇ󣬷þÎñÆ÷Ó¦¸Ã°üº¬Ò»¸öʵÌ壬´ËʵÌå°üº¬Ò»¸ö´Ë´íÎóÇëÇóµÄ½âÊÍ¡£´Ë״̬Âë¶ÔËùÓÐÇëÇó·½·¨¶¼ÊÇÊʺϵġ£Óû§´úÀíÓ¦¸ÃչʾÈκÎÏìÓ¦Àï°üº¬µÄʵÌ司Óû§¡£
Èç¹û¿Í»§¶Ë·¢ËÍÊý¾Ý£¬ÀûÓÃTCPµÄ·þÎñÆ÷ʵÏÖÓ¦¸ÃСÐÄÈ·±£¿Í»§¶Ë»Ø¸´°üº¬ÔÚÏìÓ¦ÀïµÄ½ÓÊÕ°ü£¬ÕâÔÚ·þÎñÆ÷¹Ø±Õ´ËÊäÈëÁ¬½Óǰ¡£Èç¹ûÔڹرÕÁ¬½Óºó£¬¿Í»§¶Ë¼ÌÐø·¢ËÍÊý¾Ý¸ø·þÎñÆ÷£¬ÄÇô·þÎñÆ÷µÄTCPÕ»½«·¢ËÍÒ»¸öÖØÖðü¸ø¿Í»§¶Ë£¬
10.4.1 400 »µÇëÇó£¨Bad Request£©
ÇëÇó²»Äܱ»·þÎñÆ÷Àí½â£¬ÓÉÓÚ´íÎóµÄÓï·¨¡£¿Í»§¶Ë²»Ó¦¸ÃûÓиıäÇëÇó¶øÖظ´ÇëÇó¡£
10.4.2 401 δÊÚȨµÄ £¨Unauthorized£©
ÇëÇóÐèÒªÓû§ÊÚȨ¡£ÏìÓ¦±ØÐë°üº¬Ò»¸öWWW-AuthenticateÍ·Óò£¨¼û14.47£©£¬´ËÍ·Óò°üº¬Ò»¸öÊÊÓÃÓÚÇëÇó×ÊÔ´µÄÊÚȨµÄ¼¤·¢¡£¿Í»§¶Ë»áÒÔÒ»¸öAuthorizationÍ·ÓòÖØ¸´´ËÇëÇó¡£Èç¹ûÇëÇó°üº¬ÁËÒ»¸öÊÚȨ֤Ê飬Èç¹û·þÎñÆ÷ÒÔ401ÏìÓ¦£¬ËüÖ¸Ã÷ÕâЩ֤ÊéµÄÊÚȨ±»¾Ü¾ø¡£Èç¹û401ÏìÓ¦°üº¬Ò»¸öͬÑùµÄÊÚȨ¼¤·¢ºÍÒÔǰµÄÏìÓ¦Ò»Ñù£¬²¢ÇÒÓû§´úÀíÒѾ³¢ÊÔÖÁÉÙÊÚȨÁËÒ»´Î£¬ÄÇôÓû§Ó¦¸Ã±»³ÊÏÖ°üº¬ÔÚÏìÓ¦ÀïµÄʵÌ壬ÒòΪÕâЩʵÌå¿ÉÄܰüº¬Ïà¹ØµÄÕï¶ÏÐÅÏ¢¡£HTTPÊÚȨ·ÃÎÊÔÚ“HTTP Authentication£ºBasic and Digest Access Authentication”[43]Àï½âÊÍ¡£
10.4.3 402 ±ØÐèµÄÖ§¸¶ £¨Payment Required£©
´Ë״̬ÂëΪ½«À´µÄÓ¦Óñ£Áô¡£
10.4.4 403 ½ûÓà £¨Forbidden£©
·þÎñÆ÷Àí½â´ËÇëÇ󣬵«¾Ü¾øÂú×ã´ËÇëÇó¡£ÊÚȨÊÇûÓÐ×÷ÓõIJ¢ÇÒÇëÇó²»Äܱ»Öظ´¡£Èç¹ûÇëÇó·½·¨ÊÇHEAD²¢ÇÒ·þÎñÆ÷ÏëÈÿͻ§¶ËÖªµÀÇëÇóΪʲô²»Äܱ»Âú×㣬ÄÇô·þÎñÆ÷ÆðÓ¦¸ÃÔÚÏìӦʵÌåÀïÃèÊö´Ë¾Ü¾øµÄÔÒò¡£Èç¹û·þÎñÆ÷²»Ï£Íû¸æË߿ͻ§¶Ë¾Ü¾øµÄÔÒò£¬ÄÇô404״̬Âë(Not Found)ÏìÓ¦½«±»Ê¹Óá£
10.4.5 404 ûÓÐÕÒµ½£¨Not Found£©
·þÎñÆ÷²¢Ã»ÓÐÕÒµ½ÈκοÉÒÔÆ¥ÅäÇëÇóURIµÄ×ÊÔ´¡£Ìõ¼þÊdz¤ÆÚµÄ»¹ÊÇÔÝʱµÄҲûÓб»·þÎñÆ÷Ö¸Ã÷¡£410£¨Gone£©×´Ì¬ÏìÓ¦Ó¦¸Ã±»Ê¹Óã¬Èç¹û·þÎñÆ÷ÖªµÀÒ»¸ö¾ÉµÄ×ÊÔ´²»Äܳ¤ÆÚµÄʹÓò¢ÇÒûÓÐת·¢µØÖ·Ê±¡£ ´Ë״̬Âëͨ³£±ðÓÃÓÚµ±·þÎñÆ÷²»Ï£ÍûÖ¸³öΪʲôÇëÇ󱻾ܾø£¬»òÕßûÓÐÈÎºÎÆäËûÏìÓ¦ÊÇÊʺϵġ£
10.4.6 405 ²»±»ÔÊÐíµÄ·½·¨£¨Method Not Allowed£©
´Ë״̬Âë±íʾÇëÇóÐУ¨Request-Line£©ÀïµÄ·½·¨¶Ô´Ë×ÊÔ´À´Ëµ²»±»ÔÊÐí¡£ÏìÓ¦±ØÐë°üº¬Ò»¸öAllowÍ·Óò£¬´ËÍ·Óò°üº¬ÒÔһϵÁжԴËÇëÇó×ÊÔ´ÓÐЧµÄ·½·¨¡£
10.4.7 406 ²»½ÓÊÜµÄ £¨Not Acceptable£©
¸ù¾Ý¿Í»§¶ËÇëÇóµÄ½ÓÊÜÍ·Óò£¨Òë×¢£ºÈ磺Accept, Accept-Charset, Accept-Encoding, »òÕß Accept-Language£©£¬·þÎñÆ÷²»ÄܲúÉúÈÿͻ§¶Ë¿ÉÒÔ½ÓÊܵÄÏìÓ¦¡£
³ý·ÇÊÇHEADÇëÇó£¬ÏìÓ¦Ó¦¸Ã°üº¬Ò»¸öʵÌ壬´ËʵÌå°üº¬Ò»ÏµÁÐʵÌåµÄÌØÐÔºÍλÖã¬Í¨¹ýËûÃÇÓû§»òÓû§´úÀíÄÜÑ¡Ôñ×îºÏÊʵÄ×ÊÔ´µÄ±íÏÖÐÎʽ¡£ÊµÌå¸ñʽ±»Ã½ÌåÀàÐÍÖ¸¶¨¡£ÒÀÀµÓڴ˸ñʽºÍÓû§´úÀíµÄÄÜÁ¦£¬Ñ¡Ôñ×îºÏÊʵĻᱻ×Ô¶¯Ö´ÐС£È»¶ø£¬´Ë¹æ·¶²¢Ã»Óж¨Òå×Ô¶¯Ö´ÐÐÑ¡ÔñµÄ±ê×¼¡£
×¢Ò⣺HTTP/1.1·þÎñÆ÷±»ÔÊÐí·µ»ØÕâÑùµÄÏìÓ¦£¬´ËÏìÓ¦¸ù¾Ý½ÓÊÜÍ·Óò£¨Òë×¢£ºÈ磺Accept, Accept-Charset, Accept-Encoding, or Accept-Language£©ÊDz»¿É½ÓÊܵġ£ÔÚһЩÇé¿öÏ£¬Õâ¿ÉÄܸüÇãÏòÓÚ·¢ËÍÒ»¸ö406ÏìÓ¦¡£Óû§´úÀí±»¹ÄÀø¹Û²ìÏìÓ¦À´¾ö¶¨ÊÇ·ñ´ËÏìÓ¦ÊǿɽÓÊܵġ£
Èç¹ûÏìÓ¦ÊDz»¿É½ÓÊܵģ¬Óû§´úÀíÓ¦¸ÃÔÝʱֹͣ¸ü¶àµÄÊý¾ÝµÄ½ÓÊÕ²¢ÇÒѯÎÊÓû§È¥¾ö¶¨½øÒ»²½µÄ¶¯×÷¡£
10.4.8 407 ´úÀí·þÎñÆ÷ÊÚȨËùÐ裨Proxy Authentication Required£©
´Ë״̬ÂëºÍ401£¨Unauthorized£©ÏàËÆ£¬µ«ÊÇÖ¸Ã÷¿Í»§¶Ë±ØÐëÊ×ÏÈÀûÓôúÀí·þÎñÆ÷¶Ô×Ô¼ºÊÚȨ¡£´úÀí·þÎñÆ÷±ØÐë·µ»ØÒ»¸öProxy-AuthenticateÍ·Óò£¨¼û14.33½Ú£©£¬´ËÍ·Óò°üº¬Ò»¸öÊÊÓÃÓÚ´úÀí·þÎñÆ÷µÄÊÚȨ¼¤·¢¡£¿Í»§¶Ë¿ÉÄÜ»áÖØ¸´´ËÇëÇóÀûÓÃÒ»¸öºÏÊʵÄProxy-AutorizationÍ·Óò£¨¼û14.34½Ú£©¡£HTTP·ÃÎÊÊÚȨÔÚ“HTTP Authentication£»Basic and Digest Access Authentication”[43]¡£
10.4.9 408 ÇëÇó³¬Ê±£¨Request Timeout£©
¿Í»§¶ËÔÚ·þÎñÆ÷µÈ´ýµÄʱ¼äÀï²»ÄܲúÉúÇëÇ󡣿ͻ§¶Ë¶Ë¿ÉÄÜÔÚÒÔºó»áÖØ¸´´ËÇëÇó¡£
10.4.10 409 ³åÍ» £¨Confilict£©
ÇëÇó²»ÄÜÍê³ÉÓÉÓں͵±Ç°×ÊÔ´µÄ״̬³åÍ»¡£´Ë״̬ÂëÖ»±»ÔÊÐí³öÏÖÔÚÆÚÍûÓû§¿ÉÄÜÄܽâ¾ö´Ë³å²¢ÇÒÄÜÖØÐÂÌá½»´ËÇëÇóµÄÇé¿öÏ¡£ÏìÓ¦Ö÷ÌåÓ¦¸Ã°üº¬×ã¹»µÄΪÓû§ÈÏʶ´Ë×ÊÔ´³åÍ»µÄÐÅÏ¢¡£ÀíÏëµÄÇé¿öÏ£¬ÏìӦʵÌåÓ¦¸Ã°üº¬×㹻ΪÓû§»òÓû§´úÀí½â¾ö´ËÎÊÌâµÄÐÅÏ¢£»È»¶ø£¬ÕâÊDz»¿ÉÄܵIJ¢ÇÒÒ²ÊDz»ÐèÒªµÄ¡£
³åÍ»×î¿ÉÄÜ·¢ÉúÔÚÏìÓ¦PUTÇëÇóµÄʱºò¡£ÀýÈ磬Èç¹û°æ±¾±»Ê¹Óò¢ÇÒ±»Ìá½»µÄʵÌå°üº¬×ÊÔ´µÄ¸Ä±ä£¬ÕâЩ¸Ä±äºÍÒÔǰµÄÇëÇóµÄ¸Ä±äÏë³åÍ»£¬ÄÇô·þÎñÆ÷Ó¦¸ÃʹÓÃ409ÏìӦȥָÃ÷Ëü²»ÄÜÍê³É´ËÇëÇó¡£ÔÚÕâÖÖÇé¿öÏ£¬´ËÏìӦʵÌåÓ¦¸Ã°üº¬ÕâÁ½¸ö°æ±¾µÄ²»Í¬£¬ÏìÓ¦µÄ¸ñʽÔÚÏìÓ¦µÄContent-TypeÍ·ÓòÀïÖ¸¶¨¡£
10.4.11 410 ²»´æÔÚ£¨gone£©
ÇëÇó×ÊÔ´²»ÔÙ¿ÉÒÔÔÚ·þÎñÆ÷Éϵõ½²¢ÇÒÒ²²»ÖªµÀת·¢µØÖ·£¨Òë×¢£º×ªÏò´Ë×ÊÔ´µÄµØÖ·£©¡£´ËÌõ¼þÊdz¤ÆÚÌõ¼þ¡£¾ßÓÐÁ´½Ó±à¼ÄÜÁ¦µÄ¿Í»§¶ËÓ¦¸ÃÔÚÓû§È·ÈϺóɾ³ýÇëÇóURIµÄÒýÓá£Èç¹û·þÎñÆ÷²»ÖªµÀ»ò²»ÄÜ·½±ãÅж¨Ìõ¼þÊÇ·ñÊdz¤ÆÚµÄ£¬ÄÇô´Ë404£¨Ã»Óз¢ÏÖ£©×´Ì¬ÏìÓ¦½«±»´úÌæÀûÓá£ÏìÓ¦Êǿɻº´æµÄ£¬³ý·ÇÁíÍâÉêÃ÷¡£
410ÏìÓ¦Ö÷ÒªµÄÄ¿µÄÊÇ֪ͨ½ÓÊÕÕß×ÊÔ´²»Äܱ»µÃµ½²¢ÇÒ¸æËß½ÓÊÕÕßÖ¸ÏòÄǸö×ÊÔ´µÄÁ¬½ÓÒѾ±»Òƶ¯ÁË¡£ÕâÑùÒ»¸öʼþ¶Ôʱ¼äÒªÇó±È½ÏÑϸñµÄ·þÎñÀ´ËµÊÇ±È½ÏÆÕ±éµÄ£¬²¢ÇÒ¶ÔÊôÓÚ¸öÈ˵«ÒѾ²»ÔÚ·þÎñÆ÷Õ¾µã¹¤×÷µÄÈ˵Ä×ÊÔ´À´Ëµ£¬Õâ¸öʼþÀ´Ò²ÊÇ±È½ÏÆÕ±éµÄ¡£°ÑËùÓг¤ÆÚ²»Äܵõ½µÄ×ÊÔ´±ê¼Ç³É“gone”»ò±£³ÖÕâЩ±ê¼ÇÈÎÒⳤʱ¼ä£¬ÕâÊÇûÓбØÒªµÄ¡£
10.4.12 411 ±ØÐèµÄ³¤¶È £¨Length Required£©
´ËÏìÓ¦·þÎñÆ÷¾Ü¾ø½ÓÊÜûÓаüº¬Content-LengthÍ·ÓòµÄÇëÇ󡣿ͻ§¶Ë¿ÉÒÔÖØ¸´´ËÇëÇóÈç¹ûËüÌí¼ÓÁËÒ»¸öÓÐЧµÄContent-LengthÍ·Óò£¬´ËÍ·Óò°üº¬ÁËÇëÇóÏûÏ¢ÀïÏûÏ¢Ö÷ÌåµÄ³¤¶È¡£
10.4.13 412 ÏȾöÌõ¼þʧ°Ü £¨Precondition Failed£©
ÏȾöÌõ¼þÔÚÒ»¸ö»ò¶à¸öÇëÇóÍ·ÓòÀïÖ¸¶¨£¬412ÏìÓ¦ÊDZíÃ÷ÏȾöÌõ¼þÔÚ·þÎñÆ÷ÉϲâÊÔµÈÓÚfalse¡£´ËÏìÓ¦ÔÊÐí¿Í»§¶Ë°ÑÏȾöÌõ¼þ·Åµ½ÇëÇóÏûÏ¢µÄÔªÐÅÏ¢ÀͷÓòÊý¾Ý£©¡£
10.4.14 413 ÇëÇóʵÌåÌ«´ó
·þÎñÆ÷¾Ü¾ø´¦ÀíÇëÇóÒòΪÇëÇóʵÌåÌ«´óÒÔÖ´ﵽ·þÎñÆ÷²»Ô¸ÒâÈ¥´¦Àí¡£·þÎñÆ÷¿ÉÄܹرմËÁ¬½ÓÈ¥·ÀÖ¹¿Í»§¶Ë¼ÌÐøÇëÇó¡£
Èç¹ûÌõ¼þÊÇÔÝʱµÄ£¬·þÎñÆ÷Ó¦¸Ã°üº¬Ò»¸öRetry-AfterÍ·ÓòÓÃÀ´Ö¸Ã÷´ËÇëÇóÊÇÔÝʱµÄ²¢ÇÒʲôʱ¼äºó¿Í»§¶ËÓ¦¸ÃÖØÊÔ¡£
10.4.15 414 ÇëÇóURIÌ«³¤£¨Request-URI Too Long£©
·þÎñÆ÷¾Ü¾øÎªÇëÇó·þÎñÒòΪ´ËÇëÇóURIÌ«³¤ÁËÒÔÖÁÓÚ·þÎñÆ÷²»ÄÜÀí½â¡£ÕâÖÖÇé¿öÊǺÜÉٵģ¬Ö»·¢ÉúÔÚµ±¿Í»§¶Ë°ÑPOSTÇëÇ󲻺ÏÊʵØ×ª»»Îª´øÓдóÁ¿²éѯÐÅÏ¢µÄGETÇëÇóʱ¡£
10.4.16 415 ²»±»Ö§³ÖµÄýÌåÀàÐÍ£¨Unsupported Media Type£©
·þÎñÆ÷¾Ü¾øÎªÇëÇó·þÎñÒòΪÇëÇóµÄʵÌåµÄ¸ñʽ²»Äܱ»ÇëÇóµÄ×ÊÔ´Ö§³Ö¡£
10.4.17 416 ÇëÇó·¶Î§²»Âú×ã £¨Requested Range Not Satisfiable£©
·þÎñÆ÷·µ»ØÒ»¸ö´Ë״̬ÂëµÄÏìÓ¦£¬Èç¹ûÇëÇó°üº¬Ò»¸öRangeÇëÇóÍ·Óò£¨¼û14.35½Ú£©£¬²¢ÇÒ´ËÍ·ÓòÀïrange-specifierÖµ²»ºÍÑ¡Ôñ×ÊÔ´µÄµ±Ç°µÄextentÖµÖØµþ£¬²¢ÇÒÇëÇóûÓаüº¬Ò»¸öIf-RangeÇëÇóÍ·Óò¡££¨¶Ôbyte-rangesÀ´Ëµ£¬ÕâÒâζ×Åbyte-range-specµÄËùÓÐfirst-byte-pos
Öµ´óÓÚÑ¡ÔñµÄ×ÊÔ´µÄµ±Ç°³¤¶È¡£
µ±´Ë״̬ÂëÏìÓ¦ÔÚÒ»¸öbyte-rangeÇëÇóºó·µ»ØÊ±£¬´ËÏìÓ¦Ó¦¸Ã°üº¬Ò»¸öContent-RangeʵÌåÍ·ÓòÓÃÀ´Ö¸¶¨Ñ¡Ôñ×ÊÔ´µÄµ±Ç°³¤¶È£¨¼û14.16½Ú£©¡£´ËÏìÓ¦²»ÄÜÀûÓÃmultipart/byterangesýÌåÀàÐÍ¡£
10.4.18 417 ÆÚÍûʧ°Ü
ExpectÇëÇóÍ·ÓòÀïÖ¸¶¨µÄÏ£Íû²»Äܱ»·þÎñÆ÷Âú×㣬»òÕߣ¬Èç¹û·þÎñÆ÷ÊÇ´úÀí·þÎñÆ÷£¬·þÎñÆ÷ÓÐÓв»È·¶¨µÄÀíÓÉÈ·¶¨ÇëÇó²»Äܱ»ÏÂÒ»Õ¾µÄ·þÎñÆ÷Âú×ã¡£
10.5 ·þÎñÆ÷´íÎó 5xx £¨Server Error£©
ÕâÀà״̬ÂëÖ¸Ã÷·þÎñÆ÷´¦ÀíÇëÇóʱ²úÉú´íÎó»ò²»ÄÜ´¦ÀíÇëÇó¡£³ýÁËHEADÇëÇ󣬷þÎñÆ÷Ó¦¸Ã°üº¬Ò»¸öʵÌ壬´ËʵÌåÓÃÀ´½âÊÍ´íÎ󣬺ÍÊÇ·ñÊÇÔÝʱ»ò³¤ÆÚÌõ¼þ¡£Óû§´úÀíÓ¦¸ÃչʾʵÌ司Óû§¡£´ËÏìӦ״̬ÂëÄÜÓ¦ÓÃÓÚÈκÎÇëÇó·½·¨¡£
10.5.1 500 ·þÎñÆ÷ÄÚ²¿´íÎó £¨Internal Server Error£©
·þÎñÆ÷Óöµ½ÁËÒ»¸öÒâÍâÌõ¼þ£¬´ËÌõ¼þ·ÀÖ¹·þÎñÆ÷Âú×ã´ËÇëÇó¡£
10.5.2 501 ²»ÄÜʵÏÖ £¨Not Implemented£©
·þÎñÆ÷²»ÄÜÖ§³ÖÂú×ãÇëÇóµÄ¹¦ÄÜÐèÇó¡£Õâ¸öÏìÓ¦ÊǺܺÏÊʵĵ±·þÎñÆ÷²»ÄÜʶ±ðÇëÇó·½·¨Ê±²¢ÇÒ²»ÄÜÖ§³ÖËüÇëÇóµÄ×ÊÔ´µÄʱºò¡£
10.5.3 502 »µÍø¹Ø £¨Bad Gateway£©
´ËÏìӦ˵Ã÷£º·þÎñÆ÷£¬µ±×÷ÎªÍø¹Ø»ò´úÀíʱ£¬Ëü´ÓÉÏÐзþÎñÆ÷½ÓÊÕÁËÒ»¸öÎÞЧµÄÏìÓ¦²¢³¢ÊÔÂú×ã¿Í»§¶ËµÄÇëÇó¡£
10.5.4 503 ÄÑÒÔ»ñµÃµÄ·þÎñ.£¨Service Unavailable£©
·þÎñÆ÷²»ÄÜ´¦ÀíÇëÇóÓÉÓÚ·þÎñÆ÷ÔÝʱµÄ¹ýÔØ»òά»¤¡£Õâ¾ÍÊÇ˵ÕâÊÇÔÝʱÌõ¼þ£¬´ËÌõ¼þ½«»áÔÚһЩÑÓʱºó±»¼õÇá¡£Ñӳٵij¤¶È¿ÉÒÔÔÚRetry-AfterÍ·ÓòÀïÖ¸¶¨¡£Èç¹ûûÓÐRetry-After±»¸ø£¬ÄÇô¿Í»§¶ËÓ¦¸Ã´¦Àí´ËÏìÓ¦¾ÍÏñËü´¦Àí500ÏìÓ¦Ò»Ñù¡£
×¢Ò⣺503״̬ÂëµÄ´æÔÚ²¢²»ÊÇÒâÖ¸·þÎñÆ÷µ±²úÉú¹ýÔØÊ±±ØÐëÀûÓÃËü¡£Ò»Ð©·þÎñÆ÷¿ÉÄÜÏ£Íû¾Ü¾ø´ËÁ¬½Ó¡£
10.5.5 504 Íø¹Ø³¬Ê±£¨Gateway Timeout£©
·þÎñÆ÷£¬µ±×÷ÎªÍø¹Ø»ò´úÀí·þÎñÆ÷ʱ£¬²»ÄܽÓÊÕÒ»¸ö´Ó±»URIÖ¸¶¨µÄÉÏÐзþÎñÆ÷µÄÏìÓ¦£¨ÀýÈ磺HTTP£¬HTTP://www.cnpaf.net/class/ftp' target='_blank'>FTP£¬LDAP·þÎñÆ÷£©»òÕßËüΪÍê³ÉÇëÇó¶øÐèÒª·ÃÎʵÄһЩÆäËûµÄ¸¨ÖúÐÔ·þÎñÆ÷£¨ÀýÈ磺HTTP://www.cnpaf.net/class/dns' target='_blank'>DNS·þÎñÆ÷£©¡£
×¢Ò⣺һЩ²¿ÊðµÄ´úÀí·þÎñÆ÷½«»á·µ»Ø400»ò500ÏìÓ¦µ±HTTP://www.cnpaf.net/class/dns' target='_blank'>DNS²éÕÒ³¬Ê±¡£
10.5.6 505 HTTP°æ±¾²»Ö§³Ö £¨HTTP version Not Supported£©
·þÎñÆ÷²»ÄÜÖ§³Ö£¬»ò¾Ü¾øÖ§³Ö£¬´ËHTTPÐÒé°æ±¾ÏûÏ¢¡£505ÏìÓ¦Ö¸Ã÷·þÎñÆ÷²»ÄÜ»ò²»Ô¸ÒâÍê³ÉÕâÑùµÄÇëÇó£¬ÕâÔÚ3.1ÖÐÃèÊöÁË¡£´ËÏìÓ¦Ó¦¸Ã°üº¬Ò»¸öʵÌ壬´ËʵÌåÃèÊöÁËΪʲô´ËÐÒé°æ±¾²»±»Ö§³ÖºÍÆäËûµÄÄܱ»·þÎñÆ÷Ö§³ÖµÄÐÒé°æ±¾¡£
11.Èë¿ÚÑéÖ¤£¨Access Authentication£©
HTTPÌṩһЩ¿ÉÑ¡µÄÏìÓ¦ÊÚȨ¼¤·¢»úÖÆ£¬ÕâЩ»úÖÆÄܱ»ÓÃÓÚ·þÎñÆ÷¼¤·¢¿Í»§¶ËÇëÇó²¢ÇÒʹ¿Í»§¶ËÊÚȨ¡£³£Ó÷ÃÎÊÊÚȨ¿ò¼Ü£¬»¹ÓГbasic”ºÍ“digest”ÊÚȨ¹æ·¶£¬¶¼ÔÚ“HTTP Authentication£ºbasic and Digest Access Authentication”[43]¹æ·¶ÀïÖ¸¶¨¡£HTTP/1.1¹æ·¶²ÉÓÃÁË“¼¤·¢£¨chanllenge£©”ºÍ“Ö¤Ê飨credentials£©”µÄ¶¨Òå¡£
12.ÄÚÈÝÐÉÌ £¨Content Negotiation£©
´ó¶àÊýÏìÓ¦°üº¬Ò»¸öʵÌ壬´ËʵÌå°üº¬ÈËÀàÓû§ÄÜÀí½âµÄÐÅÏ¢¡£Í¨³££¬Ï£ÍûÌṩ¸øÓû§ÏàÓ¦ÓÚÇëÇó×îÈÝÒ׵õ½µÄʵÌå¡£¶Ô·þÎñÆ÷ºÍ»º´æÀ´Ëµ£¬²»ÐÒµÄÊÇ£¬²¢²»ÊÇËùÓеÄÓû§¶¼¶ÔÕâ¸ö×îÈÝÒ׵õ½µÄʵÌåÓÐϲºÃ£¬²¢ÇÒ²¢²»ÊÇËùÓеÄÓû§´úÀí£¨Èçwebä¯ÀÀÆ÷£©¶¼ÄÜÒ»ÖµijÊÏÖÕâЩʵÌå¡£ËùÒÔ£¬HTTPÌṩÁËһЩ“ÄÚÈÝÐÉÌ”»úÖÆ — µ±Óжà¸ö¿ÉµÃµÄ±íÏÖÐÎʽµÄʱºò£¬¶ÔÌØ¶¨µÄÏìӦѡÔñ×îºÃµÄ±íÏÖÐÎʽµÄ´¦Àí¹ý³Ì¡£
×¢Ò⣺ûÓгÆ×ö“¸ñʽÐÉÌ”£¨Òë×¢£º“¸ñʽ”Ö¸µÄÊǓýÌåÀàÐÍ”£©µÄ£¬ÒòΪ¿ÉÌæ»»µÄ±íÏÖÐÎʽ¿ÉÄÜ»áͬÔÀ´µÄÓÐÏàͬµÄýÌåÀàÐÍ£¬Ö»ÊÇÀûÓÃÁË´ËýÌåÀàÐͲ»Í¬µÄÐÔÖÊ£¬ÀýÈçÒ»ÖÖ²»Í¬µÄÓïÑÔ¡£
Èκΰüº¬Ò»¸öʵÌåÖ÷ÌåµÄÏìÓ¦°üÀ¨´íÎóÏìÓ¦¶¼¿ÉÄÜ»áÊÜÐÉ̵ÄÖ§Åä¡£
ÓÐÁ½ÖÖÀàÐ͵ÄÄÚÈÝÐÉÌÔÚHTTPÖУº·þÎñÆ÷Çý¶¯ÐÉ̺ʹúÀíÇý¶¯ÐÉÌ¡£ÕâÁ½ÖÖÀàÐ͵ÄÐÉ̾ßÓÐÕý½»ÐÔ²¢ÇÒÄܱ»µ¥¶ÀʹÓûòÁªºÏʹÓá£Ò»¸öÁªºÏʹÓ÷½·¨µÄÐÉ̻ᱻ½Ð×ö͸Ã÷ÐÉÌ£¬µ±»º´æÀûÓôúÀíÇý¶¯ÐÉ̵ÄÐÅÏ¢µÄʱºò£¬´Ë´úÀíÇý¶¯ÐÉ̵ÄÐÅÏ¢±»ÎªºóÐøÇëÇóÌṩ·þÎñÆ÷Çý¶¯ÐÉ̵ÄÔ´·þÎñÆ÷Ìṩ¡£
12.1 ·þÎñÆ÷Çý¶¯ÐÉÌ£¨Server-driven Negotiation£©
Èç¹ûÏìÓ¦µÄ×îºÃµÄ±íÏÖÐÎʽµÄÑ¡ÔñÊÇͨ¹ý·þÎñÆ÷ÉϵÄËã·¨À´ÊµÏÖ£¬ÄÇôÕâÖÖ·½Ê½µÄÐÉ̳Æ×ö·þÎñÆ÷Çý¶¯ÐÉÌ¡£Ñ¡ÔñÊÇ»ùÓÚÏìÓ¦¿ÉµÃµÄ±íÏÖÐÎʽ£¨¸ù¾Ý²»Í¬µÄά¶È£¬ÏìÓ¦»á²»Í¬£»ÀýÈ磬ÓïÑÔ£¬ÄÚÈݱàÂ룬µÈµÈ£©ºÍÇëÇóÏûÏ¢ÀïÌØ¶¨µÄÍ·Óò»ò¹ØÓÚÇëÇóµÄÆäËûÐÅÏ¢£¨Èç£ºÍøÂç¿Í»§¶ËµÄµØÖ·£©¡£
·þÎñÆ÷Çý¶¯ÐÉÌÊÇÓÐÓŵãµÄ£¬µ±´Ó¿ÉÐеıíÏÖÐÎʽÀï½øÐÐÑ¡ÔñµÄËã·¨¶ÔÓû§´úÀí½øÐÐÃèÊöÊDZȽÏÀ§ÄѵÄʱºò£¨Òë×¢£º´úÀíÇý¶¯ÐÉÌ£©£¬»òÕßµ±·þÎñÆ÷ÆÚÍû·¢ËÍ“×îºÃµÄ²Â²â”¸ø¿Í»§¶Ë¶øÖ»Í¨¹ýÒ»¸öÏìÓ¦£¨ÒÔ±ÜÃâºóÐøÇëÇóµÄ»ØÂ·£¨Ò»¸öÇëÇó»á·µ»ØÒ»¸öÏìÓ¦£©ÑÓ³ÙÈç¹û´Ë“×îºÃµÄ²Â²â“¶ÔÓû§ÊʺϵÄʱºò£©µÄʱºò¡£ÎªÁ˸ÄÉÆ·þÎñÆ÷µÄ²Â²â£¬Óû§´úÀíÓ¦¸Ã°üº¬ÇëÇóÍ·Óò£¨Accept£¬Accept-Language£¬Accept-Encoding£¬µÈµÈ£©£¬ÕâЩͷÓòÄÜÃèÊöËü¶ÔÏìÓ¦µÄϲºÃ¡£
·þÎñÇý¶¯ÐÉÌÓÐÈçÏÂȱµã£º
1. ¶Ô·þÎñÆ÷²»¿ÉÄÜÈ·Çеľö¶¨¶ÔÓû§À´ËµÊ²Ã´ÊÇ×îºÃµÄ£¬ÒòΪÄÇÐèÒª¶ÔÓû§´úÀíºÍÓû§¶Ô´ËÏìӦĿµÄµÄÈ«ÃæÀí½â£¨È磺Óû§µ½µ×Ïë°ÑÏìӦչʾµ½ÆÁÄ»»¹ÊÇ´òÓ¡µ½Ö½ÉÏ£¿£©¡£
2. ʹÓû§´úÀíÃèÊöÇëÇóÀïµÄÄÜÁ¦ÊǷdz£ÎÞЧµÄ£¨¼ÙÉèÖ»ÓÐÏìÓ¦µÄһС²¿·ÖÓжà¸ö±íÏÖÐÎʽ£©»¹ÓлáÇÖ·¸Óû§µÄÒþ˽¡£
3. ʹԴ·þÎñÆ÷µÄʵÏÖ±äµÃ¸´ÔÓ£¬Ò²¶ÔΪÇëÇó²úÉúÏìÓ¦µÄË㷨ʵÏÖ±äµÃ¸´ÔÓ¡£
4. ¿ÉÄÜ»áÏÞÖÆ¹«Óлº´æ£¨public cache£©Îª¶à¸ö¿Í»§ÇëÇóÀûÓÃÏàͬÏìÓ¦µÄÄÜÁ¦
HTTP/1.1°üº¬ÏÂÃæµÄÇëÇóÍ·ÓòÀ´Ê¹·þÎñÆ÷Çý¶¯ÐÉÌÆô¶¯£¬ÕâЩÇëÇóÍ·ÓòÃèÊöÁËÓû§´úÀíµÄÄÜÁ¦ºÍÓû§Ï²ºÃ£ºAccept£¨14.1½Ú£©£¬Accept-Charset£¨14.2½Ú£©£¬Accept-Encoding£¨14.3½Ú£©£¬Accept-Language£¨14.4½Ú£©£¬ºÍUser-Agent£¨14.43½Ú£©¡£È»¶ø£¬Ò»Ð©Ô´·þÎñÆ÷²¢²»Ö»¾ÖÏÞÓÚÕâЩά¶È£¬ÕâЩ·þÎñÆ÷ÄÜ»ùÓÚÇëÇóµÄÈκη½ÃæÀ´ÈÃÏìÓ¦²»Í¬£¬ÕâЩ·½Ãæ°üÀ¨ÇëÇóÍ·ÓòÖ®ÍâµÄÐÅÏ¢»òÔڴ˹淶ÀïûÓж¨ÒåµÄÀ©Õ¹Í·Óò¡£
VaryÍ·ÓòÄܱ»ÓÃÀ´±í´ï·þÎñÆ÷Ñ¡Ôñ±íÏÖÐÎʽ£¨representation£©ÀûÓõIJÎÊý£¬±íÏÖÐÎʽÊÜ·þÎñÆ÷Çý¶¯ÐÉ̵ÄÖ§Åä¡£¼û14.44½ÚÃèÊöÁËVaryÍ·ÓòÈçºÎ±»·þÎñÆ÷µÄʹÓã¬13.6½ÚÃèÊöÁËVaryÍ·Óò±»»º´æµÄʹÓá£
12.2 ´úÀíÇý¶¯ÐÉÌ £¨Agent-driven Negotiation£©
¶Ô´úÀíÇý¶¯ÐÉÌÀ´Ëµ£¬ÏìÓ¦µÄ×îºÃ±íÏÖÐÎʽµÄÑ¡Ôñ±»Óû§´úÀíÖ´ÐУ¬ÕâÔÚ½ÓÊÕµ½Ô´·þÎñÆ÷Ò»¸ö³õʼµÄÏìÓ¦ºó¡£Ñ¡ÔñÊÇ»ùÓÚÏìÓ¦µÄһϵÁпɵõıíÏÖÐÎʽ£¬ÕâЩ±íÏÖÐÎʽ±»°üº¬ÔÚ³õʼÏìÓ¦µÄÍ·Óò»ò³õʼÏìÓ¦µÄʵÌåÖ÷Ì壨entity-body£©Àÿ¸ö±íÏÖÐÎʽ±»Ò»¸öÊôÓÚ×Ô¼ºµÄURIÖ¸¶¨¡£´ÓÕâЩ±íÏÖÐÎʽÖÐÑ¡Ôñ¿ÉÄܱ»×Ô¶¯Ö´ÐУ¨Èç¹ûÓû§´úÀíÓÐÄÜÁ¦ÕâÑù×ö£©»òÕß±»Óû§´Ó³¬Îı¾Á¬½Ó²Ëµ¥ÖÐÊÖ¹¤Ñ¡Ôñ¡£
´úÀíÇý¶¯ÐÉÌÊÇÓÐÓŵãµÄ£¬µ±ÏìÓ¦¿ÉÄÜ»á¸ù¾ÝÒ»°ãÓÃ;µÄά¶È£¨È磺ÀàÐÍ£¬ÓïÒ壬±àÂ룩¶ø²»Í¬µÄʱºò£¬µ±Ô´·þÎñÆ÷²»ÄÜͨ¹ý²é¿´ÇëÇó¶øÅж¨Óû§´úÀíÄÜÁ¦µÄʱºò£¬µ±¹²Óлº´æ£¨public cache£©±»ÓÃÀ´·ÖÅÉ·þÎñÆ÷µÄ³ÐÔØºÍ¼õÉÙÍøÂçʹÓõÄʱºò¡£
´úÀíÇý¶¯ÐÉÌҲͬÑù´æÔÚÐèÒªµÚ¶þ´ÎÇëÇó¶ø»ñµÃ×îºÃ±íÏÖÐÎʽµÄȱµã¡£µÚ¶þ´ÎÇëÇóÖ»Óе±»º´æ±»Ê¹ÓÃʱ²ÅÊÇÓÐЧÂʵġ£ÁíÍ⣬´Ë¹æ·¶Ã»Óж¨ÒåÓû§´úÀí×Ô¶¯Ñ¡Ôñ±íÏÖÐÎʽµÄ»úÖÆ£¬ËùÒÔ²»ÄÜ·ÀÖ¹ÈκÎÕâÑùµÄ»úÖÆ±»ÓÃÓÚHTTP/1.1
HTTP/1.1¶¨ÒåÁË300£¨¶à¸öÑ¡Ôñ£©ºÍ406£¨²»½ÓÊܵģ©×´Ì¬ÏìÓ¦£¬µ±Ê¹ÓôúÀíÇý¶¯ÐÉÌʱ·þÎñÆ÷²»ÄÜ»ò²»Ô¸ÒâÀûÓ÷þÎñÆ÷Çý¶¯ÐÉÌÀ´Ìṩһ¸ö²»Í¬µÄÏìÓ¦µÄÊÇʱºò¡£
12.3 ͸Ã÷ÐÉÌ£¨Transparent Negotiation£©
͸Ã÷ÐÉÌÊÇ·þÎñÆ÷Çý¶¯ÐÉ̺ʹúÀíÇý¶¯ÐÉ̵ĽáºÏÌå¡£µ±Ò»¸ö»º´æ±»ÌṩÁ˹¹³ÉÏìÓ¦µÄһϵÁпɵõıíÏÖÐÎʽ£¨¾ÍÏñÔÚ´úÀíÇý¶¯ÐÉÌÀïµÄÏìÓ¦Ò»Ñù£©²¢ÇÒά¶ÈµÄ²îÒìÄÜÍêÈ«±»»º´æÀí½â£¬ÄÇô´Ë»º´æ±äµÃÓÐÄÜÁ¦´ú±íÔ´·þÎñÆ÷ΪÄǸö×ÊÔ´µÄºóÐøÇëÇóÈ¥Ö´ÐзþÎñÆ÷Çý¶¯ÐÉÌ¡£
͸Ã÷ÐÉ̵ÄÓŵãÔÚÓÚËüÄÜ·Ö·¢Ô´·þÎñÆ÷µÄÐÉ̹¤×÷²¢ÇÒÄÜÒÆÈ¥´úÀíÇý¶¯ÐÉ̵ĵڶþ´ÎÇëÇóµÄÑÓ³Ù£¬ÒòΪ»º´æÄÜÕýÈ·µÄ²Â²âµ½ºÏÊʵÄÏìÓ¦¡£
´Ë¹æ·¶Ã»Óж¨Òå͸Ã÷ÐÉ̵ĻúÖÆ£¬ËùÒÔ£¬Ëü²»ÄÜ·ÀÖ¹ÈκÎÕâÑùµÄ»úÖÆ±»ÓÃÓÚHTTP/1.1¡£
13 HTTPÖеĻº´æ
HTTPµäÐÍÓ¦ÓÃÓÚÄÜͨ¹ý²ÉÓûº´æ¼¼Êõ¶øÌá¸ßÐÔÄܵķֲ¼Ê½ÐÅϢϵͳ¡£HTTP/1.1ÐÒé°üÀ¨µÄÐí¶àʹ»º´æ¾¡¿ÉÄܵŤ×÷µÄÔªËØ¡£ÒòΪÕâÐ©ÔªËØÓëÐÒéµÄÆäËû·½ÃæÓÐ×Åǧ˿ÍòÂÆµÄÁªÏµ£¬¶øÇÒËûÃÇÏ໥×÷Óá¢Ó°Ï죬Òò´ËÓбØÒªµ¥¶ÀµÄÀ´½éÉÜ»ù±¾µÄ»º´æÉè¼Æ¡£
Èç¹û»º´æ²»ÄܸÄÉÆÐÔÄÜ£¬Ëû½«Ò»ÎÞÓô¦¡£HTTP/1.1Öлº´æµÄÄ¿µÄÊÇΪÁËÔںܶàÇé¿öϼõÉÙ·¢ËÍÇëÇó£¬Í¬Ê±ÔÚÐí¶àÇé¿öÏ¿ÉÒÔ²»ÐèÒª·¢ËÍÍêÕûÏìÓ¦¡£Ç°Õß¼õÉÙÁËÍøÂç»ØÂ·£¨Òë×¢£ºÒ»¸öÇëÇó»á·µ»ØÒ»¸öÏìÓ¦£¬ÇëÇóÏìÓ¦Õâ¸ö¹ý³Ì¾ÍÊÇÒ»¸ö»ØÂ·£©µÄÊýÁ¿£»ÎÒÃÇÀûÓÃÒ»¸ö“¹ýÆÚ£¨expiration£©”»úÖÆÀ´Îª´ËÄ¿µÄ£¨¼û13.2½Ú£©¡£ºóÕß¼õÉÙÁËÍøÂçÓ¦ÓõĴø¿í£»ÎÒÃÇÓÓÑéÖ¤£¨validation£©”»úÖÆÀ´Îª´ËÄ¿µÄ¡£
¶ÔÐÐΪ£¬¿ÉÐÐÐÔ£¬ºÍ¹Ø±ÕµÄ²Ù×÷µÄÒªÇó·ÅËÉÁËÓïÒå͸Ã÷ÐÔµÄÄ¿µÄ¡£HTTP/1.1ÐÒéÔÊÐí·þÎñÆ÷£¬»º´æ£¬ºÍ¿Í»§¶ËÄÜÏÔʾµØ½µµÍ͸Ã÷ÐÔµ±ÔÚ±ØÒªµÄʱºò¡£È»¶ø£¬ÒòΪ²»Í¸Ã÷µÄ²Ù×÷ÄÜ»ìÏý·ÇרҵµÄÓû§£¬Í¬Ê±¿ÉÄܺÍij¸ö·þÎñÆ÷Ó¦ÓóÌÐò²»¼æÈÝ£¨ÀýÈç¶©¹ºÉÌÆ·£©£¬Òò´Ë´ËÐÒé͸Ã÷ÐÔÔÚÏÂÃæÇé¿öϲÅÄܱ»·ÅËÉÒªÇó£º
-- Ö»ÓÐÔÚÒ»¸öÏÔʾµÄÐÒé²ãµÄÇëÇóʱ£¬Í¸Ã÷ÐÔ²ÅÄܱ»¿Í»§¶Ë»òÔ´·þÎñÆ÷·ÅËÉ
-- µ±³öÏÖÒ»¸ö¶ÔÖÕ¶ËÓû§µÄÏÔʾµÄ¾¯¸æÊ±£¬Í¸Ã÷ÐÔ²ÅÄܱ»»º´æ»ò±»¿Í»§¶Ë·ÅËÉ
Òò´Ë£¬HTTP/1.1ÐÒéÌṩÕâÐ©ÖØÒªµÄÔªËØ£º
1£®ÌṩÍêÕûÓïÒå͸Ã÷µÄÐÒéÌØÕ÷£¬µ±ÕâÐ©ÌØÕ÷±»Í¨ÐŵÄËùÓз½ÐèҪʱ
2. ÔÊÐíÔ´·þÎñÆ÷»òÓû§´úÀíÏÔʾµÄÇëÇóºÍ¿ØÖƲ»Í¸Ã÷²Ù×÷µÄÐÒéÌØÕ÷
3. ÔÊÐí»º´æ¸øÕâÑùµÄÏìÓ¦°ó¶¨¾¯¸æÐÅÏ¢µÄÐÒéÌØÕ÷£¬ÕâЩÏìÓ¦²»Äܱ£ÁôÇëÇóµÄÓïÒå͸Ã÷µÄ½üËÆ
Ò»¸ö»ù±¾µÄÔÔòÊǿͻ§¶Ë±ØÐëÄܹ»·¢ÏÖÓïÒå͸Ã÷ÐÔµÄDZÔڵķÅËÉ¡£
×¢Ò⣺·þÎñÆ÷£¬»º´æ£¬»òÕ߿ͻ§¶ËµÄʵÏÖÕß¿ÉÄÜ»áÃæ¶ÔÉè¼ÆÉϵÄÅжϣ¬¶øÕâЩÅжÏûÓÐÏÔʾµØÔڴ˹淶ÀïÌÖÂÛ¡£Èç¹ûÒ»¸öÅжϿÉÄÜ»áÓ°ÏìÓïÒå͸Ã÷ÐÔ£¬ÄÇôʵÏÖÕßÓ¦¸ÃÄÜά³ÖÓïÒå͸Ã÷ÐÔ£¬³ý·ÇÒ»¸ö×ÐϸµÄÍêÕûµÄ·ÖÎöÄÜ˵Ã÷´òÆÆÍ¸Ã÷ÐԵĺô¦¡£
13.1.1»º´æÕýÈ·ÐÔ£¨Cache Correctness£©
Ò»¸öÕýÈ·µÄ»º´æ±ØÐëÄÜÓÃ×îеÄÏìÓ¦À´ÏìÓ¦ÇëÇ󣬴ËÏìÓ¦µ±ÔÚÏÂÃæµÄÌõ¼þÂú×ãʱ²ÅÊʺϴËÇëÇ󣨼û13.2.5£¬13.2.6£¬ºÍ13.12£©
´Ë»º´æÏìÓ¦Òѱ»¼ì²âÓë¼ÙÉèͨ¹ýÔ´·þÎñÆ÷ÖØÑéÖ¤ºóÔ´·þÎñÆ÷·µ»ØµÄÏìÓ¦ÏàµÈ¼Û¡£
´Ë»º´æÏìÓ¦ÊÇ×ã¹»±£ÏÊ(fresh)µÄ£¨¼û13.2½Ú£©¡£È±Ê¡µÄÇé¿öÏ£¬ÕâÒâζ×Å´ËÏìÓ¦±ØÐëÂú×ã¿Í»§¶Ë£¬Ô´·þÎñÆ÷£¬ºÍ»º´æµÄ×îÑϸñµÄ±£ÏÊÒªÇ󣨼û14.9½Ú£©£»Èç¹ûÔ´·þÎñÆ÷Ö¸¶¨Á˱£ÏÊÊÙÃü£¬Õâ˵Ã÷ËüÊÇÔ´·þÎñÆ÷×Ô¼ºµÄ±£ÏÊÒªÇó¡£
ÓÉÓÚ¿Í»§¶ËºÍÔ´·þÎñÆ÷µÄ×îÑϸñµÄ±£ÏÊÒªÇó£¬Èç¹ûÒ»¸ö»º´æµÄÏìÓ¦²»ÊÇ×ã¹»±£Ïʵģ¬ÄÇôÔÚ×Ðϸ¿¼ÂǵÄÇé¿öÏ£¬»º´æ¿ÉÄÜÈÔÈ»·µ»Ø´Ë»º´æµÄÏìӦͨ¹ýºÏÊʵÄWarningÍ·Óò£¨¼û13.1.5ºÍ14.46½Ú£©£¬³ý·Ç´ËÏìÓ¦±»×èÖ¹£¨ÀýÈ磺ͨ¹ý”no-store” cache-directive £¬»òÕßͨ¹ýÒ»¸ö”no-cache”cache-request-directive£»¼û14.9½Ú£©¡£
´Ë»º´æÏìÓ¦ÊÇÒ»¸ö304£¨Ã»Óб»¸Ä±ä£©£¬305£¨´úÀíÖØ¶¨Ïò£©£¬»ò ´íÎó£¨4xx»òÕß5xx£©ÏìÓ¦ÏûÏ¢¡£
Èç¹û»º´æ²»ÄÜͬԴ·þÎñÆ÷ͨÐÅ£¬ÄÇôһ¸öÕýÈ·µÄ»º´æÓ¦¸ÃÓÃËü»º´æµÄÏìӦȥÏìÓ¦ÇëÇó£¬Èç¹û´Ë»º´æµÄÏìÓ¦ÄÜÕýÈ·µÄ·þÎñÓÚÇëÇó£»Èç¹û²»ÄÜ·þÎñÆ÷ÓÚ´ËÇëÇó£¬ÄÇô»º´æ±ØÐëÄÜ·µ»ØÒ»¸ö´íÎó»ò¾¯¸æÖ¸Ê¾´æÔÚͨÐÅʧ°Ü¡£
Èç¹û»º´æ´Ó·þÎñÆ÷¶Ë½ÓÊÕµ½Ò»¸öÏìÓ¦£¨»òÕßÊÇÒ»¸öÍêÕûµÄÏìÓ¦£¬»òÕßÒ»¸ö304£¨Ã»Óб»¸Ä±ä£©µÄÏìÓ¦£©£¬´ËÏìÓ¦Ó¦¸ÃÊÇÕý³£Çé¿öÏÂÒª·¢Ë͵½ÇëÇóµÄ¿Í»§¶ËµÄ£¬²¢ÇÒ´ËÏìÓ¦²¢²»ÊÇÐÂÏʵģ¬ÄÇô´Ë»º´æÓ¦¸Ã°Ñ´ËÏìӦת·¢¸øÇëÇó¿Í»§¶Ë²»ÐèÒªÌí¼ÓÒ»¸öеÄWarningÍ·Óò£¨µ«ÊÇûÓÐÒÆÈ¥ÒѾ´æÔÚµÄWarningÍ·Óò£©¡£»º´æ²¢²»ÊǼòµ¥µÄÒòΪ´«ÊäÖÐÏìÓ¦±äµÃ³Â¾É¶ø³¢ÊÔÈ¥ÖØÑéÖ¤ÏìÓ¦£»Õâ¿ÉÄܻᵼÖÂÒ»¸öÎÞÏÞµÄÑ»·¡£Óû§´úÀí½ÓÊÕÒ»¸ö³Â¾ÉµÄûÓÐWarningÍ·ÓòµÄÏìÓ¦Ó¦¸ÃÌáʾÓû§Ò»¸ö¾¯¸æÐÅÏ¢¡£
13.1.2¾¯¸æÐÅÏ¢£¨Warnings£©
ÎÞÂÛºÎʱ£¬»º´æ·µ»ØÒ»¸öÏìÓ¦£¬´ËÏìÓ¦¼È²»ÊǵÚÒ»ÊÖµÄ(first-hand)Ò²²»ÊÇ×ã¹»±£ÏÊ£¨ÔÚ13.1.1½ÚµÄÌõ¼þ2£©£¬ÄÇô»º´æ±ØÐëÀûÓÃÒ»¸öWarning³£ÓÃÍ·ÓòÀ´¾¯¸æ²úÉúµÄЧ¹û¡£WarningÍ·ÓòºÍµ±Ç°¶¨ÒåµÄ¾¯¸æÔÚ14.46½ÚÀïÃèÊö¡£ÕâЩ¾¯¸æÔÊÐí¿Í»§¶ËÈ¥²ÉÈ¡ºÏÊʵ͝×÷¡£
¾¯¸æ¿ÉÄܱ»ÓÃÓÚÆäËûµÄÄ¿µÄ£¬ºÍ»º´æÏà¹ØµÄÄ¿µÄºÍÆäËûµÄÄ¿µÄ¡£¾¯¸æºÍ´íÎó״̬ÂëµÄÇø±ðÔÚÓÚÊÇ·ñÊÇÕæÕýµÄʧ°Ü¡£
¾¯¸æ±»¸³ÓèÈýλÊý×Öwarn-codes¡£µÚÒ»¸öÊý×ÖÖ¸Ã÷£º¾¯¸æÊÇ·ñ±ØÐë»ò²»±ØÐë´Ó»º´æÏîÀïɾ³ý£¬ÔÚÒ»¸ö³É¹¦µÄÖØÑéÖ¤Ö®ºó¡£
1xx ¾¯¸æÃèÊöÁËÏìÓ¦µÄ±£ÏÊ»òÖØÑé֤״̬ÐÅÏ¢£¬²¢ÇÒÕâЩÐÅÏ¢Ó¦¸ÃÔÚÒ»¸ö³É¹¦µÄÖØÑéÖ¤Ö®ºóɾ³ý¡£1xx¾¯¸æÂë¿ÉÄÜÊÇÓÉ»º´æ²úÉúµÄ£¬µ±»º´æÑéÖ¤Ò»¸ö»º´æÏîʱ¡£´Ë¾¯¸æÂë²»Äܱ»¿Í»§¶Ë²úÉú¡£
2xx ¾¯¸æÃèÊöÁËʵÌåÖ÷Ìå»òʵÌåÍ·ÓòµÄijЩ·½ÃæµÄÐÅÏ¢£¬ÕâЩÐÅÏ¢²»Äܱ»ÖØÑéÖ¤Ð޸쬲¢ÇÒÕâЩÐÅÏ¢²»ÄÜÔÚÒ»¸ö³É¹¦ÖØÑéÖ¤Ö®ºó±»É¾³ý¡£
¼û14.46½Ú¹ØÓÚ¾¯¸æÂëµÄ¶¨Òå¡£
HTTP/1.0»º´æ½«»º´æËùÓÐÏìÓ¦Öеľ¯¸æ£¬²¢ÇÒ²»»áɾ³ýµÚÒ»Àྯ¸æ¡£´©¹ýHTTP/1.0»º´æÏìÓ¦Öеľ¯¸æ»áЯ´øÒ»¸ö¶îÍâµÄwarning-dateÓò£¬ÕâÊÇΪÁË·ÀÖ¹½«À´µÄHTTP/1.1½ÓÊÕ¶ËÐÅÈÎÒ»¸ö´íÎóµÄ»º´æ¾¯¸æ¡£
¾¯¸æÍ¬ÑùЯ´øÒ»¸ö¾¯¸æÎı¾¡£´ËÎı¾¿ÉÄÜÊÇÈκκÏÊʵÄ×ÔÈ»ÓïÒ壨¿ÉÄÜ»ùÓÚ¿Í»§¶ËÇëÇóµÄAcceptÍ·Óò£©£¬Í¬Ê±°üº¬Ò»¸ö¿ÉÑ¡ÔñµÄ¹ØÓÚºÎÖÖ×Ö·û¼¯±»Ê¹ÓõÄÉùÃ÷¡£
¶à¸ö¾¯¸æ¿ÉÄÜ»á°ó¶¨Ò»¸öÏìÓ¦£¨»òÕß±»Ô´·þÎñÆ÷»òÕß±»Ò»¸ö»º´æ·¢Ë͵ģ©£¬Õâ°üÀ¨¶à¸ö¾¯¸æ¿ÉÒÔ¹²ÓÃÒ»¸ö¾¯¸æÂë¡£ÀýÈ磬·þÎñÆ÷¿ÉÄÜ»áÒÔÓ¢ÓïºÍ·¨ÓïÌṩÏàͬµÄ¾¯¸æ¡£
µ±¶à¸ö¾¯¸æ°ó¶¨Ò»¸öÏìӦʱ£¬ÓÐʱºò²»¿ÉÄܰÑËùÓеľ¯¸æ¶¼Õ¹Ê¾¸ø¿Í»§¡£HTTP°æ±¾²»ÄÜÖ¸¶¨Ò»¸öÑϸñµÄÓÅÏÈֵȥ¾ö¶¨¾¯¸æµÄÓÅÏȺÍ˳ÐòÏÔʾ£¬µ«ÊÇ¿ÉÒÔ̽Ë÷һЩ·½·¨¡£
13.1.3»º´æ¿ØÖÆ»úÖÆ £¨Cache-control Mechanism£©
HTTP/1.1»ù±¾µÄ»º´æ»úÖÆ£¨·þÎñÆ÷Ö¸¶¨¹ýÆÚʱ¼äºÍÑéÖ¤Æ÷£©¶Ô»º´æÊÇÒþº¬µÄÖ¸ÁijЩÇé¿öÏ£¬·þÎñÆ÷»ò¿Í»§¶Ë¿ÉÄÜÐèÒª¸øHTTP»º´æÌṩÏÔʾµÄÖ¸Áî¡£ÎÒÃÇÀûÓÃCache-ControlÍ·ÓòΪ´ËÄ¿µÄ¡£
Cache-ControlÍ·ÓòÔÊÐí¿Í»§¶Ë»ò·þÎñÆ÷ÔÚÇëÇó»òÏìÓ¦Àï´«Êä¶à¸öÖ¸Áî¡£ÕâЩָÁî³£³£¸²¸ÇȱʡµÄ»º´æËã·¨¡£×÷Ϊһ¸ö³£ÓùæÔò£¬Èç¹ûÍ·ÓòÖµÖдæÔÚÒ»¸öÃ÷ÏԵijåÍ»£¬ÄÇô×î¾ßÑϸñ½âÊ͵ÄÍ·ÓòÖµ»á±»Ó¦Óã¨Ò²¾ÍÊÇ˵£¬Äܱ£ÁôÓïÒå͸Ã÷ÐÔµÄÖµ£©¡£È»¶ø£¬Ò»Ð©Çé¿öÏ£¬cache-controlÖ¸Áî±»ÏÔʾµØÖ¸¶¨ÓÃÀ´Ï÷ÈõÓïÒå͸Ã÷ÐÔµÄÏàËÆÐÔ£¨ÀýÈ磬”max-stale” »òÕß “public”£©¡£
Cache-controlÖ¸ÁîÔÚ14.9½Ú±»ÃèÊö¡£
13.1.4ÏÔʾµÄÓû§´úÀí¾¯¸æ£¨Explicit User Agent Warnings£©
ºÜ¶àÓû§´úÀíÔÊÐíÓû§¸²¸Ç»ù±¾»º´æ»úÖÆ¡£ÀýÈ磬Óû§´úÀí¿ÉÄÜÔÊÐíÓû§Ö¸¶¨»º´æÊµÌ壨¼´Ê¹ÊµÌåÃ÷ÏÔÊdz¾ɵģ©´ÓÀ´²»Òª±»ÑéÖ¤¡£»òÕߣ¬Óû§´úÀí¿ÉÄÜϰ¹ßÓÚ¸øÈκÎÇëÇó¼ÓÉÏ“Cache-Control£ºmax-stale=3600”¡£Óû§´úÀí²»ÄÜȱʡµÄÖ´Ðв»Í¸Ã÷ÐÐΪ£¬»òÕß²»ÄÜȱʡµÄÖ´Ðе¼Ö·ÇÕý³£µÄÎÞЧÂʵĻº´æÐÐΪ£¬µ«ÊÇ¿ÉÄܱ»ÏÔʾµØÉèÖÃÈ¥ÕâÑù×öͨ¹ýÒ»¸öÏÔʾµÄÓû§¶¯×÷¡£
Èç¹ûÓû§ÒѾ¸²¸Ç»ù±¾µÄ»º´æ»úÖÆ£¬ÄÇôÓû§´úÀíÓ¦¸Ã¸øÓû§Ö¸Ê¾ºÎʱÏÔʾ²»ÄÜÂú×ã·þÎñÆ÷͸Ã÷ÒªÇóµÄÐÅÏ¢£¨ÌØ±ðµØ£¬Èç¹ûÏÔʾµÄʵÌå±»ÈÏΪÊdz¾ɵģ©¡£ÒòΪ´ËÐÒéͨ³£ÔÊÐíÓû§´úÀíÈ¥Åж¨ÏìÓ¦ÊÇ·ñÊdz¾ɻò²»Êdz¾ɵģ¬ËùÒÔ´ËָʾֻÐèÒªµ±Êµ¼Ê·¢ÉúʱÏÔʾ¡£´Ëָʾ²»±ØÊǶԻ°¿ò£»ËüÓ¦¸ÃÊÇÒ»¸öͼ±ê£¨ÀýÈ磬һ¸öÕýÔÚ¸¯ÀõÄÓ㣩»òÕßһЩÆäËûµÄָʾÆ÷¡£
Èç¹ûÓû§ÒÔÒ»ÖÖ·½Ê½ÒѾ¸²¸ÇÁË»º´æ»úÖÆ£¬ÕâÖÖ·½Ê½¿ÉÄܲ»Õý³£µØ¼õÉÙ»º´æÐ§ÂÊ£¬ÄÇôÓû§´úÀíÓ¦¸Ã¼ÌÐøÖ¸Ê¾Óû§µÄ״̬£¨ÀýÈ磬ͨ¹ýÒ»¸öͼƬÏÔʾ£©ÒÔ±ãÓû§²»Äܲ»×¢ÒâµØÏû·Ñ¹ý¶ÈµÄ×ÊÔ´»òÕßÈÌÊܹý¶ÈµÄÑÓ³Ù¡£
13.1.5¹æÔòºÍ¾¯¸æµÄÀýÍâÇé¿ö
ÔÚijЩÇé¿öÏ£¬»º´æµÄ²Ù×÷ÕßÓ¦¸ÃÉèÖûº´æ·µ»Ø³Â¾ÉµÄÏìÓ¦£¬¼´Ê¹´ËÏìӦûÓб»¿Í»§¶ËÇëÇó¡£Õâ¸öÅж¨±¾À´²»Ó¦¸ÃÇáÒ×¾ö¶¨£¬µ«ÊÇÓÉÓÚijЩÔÒò¿ÉÄÜ»áÕâÑù×ö£¬ÌرðÊǵ±»º´æºÍÔ´·þÎñÆ÷Á¬½Ó²»ºÃʱ¡£ÎÞÄܺÎʱµ±»º´æ»á·µ»ØÒ»¸ö³Â¾ÉµÄÏìӦʱ£¬»º´æ±ØÐë¸ø´ËÏìÓ¦×ö¸ö±ê¼Ç£¨ÀûÓÃWarningÍ·Óò£©£¬ÒòΪÕâÑùÄÜʹ¿Í»§¶ËÌáʾÓû§ÏìÓ¦Êdz¾ɵġ£
Óû§´úÀíÕÕÑùÄܲÉÈ¡²½ÖèÈ¥»ñµÃµÚÒ»ÊֵĻò±£ÏʵÄÏìÓ¦¡£ÓÉÓÚÕâ¸öÔÒò£¬Èç¹û¿Í»§¶ËÏÔʾµØÇëÇóµÚÒ»ÊֵĻò±£ÏʵÄÏìÓ¦£¬»º´æ¾Í²»ÄÜ·µ»ØÒ»¸ö³Â¾ÉµÄÏìÓ¦£¬³ý·ÇÓÉÓÚ¼¼Êõ»ò²ßÂÔ·½ÃæµÄÔÒò¡£
13.1.6Óɿͻ§¿ØÖƵÄÐÐΪ£¨Client-controlled Behavior£©
µ±Ô´·þÎñÆ÷ÊǹýÆÚÐÅÏ¢µÃÖ÷ÒªÀ´Ô´Ê±£¬ÓÐʱºò¿Í»§¶Ë¿ÉÄÜÐèÒª¿ØÖÆ»º´æÈ¥Åж¨ÊÇ·ñ·µ»ØÒ»¸ö»º´æÏìÓ¦¶ø²»ÐèÒª»º´æÍ¨¹ý·þÎñÆ÷ÑéÖ¤Ëü¡£¿Í»§¶Ëͨ¹ýÀûÓÃһЩCache-ControlÍ·ÓòÀ´´ïµ½´ËÄ¿µÄ¡£
¿Í»§¶ËµÄÇëÇó¿ÉÄÜ»áÖ¸¶¨×Ô¼ºÔ¸Òâ½ÓÊÜÒ»¸öûÓÐÑéÖ¤µÄÏìÓ¦µÄ×î´óµÄÄêÁ䣨age£©£»Ö¸¶¨0Öµ»áÇ¿ÆÈ»º´æÖØÑéÖ¤ËùÓеÄÏìÓ¦¡£¿Í»§¶ËÕÕÑù»áÖ¸¶¨ÔÚÏìÓ¦¹ýÆÚǰµÄ×îС±£³Öʱ¼ä¡£ÕâЩѡÏîÔö¼ÓÁ˶Իº´æÐÐΪµÄÏÞÖÆ£¬Í¬Ê±ÕâÑù×ö²¢²»ÄܽøÒ»²½µØ·ÅËÉ»º´æÓïÒå͸Ã÷µÄ½üËÆ¡£
¿Í»§¶Ë¿ÉÄÜÕÕÑù»áÖ¸¶¨Ëü»á½ÓÊܳ¾ÉÏìÓ¦Ö±µ½³Â¾ÉÊý´ïµ½×î´óÊýÁ¿¡£Õâ·ÅËÉÁ˶Իº´æµÄÏÞÖÆ£¬Í¬Ê±Õâ¿ÉÄÜÎ¥·´ÁËÔ´·þÎñÆ÷Ö¸¶¨¶ÔÓïÒå͸Ã÷ÐÔµÄÏÞÖÆ£¬µ«ÊÇÕâ¿ÉÄÜÖ§³ÖÎÞÁ¬½ÓµÄ²Ù×÷»òÕ߸߻ñµÃÐÔµ±Á¬½Ó²»ºÃʱ¡£
13.2 ¹ýÆÚÄ£ÐÍ £¨Expiration Model£©
13.2.1 ·þÎñÆ÷Ö¸¶¨Ä£ÐÍ£¨Server-Specified Expiratiion£©
HTTP»º´æ»á¹¤×÷µÄºÜºÃ£¬ÕâÊÇÒòΪ»º´æÄÜÍêÈ«µØ±ÜÃâ¿Í»§¶Ë¶ÔÔ´·þÎñÆ÷µÄÇëÇó¡£±ÜÃâ¶ÔÔ´·þÎñÆ÷ÇëÇóµÄÖ÷Òª»úÖÆÊÇ·þÎñÆ÷½«À´»áÌṩһ¸öÏÔʾ¹ýÆÚʱ¼ä£¨explicit expiration time£©£¬´ËÏÔʾ¹ýÆÚʱ¼äÓÃÀ´Ö¸Ê¾ÏìÓ¦¿ÉÄÜ»áÂú×ãºóÐøµÄÇëÇó¡£Ò²¾ÍÊÇ˵£¬¿Í»§¶ËÇëÇóÏìӦʱ£¬»º´æÄÜ·µ»ØÒ»¸ö±£ÏÊ£¨fresh£©µÄÏìÓ¦¶ø²»ÐèÒª´ÓÔ´·þÎñÆ÷ÄÇÀï»ñµÃ¡£
ÎÒÃÇÏ£Íû·þÎñÆ÷¸øÏìÓ¦ÉèÖÃÏÔʾ¹ýÆÚʱ¼ä£¨explicit expiration time£©£¬·þÎñÆ÷ÏàÐÅÔÚ¹ýÆÚʱ¼ä֮ǰʵÌå²»»á¸Ä±ä¡£ÕâÄܱ£³ÖÓïÒå͸Ã÷ÐÔ£¨Òë×¢£ºÓïÒå͸Ã÷ÐÔÇé¿ö1.3½ÚÀï¹ØÓÚ“ÓïÒå͸Ã÷”µÄ½âÊÍ£©£¬Ö»Òª·þÎñÆ÷¶Ô¹ýÆÚʱ¼ä×ÐϸѡÔñ¡£
¹ýÆÚ»úÖÆÖ»ÄÜÓ¦ÓÃÓÚÄÜ´Ó»º´æ»ñµÃµÄÏìÓ¦£¬²»ÄÜÓ¦ÓÃÓÚ¿Í»§¶ËÇëÇóµÄµÚÒ»ÊÖ£¨first-hand£¬¼û1.3½ÚÊõÓµÄÏìÓ¦¡£
Èç¹ûÔ´·þÎñÆ÷Ï£ÍûÇ¿ÖÆÒ»¸öÓïÒå͸Ã÷»º´æÈ¥Ñé֤ÿ¸öÇëÇó£¬Ëü»áʹÏÔʾ¹ýÆÚʱ¼ä£¨explicit expiration time£©ÉèΪ¹ýÈ¥¡£Õâ¾ÍÊÇ˵ÏìÓ¦×ÜÊdz¾ɵģ¬ËùÒÔ´Ë»º´æÓ¦¸ÃÑéÖ¤´ËÏìÓ¦µ±»º´æÀûÓôËÏìӦȥ·þÎñÓÚºóÐøµÄÇëÇóʱ¡£¼û14.9.4½Ú£¬Óиü¶àÇ¿ÆÈÖØÑéÖ¤µÄ·½·¨
Èç¹ûÔ´·þÎñÆ÷Ï£ÍûÇ¿ÆÈÈκÎHTTP/1.1»º´æ£¨²»¹Ü´Ë»º´æÊÇÔõÑùÉèÖõģ©È¥Ñé֤ÿһ¸öÇëÇó£¬Ô´·þÎñÆ÷Ó¦¸ÃÔÚCache-ControlÍ·ÓòÀïÖ¸¶¨“must-revalidate”»º´æ¿ØÖÆÖ¸Á¼û14.9½Ú£©¡£
Ô´·þÎñÆ÷ÀûÓÃExpiresÍ·Óò»òÔÚCache-ControlÍ·ÓòÀïͨ¹ýmax-age»º´æ¿ØÖÆÖ¸ÁÀ´Ö¸¶¨ÏÔʾ¹ýÆÚʱ¼ä£¨explicit expiration time£©¡£
¹ýÆÚʱ¼ä²»Äܱ»ÓÃÓÚÇ¿ÖÆ¿Í»§´úÀíÈ¥ÖØÐÂË¢ÐÂËüµÄÏÔʾ»òÖØÔØ×ÊÔ´£»¹ýÆÚµÄÓïÒåÖ»ÄÜÓ¦ÓÃÓÚ»º´æ»úÖÆ£¬²¢ÇÒÕâ¸ö»úÖÆÖµÖ»ÐèÒª¼ì²â×ÊÔ´µÄ¹ýÆÚ״̬µ±ÇëÇóÄǸö×ÊÔ´µÄÒ»¸öÐÂÇëÇó·¢Éúʱ¡£¼û13.13½Ú£¬¹ØÓÚ»º´æºÍÀúÊ·»úÖÆµÄÇø±ð¡£
13.2.2 Æô·¢Ê½¹ýÆÚ
ÒòΪԴ·þÎñÆ÷²»ÄÜ×ÜÊÇÌṩһ¸öÏÔʾ¹ýÆÚʱ¼ä£¨explicit expiration time£©£¬HTTP»º´æÍ¨³£»áÉèÖÃÒ»¸öÆô·¢Ê½¹ýÆÚʱ¼ä£¨heuristic expiration time£©£¬Ëü²ÉÓÃÒ»ÖÖËã·¨£¬´ËËã·¨ÀûÓÃÆäËüµÄÖµ£¨ÀýÈçLast-Modifiedʱ¼ä£©È¥¹À¼ÆÒ»¸öËÆºõºÏÀíµÄ¹ýÆÚʱ¼ä¡£HTTP/1.1¹æ·¶Ã»ÓÐÌá¹©ÌØ¶¨µÄËã·¨£¬µ«ÊǵÄÈ·ÊǼÓÇ¿Á˶ÔÕâЩËã·¨½á¹ûµÄ×Çé¿öµÄÏÞÖÆ¡£ÒòΪÆô·¢Ê½¹ýÆÚʱ¼ä¿ÉÄÜ»á¶ÔÓïÒå͸Ã÷ÐÔÍ×У¬ËûÃDZ¾Ó¦¸Ã±»½÷É÷µØÊ¹Ó㬲¢ÇÒÎÒÃǹÄÀøÔ´·þÎñÆ÷¾¡¿ÉÄÜÌṩÏÔʾ¹ýÆÚʱ¼ä¡£
13.2.3 ÄêÁ䣨Age£©¼ÆËã
ΪÁËÁ˽⻺´æÏÒë×¢£º»º´æÏîÊÇÓÃÀ´ÏìÓ¦ÇëÇóµÄ£¬Ëü°üº¬»º´æµÄÏìӦʵÌ壩ÊÇ·ñÊDZ£Ïʵģ¨fresh£©£¬»º´æÐèÒªÖªµÀÆäÄêÁäÊÇ·ñÒѳ¬¹ý±£ÏÊÊÙÃü£¨freshness lifetime£©¡£ÎÒÃÇÔÚ13.2.4½ÚÖÐÌÖÂÛÈçºÎ¼ÆËã±£ÏÊÊÙÃü£¬±¾½ÚÌÖÂÛÈçºÎ¼ÆËãÏìÓ¦»ò»º´æÏîµÄÄêÁä¡£
ÔÚ´ËÌÖÂÛÖÐÎÒÃÇÓÓnow”À´±íʾÖ÷»ú½øÐмÆËãʱʱÖӵēµ±Ç°Öµ”¡£Ê¹ÓÃHTTPÐÒéµÄÖ÷»ú£¬ÌرðÊÇÔËÐÐÓÚÔ´·þÎñÆ÷ºÍ»º´æµÄÖ÷»ú£¬Ó¦¸ÃʹÓÃNTP[28] »òÆäËûÀàËÆÐÒéÀ´½«ÆäʱÖÓͬ²½µ½Ò»¸öÈ«ÇòÐԵľ«È·Ê±¼ä±ê×¼ÉÏ¡£
HTTP1.1ÐÒéÒªÇóÔ´·þÎñÆ÷¾¡¿ÉÄÜÔÚ·¢ËÍÿÌõÏìӦʱ¶¼¸½¼ÓÒ»¸öDateÍ·Óò£¬Òª¾¡¿ÉÄÜÔÚÿ¸öÏìÓ¦Àï¸ø³öÏìÓ¦²úÉúµÄʱ¼ä£¨¼û14.18½Ú£©¡£ÎÒÃÇÀûÓÃÊõÓï“date_value”È¥±íʾDateÍ·ÓòµÄÖµ£¬ÕâÊÇÒ»ÖÖÊʺÏÓÚÔËËã²Ù×÷µÄ±íʾ·½·¨¡£
µ±´Ó»º´æÀï»ñÈ¡ÏìÓ¦ÏûϢʱ£¬HTTP/1.1ÀûÓÃAgeÏìӦͷÓòÀ´´«ËÍÏìÓ¦ÏûÏ¢µÄ¹À¼ÆÄêÁä¡£AgeÏìӦͷÓòÖµÊÇ»º´æ¶ÔÏìÓ¦´Ó²úÉú»ò±»ÖØÑéÖ¤¿ªÊ¼µ½ÏÖÔÚµÄʱ¼ä¹À¼ÆÖµ¡£
ʵ¼ÊÉÏ£¬ÄêÁäµÄÖµÊÇÏìÓ¦´ÓÔ´·þÎñÆ÷;¾¶Ã¿Ò»¸ö»º´æµÄ¶ºÁôʱ¼äµÄ×ܺͣ¬ÔÙ¼ÓÉÏÏìÓ¦ÔÚÍøÂç·¾¶ÉÏ´«ÊäµÄʱ¼ä¡£
ÎÒÃÇÓÓage_value”À´±íʾAgeÍ·ÓòµÄÖµ£¬ÕâÊÇÒ»ÖÖÊÊÓÚËãÊõ²Ù×÷µÄ±íʾ·½·¨¡£
Ò»¸öÏìÓ¦µÄÄêÁä(age)¿ÉÒÔͨ¹ýÁ½ÖÖÍêÈ«²»Í¬µÄ;¾¶À´¼ÆËã:£º
Èç¹û±¾µØÊ±ÖÓÓëÔ´·þÎñÆ÷ʱÖÓͬ²½µÄÏ൱ºÃ£¬ÔòÓà now - date_value £¬Èô½á¹ûΪ¸º£¬ÔòÈ¡Áã¡£
Èç¹û;¾¶ÏìӦ·¾¶£¨response path£©µÄËùÓлº´æ¾ù×ñÑHTTP1.1ÐÒ飬ÔòÓÃage_value¡£
Èç¹ûÎÒÃÇÓÐÁ½ÖÖ¶ÀÁ¢µÄ·½·¨¼ÆËãÏìÓ¦µÄÄêÁ䣨Òë×¢£º×¢ÒâÕâÀïÊÇÏìÓ¦µÄÄêÁ䣩£¬ÎÒÃÇ¿ÉÒԺϲ¢¶þÕßÈçÏ£º
corrected_received_age = max£¨now – date_value£¬age_value£©
²¢ÇÒÖ»ÒªÎÒÃÇ»òÕßÓÐͬ²½µÄʱÖÓ»òÕßÏìӦ;¾¶µÄËùÓлº´æ×ñÑHTTP/1.1£¬ÎÒÃǾÍÄܵõ½Ò»¸ö¿ÉÐÅÀµµÄ½á¹û¡£
ÓÉÓÚÍøÂ總¼ÓÑÓʱ£¬Ò»Ð©ÖØÒªÊ±Ï¶»áÔÚ·þÎñÆ÷²úÉúÏìÓ¦ÓëÏÂÒ»¸ö»º´æ»ò¿Í»§¶Ë½ÓÊÕÖ®¼äÁ÷ÊÅ¡£Èç¹û²»¾ÐÞ¶©£¬ÕâÒ»ÑÓ³Ù»á´øÀ´²»Õý³£µÄµÍÄêÁä¡£
ÓÉÓÚµ¼Ö²úÉúÄêÁäÖµµÄÇëÇó£¨Òë×¢£º¾ÍÊÇ´æÔÚAgeÍ·ÓòµÄÇëÇó£©ÊÇÔçÓÚÄêÁäÖµµÄ²úÉú£¬ÎÒÃÇÄÜУÕýÍøÂ總¼ÓÑÓ³Ùͨ¹ý¼Ç¼ÇëÇó²úÉúµÄʱ¼ä¡£È»ºó£¬µ±Ò»¸öÄêÁäÖµ±»½ÓÊÕºó£¬Ëü±ØÐë±»½âÊͳÉÏà¶ÔÓÚÇëÇó²úÉúµÄʱ¼ä£¬¶ø²»ÊÇÏà¶ÔÏìÓ¦½ÓÊÕµÄʱ¼ä¡£²»¹ÜÓжàÉÙÑÓ³Ù£¬´ËËã·¨»áµ¼ÖÂÎȶ¨µÄ½á¹û¡£ËùÒÔ£¬ÎÒÃǼÆË㣺
corrected_initial_age = corrected_received_age + £¨now - request_time£©
ÕâÀï“request_time”ÊÇÇëÇóµÄ·¢ËÍʱ¼ä¡£
»º´æÊÕµ½ÏìӦʱ£¬Ëü¼ÆËãÏìÓ¦ÄêÁäµÄËã·¨ÈçÏ£º
/*
* age_value
* is the value of Age: header received by the cache with this response.
* date_value
* is the value of the origin server's Date: header
* request_time
* is the £¨local£© time when the cache made the request
* that resulted in this cached response
* response_time
* is the £¨local£© time when the cache received the response
* now
* is the current £¨local£© time
*/
apparent_age = max£¨0, response_time - date_value£©; //»º´æÊÕµ½ÏìӦʱÏìÓ¦µÄÄêÁä
corrected_received_age = max£¨apparent_age, age_value£©;
response_delay = response_time - request_time;
corrected_initial_age = corrected_received_age + response_delay;
resident_time = now - response_time; //¼´ÊÕµ½ÏìÓ¦µ½ÏÖÔÚµÄʱ¼ä¼ä¸ô
current_age = corrected_initial_age + resident_time;
»º´æÏcache entry£©µÄcurrent_ageÊÇ»º´æÏî´Ó±»Ô´·þÎñÆ÷×îºóÑéÖ¤¿ªÊ¼µ½ÏÖÔÚµÄʱ¼ä¼ä¸ô£¨ÒÔÃë¼Ç£©¼ÓÉÏcorrected_initial_age¡£µ±´Ó»º´æÏîÀï²úÉúÒ»ÌõÏìӦʱ£¬»º´æ±ØÐëÔÚÏìÓ¦Àï°üº¬Ò»¸öAgeÍ·Óò£¬ËüµÄÖµÓ¦¸ÃµÈÓÚ»º´æÏîµÄcurrent_ageÖµ¡£
AgeÍ·Óò³öÏÖÔÚÏìÓ¦Àï˵Ã÷ÏìÓ¦²»ÊǵÚÒ»Êֵģ¨first-hand£©£¨Òë×¢£ºµÚÒ»ÊÖµÄ˵Ã÷£¬ÏìÓ¦ÊÇÖ±½ÓÀ´×ÔÓÚÔ´·þÎñÆ÷µ½´ï½ÓÊն˵쬶ø²»ÊÇÀ´×ÔÓÚ»º´æÀï±£´æµÄ¸±±¾£©¡£È»¶øÏà·´µÄÇé¿ö²¢²»³ÉÁ¢£¬ÒòΪÏìÓ¦ÀïȱÉÙAgeÍ·Óò²¢²»ÄÜ˵Ã÷ÏìÓ¦ÊǵÚÒ»ÊÖµÄ(fisrt-hand)£¬³ý·ÇËùÓÐÇëÇó·¾¶ÉϵĻº´æ¶¼×ñÑHTTP/1.1ÐÒ飨Ҳ¾ÍÊÇ˵£¬ÒÔǰHTTP°æ±¾»º´æÃ»Óж¨ÒåAgeÍ·Óò£©¡£
13.2.4 ¹ýÆÚ¼ÆË㣨Expiration Calculations£©
ΪÁËÈ·¶¨Ò»ÌõÏìÓ¦ÊDZ£Ïʵģ¨fresh£©»¹Êdz¾ɵģ¨stale£©£¬ÎÒÃÇÐèÒª½«Æä±£ÏÊÊÙÃü£¨freshness lifetime)ºÍÄêÁä(age)½øÐбȽϡ£ÄêÁäµÄ¼ÆËã¼û13.2.3½Ú£¬±¾½Ú½²½âÔõÑù¼ÆËã±£ÏÊÊÙÃü£¬ÒÔ¼°Åж¨Ò»¸öÏìÓ¦ÊÇ·ñÒѾ¹ýÆÚ¡£ÔÚÏÂÃæµÄÌÖÂÛÖУ¬ÊýÖµ¿ÉÒÔÓÃÈκÎÊÊÓÚËãÊõ²Ù×÷µÄÐÎʽ±íʾ¡£
ÎÒÃÇÓÃÊõÓï“expires_value”À´±íÃ÷ExpiresÍ·ÓòµÄÖµ¡£ÎÒÃÇÓÃÊõÓï“max_age_value”À´±íʾCache-ControlÍ·ÓòÀï“max-age”¿ØÖÆÖ¸ÁîµÄÖµ£¨¼û14.9.3½Ú£©¡£
max-ageÖ¸ÁîÓÅÓÚExpiresÍ·ÓòÖ´ÐУ¬ËùÒÔÈç¹ûmax-age³öÏÖÔÚÏìÓ¦ÀÄÇô¶¨ÒåÈçÏ£º
freshness_lifetime = max_age_value
·ñÔò£¬ÈôExpiresÍ·Óò³öÏÖÔÚÏìÓ¦À¶¨ÒåÈçÏ£º
freshness_lifetime = expires_value - date_value
×¢ÒâÉÏÊöÔËËã²»ÊÜʱÖÓÎó²îÓ°Ï죬ÒòΪËùÓÐÐÅÏ¢¾ùÀ´×ÔÔ´·þÎñÆ÷¡£
Èç¹ûExpires£¬ Cache-Control£ºmax-age, »ò Cache-Control£ºs-maxage £¨¼û 14.9.3£© ¾ùδÔÚÏìÓ¦ÖгöÏÖ£¬ÇÒÏìӦûÓаüº¬¶Ô»º´æµÄÆäËû¿ØÖÆ£¬ÄÇô»º´æ¿ÉÒÔÓÃÆô·¢Ê½Ëã·¨¼ÆËã±£ÏÊÊÙÃü£¨freshness lifetime£©¡£»º´æÆ÷±ØÐë¶ÔÄêÁä´óÓÚ24СʱµÄÏìÓ¦¸½¼Ó113¾¯¸æ£¬Èç¹û´ËÏìÓ¦²»´øÕâÖÖ¾¯¸æ¡£
¶øÇÒ£¬Èç¹ûÏìÓ¦ÓÐ×îºóÐÞ¸Äʱ¼ä£¬Æô·¢Ê½¹ýÆÚÖµÓ¦²»´óÓÚ´ÓÄǸöʱ¼ä¿ªÊ¼¼ä¸ôµÄij¸ö·ÖÊý¡£µäÐÍÉèÖÃΪ¼ä¸ôµÄ10% ¡£
¼ÆËãÏìÓ¦ÊÇ·ñ¹ýÆÚ·Ç³£¼òµ¥£º
response_is_fresh = £¨freshness_lifetime > current_age£©
13.2.5³ÎÇå¹ýÆÚÖµ£¨Disambiguation Expiration Values£©
ÓÉÓÚ¹ýÆÚÖµºÜÈÝÒ×±»ÉèÖã¬ÓпÉÄÜÁ½¸ö»º´æ»á°üº¬Í¬Ò»×ÊÔ´µÄ²»Í¬±£ÏÊÖµ¡£
Èç¹û¿Í»§¶ËÖ´ÐÐÇëÇó½ÓÊÕµ½Ò»¸ö·ÇµÚÒ»ÊÖµÄÏìÓ¦£¬´ËÏìÓ¦Ôڴ˿ͻ§¶ËÓµÓеĻº´æÀïÈÔÈ»ÊDZ£Ïʵ쬲¢ÇÒ»º´æÀïµÄ»º´æÏîÀïµÄDateÍ·ÓòµÄÖµ±È´ËÐÂÏìÓ¦µÄDateÍ·ÓòֵҪУ¬ÄÇô¿Í»§¶ËÓ¦¸ÃºöÂÔ´ËÏìÓ¦¡£Èç¹ûÕâÑù£¬Ëü¿ÉÄÜ»áÖØÐÂÒÔ“Cache-Control£ºmax-age=0”Ö¸Á¼û14.9½Ú£©ÇëÇóÈ¥Ç¿ÖÆÈκÎÖм仺´æÍ¨¹ýÔ´·þÎñÆ÷¶ÔÆä½øÐмì²é¡£
Èç¹û»º´æ¶ÔÓв»Í¬ÑéÖ¤Æ÷£¨validator£©µÄͬһ¸ö±íÏÖÐÎʽ£¨representation£©ÓÐÁ½¸ö±£ÏÊÏìÓ¦£¬ÄÇô»º´æ±ØÐëÀûÓÃDateÍ·ÓòÖµ×î½üµÄÏìÓ¦¡£ÕâÖÖÇé¿ö¿ÉÄÜ·¢ÉúÓÉÓÚ»º´æ»á´ÓÆäËû»º´æµÃµ½ÏìÓ¦£¬»òÕßÓÉÓÚ¿Í»§¶ËÇëÇó¶ÔÒ»¸ö±£ÏÊ»º´æÏîµÄÖØÔØ»òÖØÑéÖ¤£¨revalidation£©¡£
13.2.6³ÎÇå¶à¸öÏìÓ¦£¨Disambiguating Multiple Response£©
ÒòΪ¿Í»§¶Ë¿ÉÄÜÊÕµ½¾¶à¸ö·¾¶¶øÀ´µÄÏìÓ¦£¬ËùÒÔÓÐЩÏìÓ¦»á¾¹ýһЩ»º´æ£¬¶øÆäËûµÄÏìÓ¦»á¾¹ýÆäËûµÄ»º´æ£¬¿Í»§¶ËÊÕµ½ÏìÓ¦µÄ˳Ðò¿ÉÄÜÓëÔ´·þÎñÆ÷·¢ÏìÓ¦µÄ˳Ðò²»Í¬¡£ÎÒÃÇÏ£Íû¿Í»§¶ËÀûÓÃ×îеÄÏìÓ¦£¬¼´Ê¹¾ÉÏìÓ¦ÈÔÈ»ÊDZ£Ïʵġ£
ʵÌå±êÇ©£¨entity tag£©ºÍ¹ýÆÚÖµ¶¼²»ÄÜÓ°ÏìÏìÓ¦µÄ˳Ðò£¬ÒòΪ¿ÉÄÜ»á³öÏÖÍíÒ»µãµÄÏìÓ¦¿ÉÄÜ»á¹ÊÒâЯ´ø¹ýÔçµÄ¹ýÆÚʱ¼ä¡£ÈÕÆÚÖµµÄ¾«¶È±»¹æ¶¨Ö»ÓÐÒ»Ãë¡£
µ±¿Í»§¶ËÊÔ×ÅÖØÐÂÑéÖ¤Ò»¸ö»º´æÏîµÄʱºò£¨Òë×¢£ºÕâÀïµÄ¿Í»§¶ËÓ¦¸Ã°üº¬Ò»¸ö±¾µØ»º´æ£©£¬¶øÇÒ½ÓÊÕµ½µÄÏìÓ¦µÄDateÍ·ÓòÍíÓÚÒÑ´æÔڵĻº´æÏÄÇô¿Í»§¶ËÓ¦¸ÃÖØÐ½øÐÐÎÞÌõ¼þÇëÇ󣬲¢ÇÒ°üº¬
Cache-Control: max-age=0
È¥Ç¿ÖÆÈκÎÖм仺´æÍ¨¹ýÔ´·þÎñÆ÷À´ÑéÖ¤£¨validate£©ÕâЩÖм仺´æµÄ¸±±¾£¬»òÕß
Cache-Control: no-cache
È¥Ç¿ÖÆÈκÎÖм仺´æÈ¥´ÓÔ´·þÎñÆ÷»ñµÃÒ»¸öеĸ±±¾¡£
13.3 Ñé֤ģÐÍ£¨Validation Model£©
µ±»º´æÓÐÒ»¸ö¾É»º´æÏî²¢ÇÒ»º´æÏëÀûÓô˻º´æÏîÀ´×÷Ϊ¿Í»§¶ËÇëÇóµÄÏìӦʱ£¬»º´æ±ØÐëÊ×ÏÈͨ¹ýÔ´·þÎñÆ÷£¨»òÕß¿ÉÄÜͨ¹ýÒ»¸öÓб£ÏÊÏìÓ¦µÄÖм仺´æ£©¶ÔÆä½øÐмìÑé¿´¿´´Ë»º´æÏîÊÇ·ñ¿ÉÓá£ÎÒÃdzÆ×ö“ÑéÖ¤£¨validating£©”´Ë»º´æÏî¡£ÒòΪÎÒÃDz»Ïë¶ÔÍêÕûÏìÓ¦µÄ´«Ê丶³öÌ«´ó´ú¼Û£¬¶øÇÒÈç¹û»º´æÏîÎÞЧʱҲ²»»á²úÉú¶îÍâµÄ»ØÂ·£¨Òë×¢£º»ØÂ·µÄÒâ˼£¬È磺´ÓÇëÇóµ½ÏìÓ¦¾ÍÒ»Ìõ»ØÂ·£©£¬HTTP1.1ÐÒéÖ§³ÖʹÓÃÌõ¼þ·½·¨¡£.
ÐÒéÖ§³ÖÌõ¼þ·½·¨µÄ¹Ø¼üÌØÕ÷ÊÇÎ§ÈÆ“»º´æÑéÖ¤Æ÷£¨cache validator£©”Õ¹¿ªµÄ¡£µ±Ô´·þÎñÆ÷²ú³ÉÒ»¸öÍêÕûÏìӦʱ£¬Ëüͬʱ»á¸½¼ÓһЩÑéÖ¤Æ÷¸øÏìÓ¦£¬ÕâЩÑéÖ¤Æ÷ºÍ»º´æÏîÒ»Æð±£´æ¡£µ±¿Í»§¶Ë£¨Óû§´úÀí»ò»º´æ·þÎñÆ÷£©¶Ô¶ÔÓ¦Óлº´æÏîµÄ×ÊÔ´Ö´ÐÐÌõ¼þÇëÇóʱ£¬¿Í»§¶Ë°üº¬Ò»¸öÏà¹ØµÄÑéÖ¤Æ÷£¨validator£©ÔÚÇëÇóÀï¡£
·þÎñÆ÷£¨Òë×¢£º·þÎñÆ÷¿ÉÄÜÊÇ»º´æ·þÎñÆ÷£©ÔòºË¶ÔÇëÇóÀïµÄÑéÖ¤Æ÷ºÍµ±Ç°±¾µØµÄÑéÖ¤Æ÷ÊÇ·ñÆ¥Å䣬Èç¹ûËûÃÇÆ¥Å䣨¼û13.3.3£©£¬Ôò·µ»ØÒ»¸öÌØ¶¨×´Ì¬Â루ͨ³£Îª304£¨Ã»Óиı䣩£©µÄÏìÓ¦²¢ÇÒ´ËÏìÓ¦²»°üº¬ÊµÌåÖ÷Ì壨entity body£©¡£Èç¹û²»Æ¥Å䣬·þÎñÆ÷¾Í·µ»ØÍêÕûÏìÓ¦£¨°üº¬ÊµÌåÖ÷Ì壩¡£ÕâÑù£¬ÎÒÃǾͱÜÃâÁË´«ÊäÍêÕûÏìÓ¦Èç¹ûÑéÖ¤Æ÷Æ¥Å䣬ͬʱÎÒÃÇÒ²±ÜÃâÁ˶îÍâµÄ»ØÂ·Èç¹ûÑéÖ¤Æ÷²»Æ¥Åä¡£
ÔÚHTTP1.1ÐÒéÖУ¬Ò»¸öÌõ¼þÇëÇóºÍÆÕͨµÄÇëÇó²î²»¶à£¬³ýÁËÌõ¼þÇëÇóЯ´øÒ»Ð©ÌØÊâµÄÍ·Óò£¨ÕâЩͷÓò°üº¬ÑéÖ¤Æ÷£©£¬°üº¬ÕâÐ©ÌØÊâµÄÍ·ÓòÒþº¬µØ±íÃ÷ÇëÇó·½·¨£¨Í¨³£ÊÇGET·½·¨£©ÎªÌõ¼þÇëÇó·½·¨¡£
ÐÒéÖаüÀ¨»º´æÑéÖ¤Ìõ¼þµÄÕýºÍ¸º¡£Ò²¾ÍÊÇ˵ÇëÇó·½·¨½«»áÖ´ÐÐÈç¹ûÑéÖ¤Æ÷µÄÆ¥Åä»ò²»»áÖ´ÐÐÈç¹ûÑéÖ¤Æ÷²»Æ¥Åä¡£
×¢Ò⣺ȱÉÙÑéÖ¤Æ÷µÄÏìÓ¦¿ÉÄܻᱻ»º´æ£¬¶øÇһᱻ»º´æÓÃÀ´ÎªÇëÇóÌṩ·þÎñÖ±µ½»º´æµÄ¸±±¾¹ýÆÚ£¬³ý·ÇÏÔʾµØÓûº´æ¿ØÖÆÖ¸ÁîÀ´½ûÖ¹»º´æÕâÑù×ö¡£È»¶ø£¬»º´æ²»ÄÜÖ´ÐÐÌõ¼þ·½·¨»ñÈ¡×ÊÔ´Èç¹ûËüûÓдË×ÊԴʵÌåµÄÑéÖ¤Æ÷£¬ÄÇÒâζ×Å»º´æ¸±±¾½«»á²»¿É¸üÐÂÔÚËü¹ýÆÚºó¡£
13.3.1×îºóÐÞ¸ÄÈÕÆÚ £¨Last-Modified Dates£©
Last-ModifedʵÌåÍ·ÓòÖµ¾³£±»ÓÃ×÷Ò»¸ö»º´æÑéÖ¤Æ÷¡£¼ò¶øÑÔÖ®£¬»º´æÏî±»ÈÏΪÊÇÓÐЧµÄÈç¹ûʵÌå×Ô´ÓLast-ModifedÖµÖ®ºóûÓиı䡣
13.3.2 ʵÌå±êÇ©»º´æÑéÖ¤Æ÷£¨Entity Tag Cache Validators£©
ETagÏìӦͷÓòÖµÊÇʵÌå±êÇ©£¬ËüÌṩÁËÒ»¸ö“²»Í¸Ã÷£¨opaque£©µÄ»º´æÑéÖ¤Æ÷¡£ÕâÄܵõ½¸ü¿É¿¿µÄÑéÖ¤µ±ÔÚ²»·½±ã´æ·ÅÐÞ¸ÄÈÕÆÚµÄÇé¿öÏ£¬µ±ÔÚHTTPÈÕÆÚÖµµÄÒ»Ã뾫¶È²»ÄÜÂú×ãÐèÒªµÄÇé¿öÏ£¬»òµ±ÔÚÔ´·þÎñÆ÷Ï£Íû±ÜÃâʹÓÃÐÞ¸ÄÈÕÆÚ²úÉúµÄ³åÍ»µÄÇé¿öÏ¡£
ʵÌå±êÇ©ÔÚ3.11½ÚÃèÊöÁË¡£Ê¹ÓÃÁËʵÌå±êÇ©µÄÍ·ÓòÔÚ14.19£¬14.24£¬14.26ºÍ14.44½ÚÀïÃèÊöÁË¡£
13.3.3 Ç¿,ÈõÑéÖ¤Æ÷ £¨Weak and Strong Validators£©
ÓÉÓÚÔ´·þÎñÆ÷ºÍ»º´æ»á±È½ÏÁ½¸öÑéÖ¤Æ÷À´È·¶¨ËûÃÇÊÇ·ñ´ú±íÏàͬµÄʵÌ壬ËùÒÔͨ³£Ï£ÍûʵÌ壨entity£¬ÊµÌåÖ÷Ìå»òʵÌåÍ·Óò£©·¢ÉúÈκα仯ʱÑéÖ¤Æ÷Ò²ÏàÓ¦±ä»¯£¬ÕâÑùµÄÑéÖ¤Æ÷ΪǿÑéÖ¤Æ÷¡£.
È»¶ø£¬¿ÉÄÜ´æÔÚÕâÑùµÄÇëÇ󣬷þÎñÆ÷ÇãÏòÓÚ½öÔÚʵÌå·¢ÉúÖØÒªµÄÓïÒå±ä»¯Ê±²Å¸Ä±äÑéÖ¤Æ÷£¬¶øÔÚʵÌåµÄijЩ·½Ãæ²»·¢ÉúÖØ´ó¸Ä±äʱ¾Í²»¸Ä±äÑéÖ¤Æ÷¡£ÔÚ×ÊÔ´±ä»¯Ê±ÑéÖ¤Æ÷δ±Ø±ä»¯µÄ³ÆÎªÈõÑéÖ¤Æ÷.¡£
ʵÌå±êǩͨ³£ÊÇÇ¿ÑéÖ¤Æ÷£¬µ«ÐÒéÌṩһÖÖ»úÖÆÀ´Ê¹ÊµÌå±êÇ©±ä³ÉÈõÑéÖ¤Æ÷¡£¿ÉÒÔÈÏΪǿÑéÖ¤Æ÷ÔÚʵÌåµÄÿһ×ֽڱ仯ʱ¶ø±ä»¯£¬¶øÈõÑéÖ¤Æ÷½öÔÚʵÌåµÄÓïÒå±ä»¯Ê±²Å±ä»¯¡£»»ÑÔÖ®£¬ÎÒÃÇÄÜÈÏΪǿÑéÖ¤Æ÷ÊÇÌØ¶¨ÊµÌåµÄ±êʶ£¬¶øÈõÑéÖ¤Æ÷ÊÇͬһÀàÓïÒåµÈ¼ÛʵÌåµÄ±êʶ¡£
×¢: Ç¿ÑéÖ¤Æ÷µÄÀý×Ó£ºÒ»¸öÕûÊýËû»áËæ×Åÿ´ÎʵÌå·¢Éú±ä»¯¶øµÝÔö¡£Ò»¸öʵÌåµÄÐÞ¸Äʱ¼ä£¬Èç¹ûÒÔÃëΪ¾«¶È£¬Äܱ»µ±×÷ÈõÑéÖ¤Æ÷£¬ÒòΪÔÚÒ»ÃëÄÚ×ÊÔ´¿ÉÄܸıäÁ½´Î¡£ÊÇ·ñÖ§³ÖÈõÑéÖ¤Æ÷ÊÇÑ¡ÔñµÄ¡£È»¶ø£¬ÈõÑéÖ¤Æ÷¿ÉÒÔÄܸßЧµÄÈ¥»º´æµÈЧ¶ÔÏó¡£
.
¿Í»§¶Ë²úÉúÇëÇó²¢°ÑÑéÖ¤Æ÷°üº¬ÔÚÒ»¸öÑé֤ͷÓòÀïµÄʱºò»òÔÚ·þÎñÆ÷±È½ÏÁ½¸öÑéÖ¤Æ÷µÄʱºò¾ùÓõ½ÑéÖ¤Æ÷¡£Ç¿ÑéÖ¤Æ÷¿ÉÔÚÈκÎÇé¿öÏÂʹÓ㬶øÈõÑéÖ¤Æ÷½öÔÚ²»ÒÀÀµÑϸñÏàµÈʱ²Å¿ÉÓᣵ±¿Í»§¶Ë²úÉúÌõ¼þGETÇëÇóÀ´ÇëÇóÒ»¸öÍêÕûʵÌåʱ£¬ÈκÎÀàÐ͵ÄÑéÖ¤Æ÷¶¼¿ÉÒÔʹÓá£È»¶ø£¬×Ó·¶Î§£¨sub-range£©ÇëÇóʱֻÄÜʹÓÃÇ¿ÑéÖ¤Æ÷£¬ÒòΪ¿Í»§¶Ë¿ÉÄÜ»áµÃµ½Ò»¸ö²»Ò»ÖµÄʵÌå¡£
¿Í»§¶Ë¿ÉÒÔÔÚ·¢³ö¼òµ¥£¨·Ç×Ó·¶Î§£©GETÇëÇóÀï¼È¿ÉÒÔ°üº¬ÈõÑéÖ¤Æ÷Ò²¿ÉÒÔ°üº¬Ç¿ÑéÖ¤Æ÷¡£¿Í»§¶Ë²»ÄÜÀûÓÃÈõÑéÖ¤Æ÷ÔÚÆäËüµÄÇëÇóÐÎʽÀï¡£
HTTP1.1ÐÒ鶨ÒåÑéÖ¤µÄΨһ¹¦ÄܾÍÊDZȽϡ£ÓÐÁ½ÖÖÑéÖ¤Æ÷µÄ±È½Ï·½·¨£¬ÕâÒÀÀµÓÚÊÇ·ñÄÜÀûÓÃÈõÑéÖ¤Æ÷½øÐбȽϡ£
.
- Ç¿±È½Ï·½·¨£ºÔÚ¿¼ÂÇÏàµÈµÄÇé¿öÏ£¬Á½ÑéÖ¤Æ÷±ØÐëÍêȫһÖ£¬²¢ÇÒÁ½¸öÑéÖ¤Æ÷¶¼ÊÇÇ¿ÑéÖ¤Æ÷¡£.
- Èõ±È½Ï·½·¨£ºÔÚ¿¼ÂÇÏàµÈµÄÇé¿öÏ£¬Á½ÑéÖ¤Æ÷±ØÐëÍêȫһÖ£¬µ«ÖÁÉÙÓÐÒ»¸öÑéÖ¤Æ÷¿ÉÄÜÔÚ²»Ó°Ïì½á¹ûµÄÇé¿öϱ»±êÃ÷Ϊ“weak”¡£
ʵÌå±êÇ©ÊÇÇ¿ÑéÖ¤Æ÷³ý·ÇËü±»ÏÔʾµØ±ê¼ÇΪÈõ(weak)µÄ¡£3.11½Ú¸ø³öÁËʵÌå±êÇ©µÄÓï·¨¡£
×îºóÐÞ¸Äʱ¼ä£¨Òë×¢£ºLast-ModifedÍ·ÓòµÄÖµ£©±»ÓÃ×÷ÇëÇóµÄÑéÖ¤Æ÷ʱĬÈÏΪÈõÑéÖ¤Æ÷£¬,³ý·ÇÂú×ãÏÂÁйæÔò²ÅÅж¨ËüÊÇÇ¿ÑéÖ¤Æ÷£º.
- ÑéÖ¤Æ÷±»Ô´·þÎñÆ÷ÓÃÀ´ºÍµ±Ç°ÊµÌåµÄÑéÖ¤Æ÷½øÐбȽϲ¢ÇÒÔ´·þÎñÆ÷ÖªµÀÏà¹ØµÄʵÌå²»»áÔÚµ±Ç°ÑéÖ¤Æ÷º¯¸ÇµÄÃëÊýÄڸıäÁ½´Î£¬
»òÕß
- ÑéÖ¤Æ÷¿ÉÄܱ»¿Í»§¶ËÓÃÓÚIf-Modified-Since »òÕß If-Unmodified-SinceÍ·ÓòÀÒòΪ¿Í»§¶ËÓÐÒ»¸ö¹ØÓÚ´ËʵÌåµÄ»º´æÏ²¢ÇÒ
- »º´æÏî°üº¬Ò»¸öÈÕÆÚÖµ£¬´ËÈÕÆÚÖµ¸ø³öÁËÔ´·þÎñÆ÷·¢ËÍÔ´ÏìÓ¦£¨Òë×¢£ºÔ´·þÎñÆ÷²úÉúµÄÏìÓ¦£©µÄʱ¼ä£¬²¢ÇÒ
- Last-ModifedÍ·ÓòÖµÖÁÉÙÌáǰÓÚÈÕÆÚÖµ£¨DateÍ·ÓòÖµ£©60Ãë¡£
»òÕß
- ÑéÖ¤Æ÷ÒѾ±»Öм仺´æÍ¬´ËʵÌåµÄ»º´æÏîÀïµÄÑéÖ¤Æ÷±È½Ï¹ý £¬²¢ÇÒ
- »º´æÏî°üº¬ÈÕÆÚÖµ£¨DateÍ·ÓòÖµ£©£¬´ËÈÕÆÚÖµÖ¸Ã÷ÁËÔ´·þÎñÆ÷·¢ËÍÔ´ÏìÓ¦µÄʱ¼ä£¬²¢ÇÒ
- Last-ModifedÍ·ÓòÖµÖÁÉÙÌáǰÓÚÈÕÆÚÖµ£¨DateÍ·ÓòÖµ£©60Ãë¡£
´ËÖÖ·½·¨ÒÀÀµÓÚÒÔÏÂÊÂʵ£¬Èç¹ûÁ½¸öÏìÓ¦±»·þÎñÆ÷ÔÚͬһÃëÄÚ±»·¢³ö£¬µ«ÕâÁ½¸öÏìÓ¦¶¼ÓÐÏàͬµÄ×îºóÐ޸ģ¨Last-Modified£©Ê±¼ä£¬ÄÇôÖÁÉÙÓÐÒ»¸öÏìÓ¦µÄÈÕÆÚÖµ£¨Òë×¢£ºDateÍ·ÓòµÄÖµ£©ºÍ×îºóÐÞ¸Äʱ¼äÖµ£¨Last-ModifedÍ·ÓòµÄÖµ£©ÊÇÏàµÈµÄ¡£60ÃëµÄÏÞÖÆÄܱ£Ö¤DateºÍLast-ModifedÍ·ÓòµÄÖµÔÚ²»Í¬Ê±¿Ì²úÉú¡£Ò»¸öʵÏÖ¿ÉÄÜ»áÀûÓôóÓÚ60ÃëµÄÖµ£¬Èç¹ûËüÈÏΪ60ÃëÌ«¶Ì¡£
Èç¹û¿Í»§¶ËÏ£ÍûÖ´ÐÐ×Ó·¶Î§(sub-range)ÇëÇóÀ´ÇëÇóÒ»¸öÖ»ÓÐ×îºóÐ޸ģ¨Last-Modifed£©Ê±¼äºÍ¶øÃ»ÓÐ͸Ã÷ÑéÖ¤Æ÷µÄֵʱ£¬Ëü¿ÉÄÜ»áÈÏΪֻÓÐ×îºóÐ޸ģ¨Last-Modified£©Ê±¼äÊÇÇ¿µÄ¡£
Èô»º´æ»òÔ´·þÎñÆ÷ÊÕµ½Ò»¸öÌõ¼þÇëÇ󣬶ø²»Êǵõ½ÍêÕûÏìÓ¦µÄGETÇëÇóʱ£¬Ëû±ØÐëʹÓÃÇ¿±È½Ï·½·¨È¥¼ÆËã´ËÌõ¼þ¡£
´Ë¹æ¶¨ÔÊÐíHTTP1.1µÄ,»º´æºÍ¿Í»§¶Ë°²È«µØÖ´ÐÐ×Ó·¶Î§£¨sub-range£©ÇëÇóÀ´ÇëÇó´ÓHTTP/1.0µÃÀ´µÄÖµ¡£
13.3.4 ¹ØÓÚºÎʱʹÓÃʵÌå±êÇ©ºÍ×îºóÐÞ¸Äʱ¼äµÄ¹æÔò
ÎÒÃǶÔÔ´·þÎñÆ÷£¬¿Í»§¶ËºÍ»º´æ²ÉÓÃÒ»Ì×¹æÔòºÍ½¨ÒéÀ´¹æ¶¨²»Í¬µÄÑéÖ¤Æ÷ºÎʱӦ¸Ã±»Ê¹Ó㬳ö
ÓÚºÎÖÖÄ¿µÄ±»Ê¹Óá£
HTTP/1.1 Ô´·þÎñÆ÷£º
- Ó¦¸Ã·¢ËÍÒ»¸öʵÌå±êÇ©ÑéÖ¤Æ÷³ý·ÇÔ´·þÎñÆ÷²úÉúÕâÑùÒ»¸öʵÌå±êÇ©²»¿ÉÐС£
- ¿ÉÄܻᷢËÍÈõʵÌå±êÇ©¶ø²»ÊÇǿʵÌå±êÇ©£¬Èç¹ûʹÓÃÈõʵÌå±êÇ©ÄÜÌá¸ßÐÔÄܵϰ»òÕßÈç¹û·¢ËÍÒ»¸öǿʵÌå±êÇ©²»¿ÉÐеÄÇé¿öÏ¡£
- Ó¦¸Ã·¢ËÍÒ»¸öLast-ModifedÖµÈç¹û¿ÉÐеϰ£¬³ý·Ç´òÆÆÓïÒå͸Ã÷ÐÔ£¨Õâ¿ÉÄÜÓÉÀûÓÃIf-Modified-SinceÍ·ÓòÀïµÄÈÕÆÚ²úÉú£©¿ÉÄܻᵼÖÂÑÏÖØµÄºó¹û¡£
»»¾ä»°Ëµ£¬¶ÔHTTP1.1Ô´·þÎñÆ÷À´Ëµ£¬±È½ÏºÃµÄ×ö·¨ÊÇͬʱ·¢ËÍǿʵÌå±êÇ©ºÍLast-ModifiedÖµ¡£.
ΪÁ˺Ϸ¨£¬Ç¿ÊµÌå±êÇ©±ØÐëËæÏà¹ØÁªµÄʵÌåÖµ¸Ä±ä¶ø¸Ä±ä¡£ÈõʵÌå±êǩӦ¸ÃËæÏà¹ØÁªµÄʵÌåÔÚÓïÒåÉÏ·¢Éú¸Ä±ä¶ø¸Ä±ä¡£
×¢Ò⣺Ϊ±£Ö¤ÓïÒå͸Ã÷»º´æ£¬Ô´·þÎñÆ÷±ØÐë±ÜÃâΪÁ½¸ö²»Í¬µÄʵÌåÖØ¸´ÀûÓÃÒ»¸öÌØ¶¨µÄǿʵÌå±êǩֵ¡£»º´æÏîÓ¦¸ÃÄܱ£³ÖÈÎÒⳤµÄʱ¼ä£¬¶ø²»¹Ü¹ýÆÚʱ¼ä£¨expiraton time£©£¬ËùÒÔ»º´æ¿ÉÄÜ»áÔÙÈ¥³¢ÊÔÈ¥ÀûÓÃÔÚ¹ýȥijһʱ¿Ì»ñµÃµÄÑéÖ¤Æ÷È¥ÑéÖ¤»º´æÏî¡£
HTTP/1.1 ¿Í»§¶Ë£º
- ÈôʵÌå±êÇ©±»Ô´·þÎñÆ÷Ìṩ£¬HTTP/1.1¿Í»§¶Ë±ØÐëÔÚÈκλº´æÌõ¼þÇëÇó£¨ÀûÓÃÁËIf-Match»òIf-None-MatchµÄÇëÇó£©ÀïÀûÓÃʵÌå±êÇ©.¡£
- ½öµ±Last-ModifiedÖµ±»Ô´·þÎñÆ÷Ìṩʱ£¬HTTP/1.1¿Í»§¶ËÓ¦¸ÃÔÚ·Ç×Ó·¶Î§»º´æÌõ¼þÇëÇó£¨ÀûÓÃIf-Modified-Since£©ÀïÀûÓôËÖµ¡£
- ½öµ±Last-ModifiedÖµ±»HTTP/1.0Ô´·þÎñÆ÷Ìṩ£¬HTTP/1.1¿Í»§¶Ë¿ÉÄÜ»áÔÚ×Ó·¶Î§»º´æÌõ¼þÇëÇó£¨ÀûÓÃÁËIf-Unmodified-Since£©ÀïÀûÓôËÖµ¡£
- Èç¹ûÒ»¸öʵÌå±êÇ©ºÍLast-ModifiedÖµ±»Ô´·þÎñÆ÷Ìá¸ß£¬HTTP/1.1¿Í»§¶ËÓ¦¸ÃÔÚ»º´æÌõ¼þÇëÇóÀïÀûÓÃÕâÁ½¸öÑéÖ¤Æ÷¡£ÕâÔÊÐíHTTP/1.1ºÍHTTP/1.1»º´æÄܺÏÊʵؽøÐÐÏìÓ¦¡£
HTTP/1.1Ô´·þÎñÆ÷£¬µ±½ÓÊÕµ½Ò»¸öÌõ¼þÇëÇó²¢ÇÒ´ËÇëÇóͬʱ°üº¬Last-ModifedÈÕÆÚ£¨ÀýÈ磬ÔÚIf-Modified-Since£¬»òIf-Unmodified-SinceÍ·ÓòÀºÍÒ»¸ö»ò¶à¸öʵÌå±êÇ©£¨ÀýÈçÔÚIf-Match£¬If-None=Match£¬»òIf-RangeÍ·ÓòÀ×÷Ϊ»º´æÑéÖ¤Æ÷ʱ£¬Ô´·þÎñÆ÷²»ÄÜ·µ»ØÒ»¸ö304״̬ÏìÓ¦£¨Not Modified£©³ý·ÇÕâÑù×öÄܵ±µ±Ç°ÊµÌåµÄÑéÖ¤Æ÷ºÍÇëÇóÀïËùÓеÄÌõ¼þÍ·ÓòÀïµÄÑéÖ¤Æ÷Ò»Ö¡£
HTTP/1.1»º´æ·þÎñÆ÷£¬µ±½ÓÊÕµ½Ò»¸öÌõ¼þÇëÇó²¢ÇÒ´ËÇëÇóÀïͬʱ°üº¬Last-ModifiedÈÕÆÚºÍÒ»¸ö»ò¶à¸öʵÌå±êÇ©×÷Ϊ»º´æÑéÖ¤Æ÷ʱ£¬Ëü²»ÄÜ·µ»ØÒ»¸ö±¾µØµÄ¸±±¾¸ø¿Í»§¶Ë³ý·ÇÄǸö¸±±¾µÄÑéÖ¤Æ÷ºÍËùÓÐÇëÇóÀïÌõ¼þÍ·ÓòÀïµÄÑéÖ¤Æ÷Ò»Ö¡£
×¢Ò⣺ÕâЩ¹æÔò±³µÄ³£ÓõÄÔÔòÊÇHTTP/1.1·þÎñÆ÷ºÍ¿Í»§¶ËÓ¦¸ÃÔÚÇëÇóºÍÏìÓ¦Àᄀ¿ÉÄÜ´«Êä·ÇÈßÓàµÄÐÅÏ¢¡£½ÓÊÕÕâЩ·ÇÈßÓàÐÅÏ¢µÄHTTP/1.1ϵͳ½«»á¼ÙÉèËü½ÓÊÕÁËÑéÖ¤Æ÷¡£
HTTP/1.0¿Í»§¶ËºÍ»º´æ½«»áºöÂÔʵÌå±êÇ©¡£Í¨³££¬Last-ModifiedÖµ±»ÕâЩϵͳ½ÓÊպ󽫻ᱣ֤͸Ã÷ºÍ¸ßЧµÄ»º´æÐÐΪ£¬ËùÒÔHTTP/1.1Ô´·þÎñÆ÷Õâʱ½«»áÌṩLast-ModifiedÖµ¡£ÔÚÕâЩÇé¿öÏ£¬µ±HTTP/1.0ϵͳÀûÓÃÒ»¸öLast-ModifiedÖµ×÷Ϊһ¸öÑéÖ¤Æ÷¿ÉÄÜ»á´øÀ´ÑÏÖØµÄºó¹ûʱ£¬HTTP/1.1·þÎñÆ÷½«²»»áÌṩLast-ModifiedÖµ¡£
13.3.5·ÇÑéÖ¤Ìõ¼þ£¨Non-validating Conditionls£©
ʵÌå±êÇ©±³ºóµÄÔÔòÊÇÖ»ÓзþÎñµÄ×÷Õß²ÅÖªµÀ×ÊÔ´µÄÓïÒå¶øÈ¥Ñ¡ÔñÒ»¸öºÏÊʵĻº´æÑéÖ¤»úÖÆ£¬²¢ÇÒÈκÎÑéÖ¤Æ÷±È½Ï·½·¨µÄ±ê×¼¶¼¿ÉÄÜ»á´øÀ´·çÏÕ¡£ËùÒÔ£¬ÈÎºÎÆäËûµÄÍ·ÓòµÄ±È½Ï£¨³ýÁËLast-Modified£¬ÎªÁ˼æÈÝHTTP/1.0£©´ÓÀ´²»»á±»ÓÃÓÚÑéÖ¤»º´æÏî¡£
13.4 ÏìÓ¦µÄ¿É»º´æÐÔ£¨Response Cacheability£©
³ý·Ç±»»º´æ¿ØÖÆ£¨¼û14.9½Ú£©Ö¸ÁîÃ÷È·µØÏÞÖÆ£¬»º´æÏµÍ³¿ÉÒÔ½«Ò»³É¹¦µÄÏìÓ¦×÷Ϊ»º´æÏ¿ÉÒÔ·µ»Ø»º´æÏîÀïµÄÏìÓ¦¸±±¾¶ø²»ÐèÒªÑéÖ¤ËüÈç¹û´Ë¸±±¾ÊDZ£Ïʵ쬲¢ÇÒÒ²¿ÉÒÔÔÚÑéÖ¤³É¹¦ºó·µ»ØËü¡£Èç¹û¼ÈûÓкÍÏìÓ¦Ïà¹ØµÄ»º´æÑéÖ¤Æ÷ҲûÓкÍÏìÓ¦Ïà¹ØµÄÏÔʾ¹ýÆÚʱ¼ä£¨explicit expiration time£¬Òë×¢£º¼û13.3.1½ÚÀï¹ØÓÚʲôÊÇÏÔʾ¹ýÆÚʱ¼äµÄ˵Ã÷£©£¬ÎÒÃDz»»áÈÏΪËüÊǿɻº´æµÄ£¬µ«ÊÇijЩ»º´æ¿ÉÄÜ»áÎ¥·´Õâ¸öÆÚÍû£¨ÀýÈ磬µ±²»ÄܽøÐÐÍøÂçÁ¬½Óʱ£©¡£¿Í»§¶ËÄܾ³£·¢ÏÖ´Ó»º´æÀï»ñµÃµÄÏìÓ¦£¬Ö»ÐèҪͨ¹ý°ÑDateÍ·Óòֵͬµ±Ç°Ê±¼ä×÷±È½Ï¡£
×¢Ò⣺ijЩHTTP1.0»º´æ¿ÉÄÜÎ¥·´ÕâÒ»ÆÚÍû¶ø²»Ìáʾ¾¯¸æ¡£
»¹ÓÐ,ijЩÇé¿öÏ¿ÉÄܲ»±ã±£ÁôһʵÌå,»ò½«Æä·µ»Ø¸øºóÐøÇëÇó.
È»¶ø£¬ÔÚһЩÇé¿öÏ£¬»º´æ²»Êʺϱ£´æÒ»¸öʵÌ壬»òÕß²»ÊʺϰÑËü·ÅÓÚºóÐøÇëÇóµÄÏìÓ¦Àï¡£Õâ¿ÉÄÜÒòΪ·þÎñ×÷ÕßÈÏΪÍêÈ«ÓïÒå͸Ã÷ÐÔÊÇÓбØÒªµÄ£¬»ò×ÅÒòΪ°²È«ºÍÒþ˽µÄ¿¼ÂÇ¡£Ä³Ð©»º´æ¿ØÖÆÖ¸ÁîÊÇΪÁËÈ÷þÎñÆ÷ÄÜÖ¸Ã÷ijЩ×ÊԴʵÌå»òÆäÖеÄÒ»²¿·Ö²»Äܱ»»º´æ¡£
×¢ÒâÔÚ14.8½ÚÀïÃèÊöÁË·ÀÖ¹Ò»¸ö¹²Ïí»º´æÈ¥±£´æºÍ·µ»ØÒ»¸öÒÔǰÇëÇóµÄÏìÓ¦£¬Èç¹ûÄǸöÇëÇó°üº¬Ò»¸öAuthorizationÍ·Óò¡£
³ý·Ç»º´æ¿ØÖÆÖ¸Áî·ÀÖ¹´ËÏìÓ¦±»»º´æ£¬Ò»¸ö½ÓÊÕµÄÏìÓ¦Èç¹ûËüµÄ״̬ÂëÊÇ200£¬203£¬206£¬300£¬301»ò410£¬ÄÇô´ËÏìÓ¦Ó¦¸Ã±»»º´æ±£´æ¶øÇÒ¿ÉÓÃÓÚºóÐøµÄÇëÇ󣬵«Õâ±ØÐëÊÜÏÞÓÚ¹ýÆÚ»úÖÆ£¨expiration mechanism£©¡£È»¶ø£¬»º´æÈç¹û²»Ö§³ÖRangeºÍContent-RangeÍ·Óò£¬ÄÇôËü²»ÄÜ»º´æ206ÏìÓ¦£¨²¿·ÖÄÚÈÝ£©ÏìÓ¦¡£
½ÓÊÕµ½µÄÏìÓ¦Èç¹ûÊÇÆäËûµÄ״̬Â루È磬302ºÍ307£©£¬ÄÇô´ËÏìÓ¦²»Äܱ»ÓÃÓÚ·þÎñÓÚºóÐøµÄÇëÇ󣬳ý·Ç»º´æ¿ØÖÆÖ¸Áî»òÆäËûµÄÍ·ÓòÃ÷È·µØÔÊÐíËüÄÜÕâÑù×ö¡£ÀýÈ磬ÕâЩͷÓò°üº¬ÏÂÃæµÄÍ·Óò£ºExpiresÍ·Óò£¨¼û14.21£©£»“max-age”£¬“s-maxage”£¬“must-revalidate”£¬“prox-revalidate”£¬“public”»ò“private”»º´æ¿ØÖÆÖ¸Á¼û14.9£©¡£
13.5 ´Ó»º´æÀï¹¹ÔìÏìÓ¦
»º´æµÄÄ¿µÄÊÇ´æ´¢ÇëÇóµÄÏìÓ¦ÐÅÏ¢£¬ÎªÁËÏìÓ¦½«À´µÄÇëÇó¡£ÔںܶàÇé¿öÏ£¬»º´æÄÜ·µ»ØÏìÓ¦µÄºÏÊʲ¿·Ö¸øÇëÇóÕß¡£È»¶ø£¬Èç¹û»º´æÓµÓÐÒ»¸ö»ùÓÚÒÔǰÏìÓ¦µÄ»º´æÏËü¿ÉÄܱØÐë°ÑÐÂÏìÓ¦µÄ²¿·ÖºÍËü»º´æÏîÀïµÄÄÚÈÝºÏÆðÀ´¡£
13.5.1End-to-endºÍHop-by-hopÍ·Óò
Ϊ¶¨Ò建´æºÍ·Ç»º´æ´úÀí·þÎñÆ÷µÄÐÐΪ£¬ÎÒÃǽ«HTTPÍ·Óò·Ö³ÉÁ½Àࣺ
- end-to-endÍ·Óò£¬ËûÃDZ»´«Ê䏸×îÖÕÇëÇó»òÏìÓ¦µÄ½ÓÊÕÕß¡£ÏìÓ¦Àïend-to-endÍ·Óò±ØÐè×÷Ϊ»º´æÏîµÄÒ»²¿·Ö´æ´¢£¬²¢ÇÒ±ØÐëÔÚ´Ó»º´æÏîÐγɵÄÏìÓ¦Àï´«Êä¡£
- hop-by-hopÍ·Óò£¬ËûÃDZ»Ö»¶Ô´«Êä²ãÉϵÄÁ¬½ÓÓÐÒâÒ壬²¢ÇÒ²»Äܱ»»º´æ±£´æ»ò±»´úÀíת·¢¡£
ÏÂÃæµÄHTTP/1.1Í·ÓòÊÇhop-by-hopÍ·Óò£º
- Connection
- Keep-Alive
- Proxy-Authenticate
- Proxy-Authorization
- TE
- Trailers
- Transfer-Encoding
- Upgrade
ËùÓÐÆäËû±»HTTP/1.1¶¨ÒåµÄÍ·Óò¾ùΪend-to-endÍ·Óò¡£
13.5.2²»¿É¸ü¸ÄµÄÍ·Óò £¨Non-modifiable Headers£©
HTTP1.1µÄÄ³Ð©ÌØÕ÷£¬ÈçÊý×ÖÈÏÖ¤£¬»ùÓÚijһЩend-to-endÍ·Óò¡£Ò»¸ö͸Ã÷´úÀí²»Ó¦¸Ã¸Ä±äend-to-endÍ·Óò£¬³ý·ÇÕâЩͷÓòµÄ¶¨ÒåÒªÇó»òÔÊÐíËüÕâÑù×ö¡£
Ò»¸ö͸Ã÷´úÀí£¨Òë×¢£º´úÀíÒ»°ãÊÇ»º´æ£¬»º´æ¿ÉÒԽлº´æ´úÀí£¬»º´æ·þÎñÆ÷£¬´úÀí·þÎñÆ÷£©²»ÄܸıäÇëÇó»òÏìÓ¦ÀïµÄÏÂÃæµÄÍ·Óò£¬¶øÇÒËü²»ÄÜÌí¼ÓÕâЩͷÓòµ½Ã»ÓÐÕâЩͷÓòµÄÇëÇó»òÏìÓ¦À
- Contents-location
- Content-MD5
- ETag
- Last-Modified
Ò»¸ö͸Ã÷´úÀí²»ÄܸıäÏìÓ¦ÀïÏÂÃæµÄµÄÍ·Óò£º
- Expires
µ«Ëü¿ÉÒÔÌí¼ÓÕâЩͷÓòÈç¹ûÏìÓ¦ÀïûÓÐÕâЩͷÓòµÄʱºò¡£Èç¹ûÒ»¸öExpiresÍ·Óò±»Ìí¼Ó£¬Ëü±ØÐëµÈÓÚÏìÓ¦ÀïDateÍ·ÓòµÄÖµ¡£
Ò»¸ö´úÀí£¨Òë×¢£º»º´æ¾ÍÊÇÒ»¸ö´úÀí£¬ÎÒÃÇÒ»°ã³Æ×ö»º´æ´úÀí£¬»ò»º´æ·þÎñÆ÷£¬»ò»º´æ´úÀí·þÎñÆ÷£¬¶¼ÊÇÒ»¸öÒâ˼£©²»ÄÜÔÚÏûÏ¢Öиıä»òÌí¼ÓÏÂÃæµÄÍ·ÓòÈç¹û´ËÏûÏ¢°üº¬no-transform»º´æ¿ØÖÆÖ¸Á»òÔÚÈκÎÇëÇóÀïÒ²²»ÄÜÌí¼Ó»ò¸Ä±äÕâЩͷÓò¡£
- Content-Encoding
- Content-Range
- Content-Type
Ò»¸ö·Ç͸Ã÷´úÀí¿ÉÄÜ»á¸Ä±ä»òÌí¼ÓÕâЩͷÓò¸øÒ»¸öÏûÏ¢Èç¹û´ËÏûÏ¢²»°üº¬no-transform»º´æ¿ØÖÆÖ¸Áµ«ÊÇÈç¹û´úÀíÕâÑù×öÁË£¬Ëü±ØÐëÌí¼ÓÒ»¸ö¾¯¸æ214£¨×ª»»±»Ó¦Óã©£¨¼û14.46½Ú£©¡£
¾¯¸æ£ºend-to-endÍ·ÓòµÄ²»±ØÒªµÄ¸Ä±ä¿ÉÄܻᵼÖÂÈÏÖ¤»úµÄʧ°ÜÈç¹û¸üÇ¿µÄÈÏÖ¤»úÖÆ±»Ó¦ÓÃÓÚºóÐøµÄHTTP°æ±¾ÖС£´ËÈÏÖ¤»úÖÆ¿ÉÄÜÒÀÀµÓÚûÓÐÔڴ˳öÏÖµÄÍ·ÓòÖµ¡£
ÇëÇó»òÏìÓ¦ÀïµÄContent-LengthÍ·Óò±»Ìí¼Ó»ò±»É¾³ý»á¸ù¾Ý4.4½ÚµÄ¹æÔò¡£Ò»¸ö͸Ã÷´úÀí±ØÐë±£ÁôʵÌåÖ÷ÌåµÄentity-length£¨¼û7.2.2£©£¬¾¡¹ÜËü¿ÉÒÔ¿ÉÄܸıätransfer-length£¨4.4½Ú£©¡£
13.5.3ÁªºÏÍ·Óò£¨Combining Headers£©
µ±Ò»¸ö»º´æ¶Ô·þÎñÆ÷·¢³öÑéÖ¤ÇëÇóʱ£¬¶øÇÒ·þÎñÆ÷Ìṩ304£¨Ã»Óиı䣩ÏìÓ¦»ò206£¨²¿·ÖÄÚÈÝ£©ÏìӦʱ£¬ÄÇô»º´æ½«¹¹ÔìÒ»¸öÏìÓ¦·¢Ë͸øÇëÇó¿Í»§¶Ë¡£
Èç¹û״̬ÂëÊÇ304£¨Ã»Óиı䣩£¬»º´æÀûÓûº´æÏîÀïµÄʵÌåÖ÷Ì壨entity-body£©×÷Ϊ¿Í»§¶ËÇëÇóÏìÓ¦µÄʵÌåÖ÷Ìå¡£Èç¹ûÏìӦ״̬ÂëÊÇ206£¨²¿·ÖÄÚÈÝ£©²¢ÇÒEtag»òLast-ModifiedÍ·ÓòÄܾ«È·Æ¥Å䣬ÄÇô»º´æ¿ÉÄܰѴæÈ뻺´æÏîÀïµÄÄÚÈݺͽÓÊÕµ½µÄÏìÓ¦ÀïµÄÐÂÄÚÈݺϲ¢²¢ÇÒÀûÓÃ×îºóºÏ²¢µÄ½á¹û×÷ΪÊä³öÏìÓ¦£¨¼û13.5.4£©¡£
´æ´¢ÓÚ»º´æÏîÀï¶Ëend-to-endÍ·Óò±»ÓÃÓÚ¹¹ÔìÏìÓ¦£¬³ýÁË£º
- Èκδ洢µÄ¾¯¸æÂëÊÇ1xx£¨¼û14.46£©WarningÍ·Óò±ØÐë´Ó»º´æÏîºÍת·¢µÄÏìÓ¦Àïɾ³ý¡£
- Èκδ洢µÄ¾¯¸æÂëÊÇ2xxµÄWarningÍ·Óò±ØÐëÒªÔÚ»º´æÏîºÍת·¢µÄÏìÓ¦Àï±£Áô¡£
- ÈκÎÔÚ304»ò206ÏìÓ¦ÀïµÄend-to-endÍ·Óò±ØÐëÌæ»»»º´æÏîÀïÏàÓ¦µÄÍ·Óò
³ý·Ç»º´æ¾ö¶¨È¥É¾³ý»º´æÏ·ñÔòËü±ØÐëÕÕÑùÄÜÓýÓÊÕµÄÏìÓ¦ÀïµÄÏàÓ¦µÄend-to-endÍ·ÓòÈ¥Ìæ»»´æ´¢ÔÚ»º´æÏîÀïµÄÍ·Óò£¬³ýÁËÉÏÃæÃèÊöµÄWarningÍ·Óò¡£Èç¹ûÊäÈëÏìÓ¦ÀïµÄÒ»¸öÍ·ÓòÆ¥Å仺´æÏîÀï¶à¸öÍ·Óò£¬ÄÇôËùÓÐÕâЩ¾ÉµÄÍ·Óò±ØÐë±»Ìæ»»¡£
´ÓÁíÒ»·½ÃæËµ£¬ÊäÈëÏìÓ¦µÄËùÓÐend-to-endÍ·Óò»á¸²¸Ç»º´æÏîÀïËùÓÐÏàÓ¦µÄend-to-endÍ·Óò£¨³ýÁË»º´æµÄ¾¯¸æÂëÊÇ1xxµÄWarningÍ·Óò£¬Ëü½«»á±»É¾³ý¼´Ê¹Ã»Óб»¸²¸Ç£©¡£
×¢Ò⣺´Ë¹æÔòÔÊÐíÔ´·þÎñÆ÷È¥ÀûÓÃ304£¨Ã»Óиı䣩»òÒ»¸ö206£¨²¿·ÖÄÚÈÝ£©ÏìӦȥ¸üÐÂÈκÎͬһʵÌå»òʵÌåµÄ×Ó·¶Î§µÄÒÔǰÏìÓ¦µÄÍ·Óò£¬ËäÈ»Ëü¿ÉÄÜûÓÐÒâÒå»òÕâÑù×ö²»ÕýÈ·¡£ÕâÌõ¹æÔò²»ÔÊÐíÔ´·þÎñÆ÷È¥ÀûÓÃ304£¨Ã»Óиı䣩»ò206£¨²¿·ÖÄÚÈÝ£©ÏìӦȥÍêÈ«µØÉ¾³ýÒ»¸öÒÔǰÏìÓ¦µÄÍ·Óò¡£
13.5.4ÁªºÏ×Ö½Ú·¶Î§£¨Combing Byte Ranges£©
Ò»ÌõÏìÓ¦¿ÉÄܽö´«ËÍÒ»¸öʵÌåÖ÷ÌåµÄijһ²¿·Ö£¬ÕâÊÇÓÉÓÚÇëÇó°üº¬Ò»¸ö»ò¶à¸öRangeÖ¸¶¨µÄ·¶Î§£¬»òÕßÓÉÓÚÁ¬½Ó»á±»¹ýÔçµØ¶Ï¿ª¡£ÔÚ¼¸´ÎÕâÑùµÃ´«Êäºó£¬»º´æ¿ÉÄÜÒѾ½ÓÊÕÁËͬһ¸öʵÌåÖ÷ÌåµÄ¶à¸ö·¶Î§²¿·Ö¡£
Èç¹û»º´æÓÐÒ»¸öʵÌåµÄ·Ç¿Õ×Ó·¶Î§£¬²¢ÇÒÒ»¸öÊäÈ루incoming£©ÏìÓ¦£¨Òë×¢£ºÊäÈëÏìÓ¦ÊǽøÈ뻺´æµÄÏìÓ¦£¬Êä³öÏìÓ¦ÊÇ´Ó»º´æ³öÈ¥µÄÏìÓ¦£©Ð¯´øÁËÁíÒ»¸ö×Ó·¶Î§£¬ÄÇô»º´æ¿ÉÄÜ»á°ÑеÄ×Ó·¶Î§ºÍÒѾ´æÔÚµÄ×Ó·¶Î§ÁªºÏÆðÀ´Èç¹ûÁ½Õß×ñÑÏÂÃæµÄ¹æÔò£º
- ÊäÈëÏìÓ¦ºÍ»º´æÏî¶¼Óлº´æÑéÖ¤Æ÷¡£
- µ±ÀûÓÃÇ¿±È½Ï·½·¨µÄʱºò£¬Á½¸ö»º´æÑéÖ¤Æ÷ÍêȫƥÅ䣨¼û13.3.3£©¡£
Èç¹ûÈκÎÒ»¸öÒªÇó²»ÄÜÂú×㣬»º´æ±ØÐëÀûÓÃ×î½üµÄ²¿·ÖÏìÓ¦£¨Õâ»ùÓÚÈκÎÏìÓ¦µÄDateÍ·ÓòÖµ£¬²¢ÇÒ»áÀûÓÃÊäÈëÏìÓ¦Èç¹ûÕâЩDateÍ·ÓòÖµÏàµÈ»ò¶ªÊ§ÁË£©£¬¶øÇÒ±ØÐ붪ÆúÆäËûµÄ²¿·ÖÐÅÏ¢¡£
13.6 »º´æÒѾÐÉ̹ýµÄÏìÓ¦£¨Caching Negotiated Responses£©
ÔÚVaryÍ·Óò³öÏÖÔÚÏìÓ¦ÀïµÄʱºò£¬·þÎñÆ÷Çý¶¯ÄÚÈÝÐÉÌ£¨12.1½Ú£©µÄʹÓûá¸Ä±ä»º´æÀûÓÃÏìӦȥÏìÓ¦ºóÐøÇëÇóÀûÓõÄÌõ¼þºÍ¹ý³Ì¡£¼û14.44½Ú¹ØÓÚ·þÎñÆ÷ÀûÓÃVaryÍ·ÓòµÄÃèÊö¡£
·þÎñÆ÷Ó¦¸ÃÀûÓÃVaryÍ·Óòȥ֪ͨһ¸ö»º´æÊ²Ã´ÑùµÄÇëÇóÍ·ÓòÓ¦¸Ã±»Ê¹ÓôӶø´ÓÒ»¸ö¿É»º´æµÄ²¢ÊÜÏÞÓÚ·þÎñÆ÷Çý¶¯ÐÉ̵ÄÏìÓ¦µÄ¶à¸ö±íÏÖÐÎʽÖÐÑ¡ÔñºÏÊʵıíÏÖÐÎʽ¡£VaryÍ·ÓòÀïÖ¸¶¨µÄÍ·Óò±»³Æ×öÑ¡ÔñÇëÇóÍ·Óò£¨selecting request-header£©¡£
µ±»º´æ½ÓÊÕµ½Ò»¸öºóÐøµÄÇëÇ󣬴ËÇëÇóµÄURI¶ÔÓ¦Ò»¸ö»ò¶à¸ö°üº¬ÁËVaryÍ·ÓòµÄ»º´æÏîʱ£¬´Ë»º´æ²»ÄÜÀûÓÃÕâÑùÒ»¸ö»º´æÏîÈ¥¹¹Ôì³öÒ»¸öÏìӦȥ·þÎñÓÚÐÂÀ´µÄÇëÇ󣬳ý·ÇËùÓгöÏÖÔÚÐÂÇëÇóÀïµÄÑ¡ÔñÇëÇóÍ·ÓòÆ¥Åä´æ´¢ÔÚÔ´ÇëÇóÀï±»´æ´¢µÄÇëÇóÍ·Óò¡£
ÔÚÁ½¸öÇëÇóÀÎÒÃǶ¨ÒåÕâÁ½¸öÑ¡ÔñÇëÇóÍ·ÓòÆ¥Å䣬Èç¹û²¢ÇÒÖ»ÓеÚÒ»¸öÇëÇóµÄÑ¡ÔñÇëÇóÍ·ÓòÄܱ»×ª»»ÎªµÚ¶þ¸öÇëÇóÀïµÄÍ·Óòͨ¹ýÌí¼Ó»òɾ³ýÏßÐÔ¿Õ°×£¨±»ÔÊÐí³öÏÖÔÚÏàÓ¦µÄBNFÀïµÄÏßÐÔ¿Õ°×£©ºÍ/»ò°Ñ¶à¸öÏûϢͷÓò½áºÏ³ÉÒ»¸öÍ·Óòͨ¹ý4.2½ÚÀïµÄ¹æÔò¡£
Ò»¸öVaryÍ·ÓòÖµÊÇ“*”×ÜÊDz»ÄÜÆ¥ÅäµÄ£¬²¢ÇÒºóÐøÄǸö×ÊÔ´µÄÇëÇóÖ»ÄܺÏÊʵر»Ô´·þÎñÆ÷½âÎö¡£
Èç¹û»º´æÏîÀïµÄÑ¡ÔñÇëÇóÍ·Óò£¨selecting request-header£©²»ÄÜÆ¥ÅäÐÂÇëÇóµÄÑ¡ÔñÇëÇóÍ·Óò£¬ÄÇô»º´æ²»ÄÜÀûÓûº´æÏîÈ¥Âú×ãÇëÇó³ý·ÇËüÄÜÒÔÒ»¸öÌõ¼þÇëÇó°Ñ´ËÐÂÇëÇó½ÓÁ¦µ½Ô´·þÎñÆ÷²¢ÇÒ´ËÔ´·þÎñÆ÷ÒÔÒ»¸ö304£¨Ã»Óиı䣩µÄ״̬Âë½øÐÐÏìÓ¦²¢°üº¬Ò»¸öʵÌå±êÇ©»òÕßContent-LocationÍ·ÓòÖ¸Ã÷½«Òª±»Ê¹ÓõÄʵÌå¡£
Èç¹ûÒ»¸öʵÌå±êÇ©±»¸³ÓèÒ»¸ö»º´æµÄ±íÏÖÐÎʽ£¬ÄÇô´Ëת·¢µÄÇëÇó½«ÊÇÌõ¼þµÄ²¢ÇÒËùÓÐÄǸö×ÊÔ´µÄ»º´æÏîµÄʵÌå±êÇ©½«»á±»°üº¬ÓÚIf-None-MatchÍ·ÓòÀï¡£ÕâÏò·þÎñÆ÷±í´ïµ±Ç°»º´æÓµÓеÄʵÌ弯£¬ÒÔÖÁÓÚÈç¹ûÕâЩʵÌåÀïµÄÈκÎʵÌ寥ÅäÇëÇóµÄʵÌ壬·þÎñÆ÷»áÀûÓÃEtagÍ·ÓòÔÚ304£¨Ã»Óиı䣩ÏìÓ¦ÀïÈ¥¸æËß»º´æÄĸö»º´æÏîÊǺÏÊʵġ£Èç¹ûÐÂÏìÓ¦µÄʵÌå±êǩƥÅäÒѾ´æÔڵĻº´æÏÄÇôÐÂÏìÓ¦Ó¦¸Ã±»ÀûÓÃÈ¥¸üÐÂÒѾ´æÔڵĻº´æÏîµÄÍ·Óò£¬¶øÇҴ˽á¹û±ØÐë·µ»Ø¸ø¿Í»§¶Ë¡£
Èç¹ûÈκÎÒѾ´æÔڵĻº´æÏî°üº¬Ö»ÓÐÏà¹ØÊµÌåµÄ²¿·ÖÄÚÈÝ£¬ÄÇô´ËʵÌåµÄʵÌå±êÇ©²»Ó¦¸Ã±»°üº¬ÔÚIf-None-MatchÍ·ÓòÀï³ý·ÇÕâ¸öÇëÇóÊÇΪÁËÇëÇóʵÌåµÄÒ»¸ö·¶Î§£¬´Ë·¶Î§ÍêÈ«¿ÉÒÔ±»»º´æÏîÂú×ã¡£
Èç¹û»º´æ½ÓÊÕµ½Ò»¸ö³É¹¦µÄÏìÓ¦£¬´ËÏìÓ¦µÄContent-LocationÍ·ÓòÆ¥ÅäÓÚÒѾ´æÔڵĻº´æÏîµÄContent-LocationÍ·Óò¶ÔͬһÇëÇóURIÀ´Ëµ£¬²¢ÇÒ´ËÏìÓ¦µÄʵÌå±êÇ©²»Í¬ÓÚÒѾ´æÔڵĻº´æÏîµÄʵÌå±êÇ©£¬¶øÇÒ´ËÏìÓ¦µÄDateÍ·ÓòÖµ±ÈÒѾ´æÔڵĻº´æÏî¸ü½ü£¬ÄÇôÒѾ´æÔڵĻº´æÏî²»Äܱ»·µ»ØÈ¥ÏìÓ¦½«À´µÄÇëÇó²¢ÇÒ½«»á´Ó»º´æÀïɾ³ý¡£
13.7 ¹²ÏíºÍ·Ç¹²Ïí»º´æ £¨Shared and Non-Shared Caches£©
³öÓÚ°²È«ºÍ±£ÃÜ¿¼ÂÇ£¬ÓбØÒªÇø·Ö¹²ÏíºÍ·Ç¹²Ïí»º´æ¡£·Ç¹²Ïí»º´æÊǽö¹©Ò»¸öÓû§Ê¹ÓõĻº´æ£¬´ËÖÖÇé¿öÏ£¬¿ÉÓÃÐÔÓÉÊʵ±µÄ°²È«»úÖÆ¿ØÖÆ¡£ËùÓÐÆäËüµÄ»º´æ¾ù±»ÈÏΪÊǹ²Ïí»º´æ¡£´ËÐÒéµÄÆäËü²¿·Ö¸øÒ»Ð©¶Ô¹²Ïí»º´æµÄÏÞÖÆÒÔ·ÀÖ¹Òþ˽¶ªÊ§»ò·ÃÎÊ¿ØÖƵÄʧ°Ü¡£
13.8 ´íÎóºÍ²»ÍêÈ«µÄÏìÓ¦»º´æÐÐΪ
»º´æÊÕµ½²»ÍêÕûÏìÓ¦£¨ÀýÈçÏìÓ¦µÄ×Ö½ÚÊý±ÈContent-LengthÍ·ÓòÖ¸¶¨µÄֵҪС£©Ò²¿ÉÒÔ´æ´¢Ëü£¬µ«ÊDZØÐë°ÑËü¿´×÷²¿·ÖÏìÓ¦¡£²¿·ÖÏàÓ¦¿ÉÒԺϲ¢£¨¼û13.5.4£©£»ºÏ²¢½á¹û¿ÉÄÜÊÇÍêÕûµÄÏìÓ¦»ò¿ÉÄÜÈÔÊDz¿·ÖµÄÏìÓ¦¡£.»º´æ²»ÄܰѲ¿·ÖÏìÓ¦·µ»Ø¸ø¿Í»§¶Ë³ý·ÇÓÐÃ÷È·ÒªÇó¿ÉÒÔÕâÑù×öÀýÈçÀûÓÃ206£¨²¿·ÖÄÚÈÝ£©×´Ì¬ÂëÏìÓ¦¡£»º´æ²»ÄÜʹÓÃÒ»¸ö200£¨OK£©×´Ì¬Âë·µ»ØÒ»¸ö²¿·ÖÏìÓ¦¡£
Èç¹û»º´æÔÚÊÔÍ¼ÖØÑéÖ¤Ò»¸ö»º´æÏî¶øÊÕµ½Ò»¸ö5xxÏìӦʱ£¬Ëü¼È¿ÉÒÔ½«´ËÏìӦת·¢¸øÇëÇóµÄ¿Í»§¶Ë£¬»òÕß×öµÄ¾ÍÏñ·þÎñÆ÷²»ÄÜÏìÓ¦ËÆµÄ¡£ÔÚºóÃæµÄÇé¿öÏ£¬Ëü¿ÉÄÜ·µ»ØÒ»¸öÒÔǰµÄ½ÓÊÕµÄÏìÓ¦³ý·Ç»º´æÏî°üº¬Ò»¸ö“must-revalidate”»º´æ¿ØÖÆÖ¸Á¼û14.9½Ú£©¡£
13.9 GET ºÍ HEAD µÄ¸±×÷Óã¨Side Effects of GET and HEAD£©
³ý·ÇÔ´·þÎñÆ÷Ã÷È·µØ½ûÖ¹»º´æ±£´æËüÃǵÄÏìÓ¦£¬¶ÔÈκÎ×ÊÔ´Ó¦ÓõÄGETºÍHEAD·½·¨²»Ó¦¸ÃÓи±×÷Óã¬ÕâЩ¸±×÷ÓûᵼÖ´íÎóµÄÐÐΪÈç¹ûÕâЩÏìÓ¦½«´Ó»º´æ²úÉú¡£ËûÃÇ¿ÉÄÜ»áÈÔÈ»Óи±×÷Ó㬵«»º´æÔÚ¾ö¶¨»º´æÊ±²»±Ø¿¼ÂÇÕâЩ¸±×÷Ó᣻º´æ×ÜÊÇÆÚÍûÈ¥¹Û²ìÒ»¸öÔ´·þÎñÆ÷¶Ô»º´æµÄÃ÷È·ÏÞÖÆ¡£
Ò»¸öÀýÍ⣺ÓÐЩӦÓÃϰ¹ßÓÚÔÚÔÚGETsºÍHEADs·½·¨ÀïʹÓòéѯURLs£¨ÔÚrel_path_partÀï°üº¬Ò»¸ö“?”£©È¥Ö´ÐÐÒ»¸ö²Ù×÷¶ø´øÀ´ºÜ´óµÄ¸±×÷Ó㬻º´æ²»ÄܰѴËURIsµÄÏìÓ¦¿´×÷Ò»¸ö±£Ïʵijý·Ç·þÎñÆ÷Ìṩһ¸öÏÔʾ¹ýÆÚʱ¼ä£¨explicit expiration time£©¡£ÕâÒâζ×Å´ËURIsµÄÒÔǰ´ÓHTTP/1.0·þÎñÆ÷²úÉúµÄÏìÓ¦²»ÄÜÀ´×ÔÓÚ»º´æ¡£¼û9.1.1½ÚÏà¹ØµÄÐÅÏ¢¡£
13.10 ÔÚ¸üлòɾ³ýºóµÄÎÞЧÐÔ
¶ÔÔ´·þÎñÆ÷ÉϵÄij×ÊÔ´Ö´Ðз½·¨µÄ¸±×÷ÓÿÉÄÜ»áʹһ¸ö»ò¶à¸öÒѾ´æÔڵĻº´æÏîµÄ²»Í¸Ã÷ÐÔÎÞЧ¡£ÄǾÍÊÇ˵£¬ËäÈ»ËûÃÇ¿ÉÄÜ»á¼ÌÐøÊDZ£Ïʵ쬵«ÊÇËûÃDz»ÄÜ׼ȷµÄ·´Ó¦³öÔ´·þÎñÆ÷½«»á¶ÔÕâÒ»¸öеÄÇëÇó·µ»ØÊ²Ã´¡£
HTTPÐÒéÎÞ·¨±£Ö¤ËùÓдËÀ໺´æÏî¾ù±»±êÃ÷ÎÞЧ¡£ÀýÈ磬ÒýÆðÔ´·þÎñÆ÷ÉÏ×ÊÔ´±ä»¯µÄÇëÇó¿ÉÄܲ»»á´©¹ý´æÓÐÒ»¸ö»º´æÏîµÄ´úÀí¡£È»¶ø£¬Ò»Ð©¹æÔò°ïÖú¼õÉÙ´íÎóÐÐΪµÄ¿ÉÄÜ¡£
Ôڴ˽ÚÀ¶ÌÓï“ʹʵÌåÎÞЧ”Òâζ×Å»º´æ»á½«ËùÓÐÄǸöʵÌåµÄʵÀý´ÓËüµÄ´æ´¢ÀïÒÆ³ý£¬»òÕß°ÑÕâЩʵÌåµÄʵÀý±ê¼ÇΪ“ÎÞЧµÄ”²¢ÇÒÔÚËûÃÇ¿ÉÄÜ×÷ΪºóÐøÇëÇóµÄÏìӦʱ»á±»½øÐÐÖØÑéÖ¤¡£
һЩHTTP·½·¨±ØÐëÈûº´æÈ¥Ê¹Ò»¸öʵÌåÎÞЧ ¡£ÕâЩʵÌå±»ÇëÇóURIÖ¸¶¨£¬»òÔÚLocation»òÔÚContent-LocationÍ·ÓòÀï±»Ö¸¶¨£¨Èç¹û³öÏֵϰ£©¡£ÕâЩ·½·¨ÊÇ£º
- PUT
- DELETE
- POST
ΪÁË·ÀÖ¹·þÎñÆ÷¹¥»÷¾Ü¾ø£¬Ò»¸ö»ùÓÚLocation»òContent-LocationÍ·ÓòÀïµÄURIµÄÎÞЧÐÔ´¦Àí±ØÐëÖ»ÓÐÔÚhost²¿·ÖºÍÇëÇóURIÀïµÄhost²¿·ÖÏàͬʱ²Å±»Ö´ÐС£
Ò»¸ö»º´æÈç¹û²»ÄÜÀí½âÇëÇóÀïµÄ·½·¨£¬ÄÇôËüÓ¦¸ÃʹÇëÇóURIÖ¸¶¨µÄÈκÎʵÌåÎÞЧ¡£
13.11 Ç¿ÖÆÐ´Í¨¹ý£¨ Write-Through Mandatory£©
ËùÓпÉÄܶÔÔ´·þÎñÆ÷×ÊÔ´½øÐÐÐ޸ĵķ½·¨¶¼ÒªÐ´Í¨¹ý¸øÔ´·þÎñÆ÷£¨Òë×¢£ºÖ±½Ó´©¹ý»º´æÔÚ·þÎñÆ÷ÉÏÐ޸ģ©¡£Õâͨ³£°üÀ¨ËùÓз½·¨³ýÁËGETºÍHEAD·½·¨¡£»º´æÔÚ½«´ËÖÖÇëÇóת·¢¸ø·þÎñÆ÷²¢»ñµÃÏàÓ¦µÄÏìӦǰ²»ÄܶÔÇëÇó¿Í»§¶Ë×ö³öÏìÓ¦¡£ Õâ¸ö²»ÄÜ·ÀÖ¹´úÀí»º´æ£¨Òë×¢£ºÒ²¿ÉÒԽлº´æ·þÎñÆ÷£¬»º´æ£©ÔÚ·þÎñÆ÷ÒѾ·¢ËÍ×îÖջظ´Ö®Ç°·¢ËÍ100£¨¼ÌÐø£©ÏìÓ¦¡£
Ïà·´Çé¿ö£¨Í¨³£½Ð“д»Ø”»ò“¿½±´»Ø”»º´æ£©ÔÚHTTP1.1ÖÐÊDz»ÔÊÐíµÄ£¬ÕâÊÇÓÉÓÚÌṩһÖ¸üзdz£À§ÄÑ£¬²¢ÇÒ·þÎñÆ÷£¬»º´æºÍÍøÂçµÄ¹ÊÕÏ»á³öÏÖÔÚ±Èд»ØÔç¡£
13.12 »º´æÌæ»» £¨Cache Replacement£©
Èç¹ûÒ»¸öеĿɻº´æµÄÏìÓ¦±»»º´æ½ÓÊÕ£¬Í¬Ê±¶ÔÕâÒ»×ÊÔ´µÄÏìÓ¦ÒѾÔÚ»º´æÀï´æÔÚ£¬ÄÇô»º´æÓ¦¸ÃÀûÓÃ×îеÄÏìӦȥ»Ø¸´µ±Ç°µÄÇëÇó¡£»º´æ¿ÉÄÜ»á°Ñ´ËÐÂÏìÓ¦·Å½ø´æ´¢À²¢ÇÒÈç¹ûËüÂú×ãËùÓÐÆäËûµÄÒªÇ󣬻º´æ½«»áÀûÓôËÏìÓ¦À´ÏìÓ¦Èκν«À´µÄÇëÇó¡£Èç¹û»º´æÏë°Ñ´ËеÄÏìÓ¦¼Ó½ø»º´æµÄ´æ´¢£¬13.5.3µÄ¹æÔò±ØÐëÓ¦Óá£
˵Ã÷£ºÒ»¸öÐÂÏìÓ¦Èç¹ûËüµÄDateÍ·ÓòÖµ±ÈÒѾ´æÔڵĻº´æÏìÓ¦µÄDateÍ·ÓòÖµÀÏ£¬ÄÇôËüÊDz»ÄÜ»º´æµÄ¡£
13.13 ÀúÊ·ÁÐ±í £¨History Lists£©
Óû§´úÀí¾³£Ê¹ÓÃÀúÊ·»úÖÆ£¬Èç“Back”°´Å¥ºÍÀúÊ·ÁÐ±í£¬À´ÖØÐÂչʾÔÚÒ»¸ö»á»°Àï½ÓÊÕµÄÒ»¸öÉÔÔçµÄʵÌå¡£
ÀúÊ·»úÖÆºÍ»º´æ»úÖÆÊDz»Í¬¡£ÀúÊ·»úÖÆ²»Ó¦¸Ã³¢ÊÔչʾһ¸öµ±Ç°×ÊԴ״̬µÄÓïÒå͸Ã÷ÊÓͼ¡£ÆäÀúÊ·»úÖÆÖ»ÊÇΪÁËչʾÔÚ»ñµÃ×ÊԴʱ¿´µ½ÁËʲô¡£
ĬÈÏÇé¿ö£¬Ò»¸ö¹ýÆÚʱ¼ä²»»áÓ¦ÓÃÓÚÒ»¸öÀúÊ·»úÖÆ¡£Èç¹ûʵÌåÈÔÈ»ÔÚ´æ´¢ÀÀúÊ·»úÖÆÓ¦¸ÃÏÔʾËü¼´Ê¹ÊµÌå¹ýÆÚÁË£¬³ý·ÇÓû§½ÐÓû§´úÀíȥˢйýÆÚµÄÎĵµ¡£
Õâ²»Äܱ»½âÊÍÈ¥·ÀÖ¹ÀúÊ·»úÖÆ¸æËßÓû§ÊÓͼ¿ÉÄܹýÆÚÁË¡£
×¢Ò⣺Èç¹ûÀúÊ·»úÖÆÃ»±ØÒªµØ·ÀÖ¹ÁËÓû§¿´³Â¾ÉµÄ×ÊÔ´£¬ÄÇôÕâ»áÇ¿ÖÆ·þÎñ×÷ÕßÈ¥±ÜÃâÀûÓÃHTTP¹ýÆÚ¿ØÖƺͻº´æ¿ØÖÆ¡£·þÎñ×÷Õß¿ÉÄÜ»áÈÏΪÕâÊǷdz£ÖØÒªµÄµ±Óû§Ã»Óб»³ÊÏÖ´íÎóÏûÏ¢»ò¾¯¸æÏûÏ¢µ±ËûÃÇÀûÓõ¼Ïò°´Å¥£¨ÈçBACK°´Å¥£©È¥¿´ÒÔǰ»ñµÃµÄ×ÊԴʱ¡£¼´Ê¹ÓÐʱÕâЩ×ÊÔ´±¾²»Äܱ»»º´æ±£´æ»òÓ¦¸Ã¿ÉÄÜ»áºÜ¿ì¹ýÆÚ£¬Óû§½çÃæ¿ÉÄÜ»áÇ¿ÖÆ·þÎñ×÷ÕßÈ¥ÇóÖúÓÚÆäËû·ÀÖ¹»º´æµÄ·½·¨£¨ÀýÈ磬һ´ÎÐÔURLs£©ÎªÁ˱ÜÃâÀúÊ·»úÖÆ¹¦ÄܵIJ»ºÏÊʵÄ×÷Óá£
14 Í·Óò¶¨Òå
±¾½Ú¶¨ÒåÁËËùÓÐHTTP/1.1ÖÖ±ê׼ͷÓòµÄÓï·¨ºÍÓïÒå¡£¶ÔÓÚʵÌåÍ·Óò£¬·¢ËÍÕߺͽÓÊÕÕßÖ¸µÄÊǿͻ§¶ËºÍ·þÎñÆ÷£¬È¡¾öÓÚË·¢ËͺÍ˽ÓÊÕ´ËʵÌå¡£
14.1 Accept
AcceptÇëÇóÍ·Óò±»ÓÃÓÚÖ¸¶¨·þÎñÆ÷·µ»Ø¸ø¿Í»§¶Ë¿É½ÓÊܵÄÏìӦýÌåÀàÐÍ¡£AcceptÍ·ÓòÄܱ»ÓÃÓÚÖ¸Ã÷ÇëÇóÊÇÆÚÍû·þÎñÆ÷·µ»ØÄ³Ð©ÆÚÍûµÄýÌåÀàÐ͵ÄÏìÓ¦£¬ÀýÈçÇëÇóÒ»¸öÄÚǶµÄͼÏñ¡£
Accept = "Accept" ":"
#£¨ media-range [ accept-params ] £©
media-range = £¨ "*/*"
| £¨ type "/" "*" £©
| £¨ type "/" subtype £©
£© *£¨ ";" parameter £©
accept-params = ";" "q" "=" qvalue *£¨ accept-extension £©
accept-extension = ";" token [ "=" £¨ token | quoted-string £© ]
ÐǺŔ*”×Ö·ûÓÃÓÚ°ÑýÌåÀàÐÍ×éºÏ³ÉÒ»¸ö·¶Î§£¬”*/*”Ö¸Ã÷ÁËËùÓеÄýÌåÀàÐͶø”type/*”Ö¸Ã÷ÁËtypeÀàÐ͵ÄËùÓÐ×ÓÀàÐÍ¡£Media-range¿ÉÄܰüº¬Ò»¸öýÌåÀàÐͲÎÊý¡£
ÿһ¸ömedia-range¿ÉÄÜ»á¸úËæÒ»¸ö»ò¶à¸öaccept-params£¬ÒÔ“q”²ÎÊýÖ¸Ã÷Ò»¸öÏà¶ÔµÄϲ°®³Ì¶ÈµÄÖÊÁ¿Òò×Ó¡£µÚÒ»¸ö“q”²ÎÊý£¨Èç¹ûÓеϰ£©°Ñaccept-paramsºÍmedia-range²ÎÊý·ÖÀëÁË¡£Ï²°®³Ì¶ÈÖÊÁ¿Òò×ÓÔÊÐíÓû§»òÓû§´úÀíÈ¥Ö¸Ã÷¶ÔÄǸömedia-rangeµÄÏà¶Ôϲ°®³Ì¶È£¬qvalueµÄ·¶Î§ÊÇ´Ó0µ½1£¨¼û3.9½Ú£©¡£È±Ê¡ÊÇq=1¡£
×¢Ò⣺ÀûÓÓq”²ÎÊýÃû×Ö½«Ã½ÌåÀàÐͲÎÊý£¨Òë×¢£ºmedia-rangeÀïµÄparameter£©ºÍaccept-extension·ÖÀ뿪À´ÊÇ»ùÓÚÀúÊ·µÄʵ¼ù¡£ËäÈ»Õâ·ÀÖ¹ÀïÈκÎýÌåÀàÐͲÎÊýÒÔ“q”ÃüÃû²¢Ê¹ÓÃÓÚmedia-rangeÀµ«ÔÚÒ»¸ömedia-rangeÀïʹÓÓq”±»ÈÏΪÊDz»¿ÉÄÜ·¢ÉúµÄ£¬ÕâÊÇÒòΪÔÚIANAµÄýÌåÀàÐÍ×¢²á±íÀïÊÇûÓГq”²ÎÊýµÄ²¢ÇÒÔÚAcceptÍ·ÓòÀïÀûÓÃÈκÎýÌåÀàÐͲÎÊýÒ²ÊǺÜÉٵġ£½«À´µÄýÌåÀàÐͲ»¹ÄÀøÈκÎÒÔ“q”ÃüÃûµÄ²ÎÊý×¢²á¡£
Àý×Ó:£º
Accept £ºaudio/*£»q=0.2£¬audio/basic
¸ÃÀýÓ¦¸Ã±»½âÊͳɓÎÒϲ»¶audio/basic£¬µ«ÊÇ¿ÉÒÔ¸øÎÒ·¢ËÍÈκÎ×îÈÝÒ׵õÄaudioÀàÐÍ£¬µ«ÔÚϲ°®³Ì¶ÈÖÊÁ¿ÒªÏ½µ80%”¡£
Èç¹ûûÓÐAcceptÍ·Óò³öÏÖ£¬ÄÇô»á¼ÙÉè¿Í»§¶ËÄܽÓÊÜËùÓÐýÌåÀàÐÍ¡£Èç¹ûAcceptÍ·ÓòÔÚÇëÇóÏûÏ¢Àï³öÏÖ£¬²¢ÇÒÈç¹û·þÎñÆ÷¸ù¾ÝÁªºÏµÄAcceptÍ·ÓòÖµÅж¨Ëü²»ÄÜ·¢ËͿɽÓÊܵģ¨acceptable£©µÄÏìÓ¦£¬ÄÇô·þÎñÆ÷Ó¦¸Ã·¢ËÍ406£¨²»¿É½ÓÊܵģ©ÏìÓ¦¡£
Ò»¸ö¸ü¼ÓÏ꾡µÄÀý×ÓÈçÏ£º
Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c
Õâ¿ÉÄܱ»¿ÚÍ·µØ½âÊͳɓtext/html ºÍ text/x-cÊǸüϲ°®µÄýÌåÀàÐÍ£¬µ«ÊÇÈç¹ûËûÃDz»´æÔÚ£¬ÄÇô·¢ËÍtext/x-dviʵÌ壬µ«Èç¹ûtext/x-dviÒ²²»´æÔÚ£¬ÄÇô·¢ËÍtext/plainʵÌå¡£”
Media-rangeÄܱ»¸ü¾ßÌØÖ¸µÄmedia-range»òýÌåÀàÐ͸²¸Ç¡£Èç¹û¶à¸ömedia-rangeÓ¦ÓÃÁËÒ»¸öÌØÖ¸µÄÀàÐÍ£¬ÄÇô×îÌØÖ¸µÄÒýÓÃÓ¦¸ÃÓÅÏÈ¡£ÀýÈ磺
Accept: text/*£¬ text/html, text/html; level=1, */*
ÓµÓÐÏÂÃæµÄÓÅÏÈ˳Ðò£º
text/html; level=1
text/html
text/*
*/*
Ò»¸öýÌåÀàÐ͵Äϲ°®³Ì¶ÈÖÊÁ¿Òò×ÓÊǺÍÒ»¸ö¸ø¶¨µÄýÌåÀàÐÍÁªÏµÔÚÒ»ÆðµÄ£¬ËüÊÇÓɲéÕÒÄÜ×î¸ßÓÅÏÈÆ¥ÅäÄǸöýÌåÀàÐ͵Ämedia-range¾ö¶¨µÄ¡£ÀýÈ磺
Accept:: text/*; q=0.3, text/html; q=0.7, text/html; level=1,
text/html; level=2; q=0.4, */*; q=0.5
¿ÉÄÜ»áÒýÆðÏÂÃæÖµ±»ÁªÏµ£º
text/html;level=1 = 1
text/html = 0.7
text/plain = 0.3
image/jpeg = 0.5
text/html;level=2 = 0.4
text/html;level=3 = 0.7
×¢Ò⣺һ¸öÓû§´úÀí¿ÉÄÜ»áΪһ¸öÌØ¶¨µÄmedia-rangeÌṩһ¸öȱʡµÄÖÊÁ¿ÖµµÄ¼¯ºÏ¡£È»¶ø£¬³ý·ÇÓû§´úÀíÊÇÒ»¸ö²»ÄÜºÍÆäËûµÄ³ÊÏÖ´úÀí½»»¥µÄ·â±ÕµÄϵͳ£¬·ñÔòÕâ¸öȱʡµÄ¼¯ºÏÓ¦¸ÃÊDZ»Óû§¿ÉÉèÖõġ£
14.2 Accept-Charset
Accept-CharsetÇëÇóÍ·Óò¿ÉÒÔÓÃÀ´Ö¸³öÇëÇó¿Í»§¶ËÄܽÓÊÜʲôÑùµÄ×Ö·û¼¯ÏìÓ¦¡£Õâ¸öÍ·ÓòÔÊÐí¿Í»§¶ËÄÜ֪ͨ·þÎñÆ÷Ö¸¶¨ºÎÖִ˿ͻ§¶Ë¸üÄÜÀí½âµÄ»ò¸ü¾ßÌØÊâÄ¿µÄµÄ×Ö·û¼¯µÄÏìÓ¦¡£
Accept-Charset = "Accept-Charset" ":"
1#£¨ £¨ charset | "*" £©[ ";" "q" "=" qvalue ] £©
×Ö·û¼¯ÖµÔÚ3.4½ÚÀïÃèÊö¡£Ã¿Ò»¸ö×Ö·û¼¯¿ÉÄܱ»¸øÓÚÒ»¸öÏëÁªÏµµÄÖÊÁ¿ÖµÓÃÀ´±íʾÓû§¶ÔÄǸö×Ö·û¼¯µÄϲ°®³Ì¶È¡£È±Ê¡ÖµÊÇq=1.ÀýÈ磺
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
ÌØÊâµÄ“*”ÖµÈç¹û³öÏÖÔÚAccept-CharsetÍ·ÓòÀÄÇô½«Æ¥ÅäÈκÎ×Ö·û¼¯£¨character set£©£¨°üº¬ISO-8859-1£©¡£Èç¹ûûÓГ*”³öÏÖÔÚAccept-CharsetÍ·ÓòÀÄÇôËùÓгöÏÖµÄ×Ö·û¼¯µÄÖÊÁ¿ÖµÎª0£¬³ýÁËISO-8859-1£¬ËüµÄÖÊÁ¿ÖµÎª1Èç¹ûûÓгöÏÖÔÚAccept-CharsetÍ·ÓòÀï¡£
Èç¹ûAccept-CharsetÍ·ÓòûÓгöÏÖ£¬ÄÇôȱʡÇé¿öÊÇÈκÎ×Ö·û¼¯»á½ÓÊÜ¡£Èç¹ûAcceptÍ·Óò³öÏÖÔÚÇëÇóÏûÏ¢Àï²¢ÇÒ·þÎñÆ÷²»ÄÜ·¢ËͿͻ§¶ËÏëÒªµÄAccept-CharsetÀïÖ¸¶¨µÄ×Ö·û¼¯µÄÏìÓ¦£¬ÄÇô·þÎñÆ÷½«·¢ËÍÒ»¸ö406£¨²»ÄܽÓÊܵģ©´íÎóÏìÓ¦£¬È»¶ø·¢ËÍÒ»¸ö²»Äܲ»ÄÜÈÿͻ§¶Ë½ÓÊܵÄ×Ö·û¼¯µÄÏìÓ¦Ò²ÊÇÔÊÐíµÄ¡£
14.3 Accept-Encoding
Accept-EncodingÇëÇóÍ·ÓòºÍAcceptÍ·ÓòÏàËÆ£¬µ«Accept-EncodingÊÇÏÞ¶¨·þÎñÆ÷·µ»Ø¸ø¿Í»§¶Ë¿ÉÒÔ½ÓÊܵÄÄÚÈݱàÂ루content-coding£¬¼û3.5½Ú£©¡£
Accept-Encoding = "Accept-Encoding" ":"
1#£¨ codings [ ";" "q" "=" qvalue ] £©
codings = £¨ content-coding | "*" £©
ʹÓõÄÀý×ÓÈçÏ£º
Accept-Encoding: compress, gzip
Accept-Encoding:
Accept-Encoding: *
Accept-Encoding: compress;q=0.5, gzip;q=1.0
Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0
·þÎñÆ÷²âÊÔÒ»¸öÄÚÈݱàÂ루content-coding£©ÊÇ·ñÊǿɽÓÊܵģ¬ÊǸù¾ÝAccept-EncodingÍ·Óò£¬²¢ÀûÓÃÏÂÃæµÄ¹æÔòÀ´¾ö¶¨£º
Èç¹ûÒ»¸öÄÚÈݱàÂ루content-coding£©ÔÚAccept-EncodingÍ·ÓòÀï³öÏÖ£¬ÄÇôËüÊÇ¿ÉÒÔ½ÓÊܵģ¨acceptable£©£¬³ý·ÇËüµÄqvalueΪ0¡££¨ÕâÔÚ3.9½ÚÀﶨÒ壬һ¸öqvalueΪ0˵Ã÷ÊÇ“²»¿É½ÓÊܵĔ£©
Èç¹û“*”×Ö·û³öÏÖÔÚAccept-EncodingÍ·ÓòÀÄÇôËüÆ¥ÅäÈκÎûÓгöÏÖÔÚAccept-EncodingÍ·ÓòµÄ¿ÉµÃµÄÄÚÈݱàÂë¡£
Èç¹û¶à¸öÄÚÈݱàÂëÊǿɽÓÊܵģ¬ÄÇôqvalueΪ×î¸ßµÄÇÒ·Ç0µÄÄÚÈݱàÂëÊÇ×îϲ»¶µÄ¡£
“identity”ÄÚÈݱàÂë×ÜÊǿɽÓÊܵ쬳ý·ÇqvalueΪ0£¬»òÕßAccept-EncodingÍ·Óò°üº¬“*;q=0”²¢ÇÒͬʱûÓаüº¬“identity”ÄÚÈݱàÂë¡£Èç¹ûAccept-EncodingÍ·ÓòֵΪ¿Õ£¬ÄÇôֻÓГidentity”±àÂëÊǿɽÓÊܵġ£
Èç¹ûAccept-EncodingÍ·ÓòÔÚÇëÇóÀï³öÏÖ£¬²¢ÇÒÈç¹û·þÎñÆ÷²»ÄÜ·¢ËÍÒ»¸öAccept-EncodingÍ·ÓòÀïÖ¸¶¨µÄ±àÂëÏìÓ¦£¬ÄÇô·þÎñÆ÷Ó¦¸Ã·¢ËÍÒ»¸ö406£¨²»½ÓÊܵģ©´íÎóµÄÏìÓ¦¡£
Èç¹ûûÓÐAccept-EncdongÍ·Óò³öÏÖÔÚÇëÇóÏûÏ¢À·þÎñÆ÷Ó¦¸Ã¼ÙÉè¿Í»§¶Ë½«½ÓÊÜÈκÎÄÚÈݱàÂë¡£ÔÚÕâÖÖÇé¿öÏ£¬Èç¹û“identity”ÊÇÕâЩ¿ÉµÃµÄÄÚÈݱàÂëÖеÄÒ»¸ö£¬ÄÇô·þÎñÆ÷½«ÀûÓÓidentity”ÄÚÈݱàÂ룬³ý·Ç·þÎñÆ÷ÓÐÁíÍâµÄÐÅÏ¢Ö¸Ã÷ÆäËûµÄÄÚÈݱàÂë¶Ô¿Í»§¶ËÊÇÓÐÒâÒåµÄ¡£
×¢Ò⣺Èç¹ûÇëÇó²»Äܰüº¬Ò»¸öAccept-EncodingÍ·Óò£¬²¢ÇÒÈç¹û“identity”ÄÚÈݱàÂëÊDz»ÄܽÓÊܵģ¬ÄÇôͨ³£²»Äܱ»HTTP/1.0¿Í»§¶ËÀí½âµÄÄÚÈݱàÂ루Ҳ¾ÍÊÇ˵£¬“gzip”ºÍ“compress”£©Í¨³£ÊÇ×îϲ°®µÄ£»Ò»Ð©ÀϵĿͻ§¶ËÓÐʱºò»á²»ºÏÊʵÄÏÔʾÒÔÆäËûÄÚÈݱàÂëµÄÏûÏ¢¡£·þÎñÆ÷Ó¦¸ÃÕÕÑùÄÜ»ùÓÚÌØ¶¨µÄÓû§´úÀí»ò·þÎñÆ÷µÄÐÅÏ¢×ö³ý¾ö¶¨ÓúÎÖÖÄÚÈݱàÂëÏìÓ¦¡£
×¢Ò⣺´ó¶àÊýHTTP/1.0Ó¦ÓóÌÐò²»ÄÜʶ±ð»ò×ñÑÒ»¸öÄÚÈݱàÂë¸úËæÒ»¸öqvalue¡£ÕâÒâζ×Åqvalue½«²»Äܹ¤×÷²¢ÇÒÔÚx-gzip»òx-compressÀï²»Äܱ»ÔÊÐí¡£
14.4 Accept-Language
Accept-LanguageÇëÇóÍ·ÓòºÍAcceptÇëÇóÍ·ÓòÀàËÆ£¬µ«ÊÇËüÊÇÏÞ¶¨·þÎñÆ÷·µ»Ø¸ø¿Í»§¶Ëϲ°®µÄ×ÔÈ»ÓïÑÔ¡£
Accept-Language = "Accept-Language" ":"
1#£¨ language-range [ ";" "q" "=" qvalue ] £©
language-range = £¨ £¨ 1*8ALPHA *£¨ "-" 1*8ALPHA £© £© | "*" £©
ÿ¸ölanguage-range¾ù±»¸³ÒÔÒ»¸öÖÊÁ¿Öµ£¬Ëü´ú±íÓû§¶Ô´Ëlanguage-rangeÀﺸÇÓïÑÔµÄϲ°®³Ì¶È¡£ÖÊÁ¿ÖµÈ±Ê¡Îª1£¬ÀýÈ磺
Accept-Language: da, en-gb;q=0.8, en;q=0.7
ºÃÏñÔÚ˵£º“ÎÒ¸üϲ»¶Danish£¬µ«ÊÇÒ²¿ÉÒÔ½ÓÊÕBritish EnglishºÍÆäËûµÄEnglishµÄÀàÐ͵ÄÓïÑÔ¡£”Ò»¸ölanguage-rangeÆ¥ÅäÒ»¸öÓïÑÔ±êÇ©£¨Òë×¢£ºÈçÉÏÃæÀý×ÓµÄda£¬en-gb£¬en£©Èç¹ûËüÄܾ«È·ºÍ´ËÓïÑÔ±êÇ©ÏàµÈ£¬»òÕßËüÄܾ«È·Æ¥Åä´Ë±êÇ©µÄǰ׺£¨ÔÚ“-”ÒÔǰµÄ²¿·Ö£©¡£ÌØÊâµÄ“*”£¬Èç¹û³öÏÖÔÚAccept-LanguageÍ·ÓòÀ±íÃ÷ÄÜÆ¥ÅäÈκβ»ÔÚ´ËÍ·ÓòÀïµÄÈκαêÇ©¡£
×¢Ò⣺ǰ׺ƥÅ乿ÔòÒâζ×ÅÓû§ÄÜÀí½âÆ¥Åä´Ëǰ׺µÄËùÓÐÓïÑÔ¡£
Ò»¸öÓïÑÔ±êÇ©µÄÖÊÁ¿Òò×ÓÊÇAccept-LanguageÍ·ÓòÀï×îÄÜÆ¥Åä´ËÓïÑÔ±êÇ©µÄlanguage-rangeµÄÖÊÁ¿Öµ¡£Èç¹ûAccept-LanguageÍ·ÓòÀïûÓÐlanguage-rangeÆ¥Åä´ËÓïÑÔ±êÇ©£¬ÄÇô´ËÓïÑÔµÄÖÊÁ¿Òò×Ó±»¸³Óè0¡£Èç¹ûûÓÐAccept-LanguageÍ·Óò³öÏÖÔÚÇëÇóÀÄÇô·þÎñÆ÷Ó¦¸Ã¼ÙÉèËùÓÐÓïÑÔ½«ÊǿɽÓÊܵġ£Èç¹ûÒ»¸öAccept-LanguageÍ·Óò³öÏÖÔÚÇëÇóÀÄÇôËùÓÐÖÊÁ¿Òò×Ó´óÓÚ0µÄÓïÑÔÊǿɽÓÊܵġ£
Èç¹û·¢ËÍÒ»¸öºÍÓû§Ï²°®µÄÓïÑÔÏà·´£¬Õ⽫ÔÚ15.1.4ÀïÌÖÂÛ¡£
ÓÉÓÚ¸ö±ðµÄÓû§µÄÀí½â³Ì¶È²»Ò»Ñù£¬½¨Òé¿Í»§¶ËÓ¦ÓóÌÐòÈÃÓû§¶ÔÓïÑÔµÄÆ«ºÃ½øÐÐÑ¡Ôñ¡£Èç¹û¿Í»§²»ÄܽøÐÐÑ¡Ôñ£¬ÄÇôAccept-LanguageÍ·Óò²»ÄÜÔÚÇëÇóÀï¸ø³ö¡£
×¢Ò⣺µ±ÈÃÓû§×÷³öÑ¡Ôñʱ£¬ÎÒÃÇҪʵÏÖÕßÒ»¸öÊÂʵÄǾÍÊǿͻ§²»ÊìϤÓïÑÔµÄϸ½Ú£¬²¢ÇÒ²»»áÌṩһ¸öºÏÊʵÄÖ¸µ¼¡£ÀýÈ磬Óû§¿ÉÄÜ»áÈÏΪµ±Ñ¡ÔñÁË“en-gb”»áÌṩÈκÎÀàÐ͵ÄÓ¢ÓïÎĵµ¼´Ê¹British EnglishÊDz»¿ÉµÃµÄ¡£Ò»¸öÓû§´úÀíÓ¦¸ÃÄܽ¨ÒéÈ¥Ôö¼ÓÒ»¸ö“en”È¥µÃµ½×îºÏÊÊµÄÆ¥ÅäÐÐΪ¡£
14.5 Accept-Range
Accept-RangeÏìӦͷÓòÔÊÐí·þÎñÆ÷Ö¸Ã÷Ëü¶Ô¿Í»§µÄ·¶Î§ÇëÇó£¨range request£¬Òë×¢£ºµ±ÔÚÇëÇóÏûÏ¢Àï³öÏÖRangeÍ·Óòʱ±íÃ÷´ËÇëÇóÊÇ·¶Î§ÇëÇ󣩵ĽÓÊ̶ܳȡ£
Accept-Ranges = "Accept-Ranges" ":" acceptable-ranges
acceptable-ranges = 1#range-unit | "none"
Ô´·þÎñÆ÷Èç¹û½ÓÊÜ×Ö½Ú·¶Î§ÇëÇó(byte-range request)ÄÇô¿ÉÒÔ·¢ËÍ
Accept-Ranges: bytes
µ«ÊÇûÓбØÒªÕâÑù×ö¡£¿Í»§¶ËÔÚûÓнÓÊÕ´ËÍ·ÓòʱҲ¿ÉÒÔ²úÉú×Ö½Ú·¶Î§ÇëÇó£¨byte-range request£©¡£·¶Î§µ¥Î»£¨range units£©±»¶¨ÒåÔÚ3.12½Ú¡£
·þÎñÆ÷Èç¹û²»ÄܽÓÊÜÈκÎÀàÐ͵ķ¶Î§ÇëÇó£¨range request£©£¬½«»á·¢ËÍ
Accept-Ranges£ºnone
È¥¸æË߿ͻ§²»Òª³¢ÊÔ·¶Î§ÇëÇó£¨range request£©¡£
14.6 Age
AgeÏìӦͷÓò±íʾ·¢ËÍÕߣ¨Òë×¢£ºÒ»°ãÊÇ»º´æ£©¶ÔÏìÓ¦²úÉú£¨»òÖØÑéÖ¤£©Ê±¿Ìºó¾¹ýʱ¼äµÄ¹À¼Æ¡£Ò»¸ö»º´æµÄÏìÓ¦ÊDZ£Ïʵģ¨fresh£©Èç¹û´ËÏìÓ¦µÄÄêÁäûÓг¬¹ýËüµÄ±£ÏÊÊÙÃü£¨freshness response£©¡£AgeÖµÔõÑù¼ÆËãÔÚ13.2.3½ÚÀïÃèÊöÁË¡£
Age = "Age" ":" age-value
age-value = delta-seconds
AgeÖµÊÇÊ®½øÖƷǸºÕûÊý£¬²¢ÇÒÒÔÃëΪµ¥Î».¡£
Èç¹û»º´æ½ÓÊÕµ½Ò»¸öAgeÖµ´óÓÚËüËùÄܱíʾµÄÉÏÏÞ£¬»òËüµÄÄêÁ伯Ëã³öÏÖÒç³ö£¬ÄÇôËü±ØÐë´«ËÍAgeÍ·ÓòµÄֵΪ2147483648 £¨2^31£©¡£Ò»¸öHTTP/1.1·þÎñÆ÷Èç¹û°üº¬Ò»¸ö»º´æ£¬ÄÇôËü±ØÐë°üº¬Ò»¸öAgeÍ·ÓòÔÚËüÓµÓлº´æ²úÉúµÄÈκÎÏìÓ¦Àï¡£»º´æÓ¦¸ÃÀûÓÃÒ»¸öÖÁÉÙ31λµÄÔËËãÀàÐÍ¡£
14.7 Allow
AllowʵÌåÍ·ÓòÖÐÁгöÁËÇëÇóURI£¨Request-URI£©Ö¸¶¨×ÊÔ´ËùÖ§³ÖµÄ¼¸ÖÖ·½·¨¡£´ËÍ·ÓòµÄÄ¿µÄÊÇÑϸñµØÈýÓÊÕ¶ËÖªµÀ×ÊÔ´ËùÊʺϵķ½·¨¡£AllowÍ·Óò±ØÐë³öÏÖÔÚ405£¨·½·¨²»±»ÔÊÐí£©ÏìÓ¦ÖС£
Allow = "Allow" ":" #Method
ʹÓÃʾÀý£º
Allow: GET, HEAD, PUT
ÕâһͷÓò²»ÄÜ×èÖ¹¿Í»§¶ËʹÓÃÆäËû·½·¨¡£È»¶øÖ»ÓÐÔÚAllowÍ·ÓòÓòÖиø³öµÄ·½·¨²ÅÓ¦¸Ã±»Ö´ÐС£AllowÍ·ÓòÀïÖ¸¶¨µÄ·½·¨±»Ô´·þÎñÆ÷¶¨Ò壬²¢ÇÒÔÚÿ´ÎÇëÇóµÄÏìÓ¦Àï¶¼Ó¦¸Ã³öÏÖÕâЩ·½·¨¡£
AllowÍ·ÓòÀï¿ÉÒÔ±»ÌṩÔÚÒ»¸öPUTÇëÇóÀÕâÊÇΪÁË˵Ã÷еĻò¸Ä±äµÄ×ÊÔ´Ö§³ÖÕâЩ·½·¨¡£·þÎñÆ÷²»ÐèҪȥ֧³ÖÕâЩ·½·¨£¬¶øÇÒÓ¦¸Ã°üº¬Ò»¸öAllowÍ·ÓòÔÚÏìÓ¦Àï²¢ÇÒ¸ø³öʵ¼ÊÖ§³ÖµÄ·½·¨¡£
´úÀí·þÎñÆ÷²»ÄܸıäAllowÍ·Óò¼´±ã²»Àí½â´ËÍ·ÓòÀïÖ¸Ã÷µÄËùÓз½·¨£¬ÒòΪÓû§´úÀí¿ÉÄܺÍÔ´·þÎñÆ÷ͨÐÅÓÐÆäËûµÄÄ¿µÄ¡£
14.8 Authorization £¨ÊÚȨ£©
Óû§´úÀíÍùÍùÏ£Íûͨ¹ý·þÎñÆ÷¸ø×Ô¼ºÊÚȨ£¬Óû§´úÀíÕâÑù×öÊÇͨ¹ýÔÚÇëÇóÀï°üº¬Ò»¸öAuthorizationÇëÇóÍ·Óò£¬µ«ÊÇͨ³£ÔÚ½ÓÊÕÁËÒ»¸ö401ÏìÓ¦ºó¾ÍûÓбØÒªÈ÷þÎñÆ÷¸ø×Ô¼ºÊÚȨÁË¡£AuthorizationÍ·ÓòÓɰüº¬Óû§´úÀí¶ÔÄǸöÇëÇó×ÊÔ´ÓòµÄÊÚȨÐÅÏ¢µÄÖ¤Ê飨credentials£©×é³É¡£
Authorization = "Authorization" ":" credentials
HTTP·ÃÎÊÊÚȨÔÚ“HTTP Authenticatiion£ºBasic and Digest Access Authentication”[43]ÖÐÃèÊö¡£Èç¹ûÒ»¸öÇëÇó±»ÊÚȨ²¢ÇÒÒ»¸öÓò£¨realm£©±»Ö¸¶¨£¬ÄÇôÕâ¸öÖ¤ÊéÓ¦¸Ã¶Ô´ËÓòÀïËùÓÐµÄÆäËûÇëÇóÊÇÓÐЧµÄ£¨¼ÙÉèÔÚ´ËÊÚȨģʽÏ£¬Ö¤Êé²»»á¸ù¾ÝÒ»¸ö¼¤·¢Öµ»òÀûÓÃÒ»¸öͬ²½µÄʱÖÓ¶ø±ä»¯£©¡£
µ±Ò»¸ö¹²Ïí»º´æ£¨shared cache£©£¨¼û13.7½Ú£©½ÓÊÕÒ»¸öÇëÇ󣬲¢ÇÒ´ËÇëÇó°üº¬Ò»¸öAuthorizationÍ·Óòʱ£¬ÄÇôËü²»ÄÜ·µ»Ø´ËÇëÇóÏàÓ¦µÄÏìÓ¦À´»Ø¸´ÈÎºÎÆäËûµÄÇëÇ󣬳ý·ÇÏÂÃæÖ¸¶¨µÄÒì³£·¢Éú£º
Èç¹û´ËÏìÓ¦°üº¬“s-maxage”»º´æ¿ØÖÆÖ¸ÁÄÇô´Ë»º´æ¿ÉÄÜ»áÀûÓÃÄǸöÏìÓ¦À´ÏìÓ¦Ò»¸öºóÐøµÄÇëÇó¡£µ«ÊÇ£¨Èç¹ûÖ¸¶¨µÄage¹ýÆÚÁË£©Ò»¸ö´úÀí»º´æ±ØÐëÊ×ÏÈͨ¹ýÔ´·þÎñÆ÷À´ÖØÑéÖ¤´ËÏìÓ¦£¬ÀûÓÃÐÂÇëÇóÀïµÄAuthorizationÇëÇóÍ·ÓòÈ¥ÈÃÔ´·þÎñÆ÷ÊÚȨ´ËÐÂÇëÇó¡££¨ÕâÊÇΪ“s-maxage=0”¶¨ÒåµÄÐÐΪ¡££©Èç¹ûÏìÓ¦°üº¬“s-maxmax=0”£¬ÄÇô´úÀí±ØÐë×ÜÊÇÖØÑéÖ¤´ËÏìÓ¦ÔÚÖØÀûÓÃËü֮ǰ¡£
Èç¹û´ËÏìÓ¦°üº¬“must-revalidate”»º´æ¿ØÖÆÖ¸ÁÄÇô»º´æ¿ÉÄÜ»áÀûÓÃÄǸöÏìÓ¦À´ÏìÓ¦Ò»¸öºóÐøµÄÇëÇó¡£µ«ÊÇÈç¹û´ËÏìÓ¦Êdz¾ɵģ¬ÄÇôËùÓлº´æ±ØÐëÊ×ÏÈͨ¹ýÔ´·þÎñÆ÷ÖØÑéÖ¤ÄǸöÏìÓ¦£¬ÀûÓÃÐÂÇëÇóÀïµÄAuthorizationÇëÇóÍ·ÓòÈ¥ÈÃÔ´·þÎñÆ÷È¥ÊÚȨ´ËÐÂÇëÇó¡£
Èç¹ûÏìÓ¦°üº¬¹²Óлº´æÖ¸ÁÄÇôËü¿ÉÄÜ»áÏìÓ¦ÈκκóÐøµÄÇëÇó¡£
14.9 Cache-Control
Cache-Control³£ÓÃÍ·Óò±»ÓÃÓÚÖ¸¶¨Ö¸Á´ËÖ¸Áî±ØÐë±»ÔÚÇëÇó/ÏìÓ¦Á´ÉϵÄËùÓлº´æ»úÖÆ×ñÊØ¡£ÕâЩָÁîÖ¸¶¨·ÀÖ¹»º´æ¸ÉÉæÇëÇó»òÏìÓ¦µÄÐÐΪ¡£ÕâЩָÁî¾³£¸²¸ÇȱʡµÄ»º´æËã·¨¡£»º´æÖ¸ÁîÊǵ¥·½ÏòµÄ£¬ÒòΪÇëÇóÖÐÖ¸ÁîµÄ´æÔÚ²¢²»Òâζ×ÅÏìÓ¦ÖÐÒ²»áÓÐͬÑùµÄÖ¸Áî¡£
Çë×¢ÒâHTTP/1.0»º´æ¿ÉÄܲ¢²»ÊµÏÖCache-Control£¬¶øÊÇֻʵÏÖPragma: no-cache£¨²Î¼û14.31½Ú£©¡£
´úÀí»òÍø¹ØÓ¦ÓóÌÐò±ØÐëÈûº´æÖ¸Áîͨ¹ý²»¹ÜÕâЩָÁî¶Ô×Ô¼ºµÄÓ°Ï죬ÒòΪÕâЩָÁî¿ÉÄܶÔÇëÇó/ÏìÓ¦Á´ÉϵÄËùÓнÓÊÕÕß¶¼ÊÊÓᣲ»¿ÉÄÜΪһ¸öÌØ¶¨µÄ»º´æÖ¸¶¨Ò»¸ö»º´æÖ¸Áî¡£
Cache-Control = "Cache-Control" ":" 1#cache-directive
cache-directive = cache-request-directive
| cache-response-directive
cache-request-directive =
"no-cache" ; Section 14.9.1
| "no-store" ; Section 14.9.2
| "max-age" "=" delta-seconds ; Section 14.9.3, 14.9.4
| "max-stale" [ "=" delta-seconds ] ; Section 14.9.3
| "min-fresh" "=" delta-seconds ; Section 14.9.3
| "no-transform" ; Section 14.9.5
| "only-if-cached" ; Section 14.9.4
| cache-extension ; Section 14.9.6
cache-response-directive =
"public" ; Section 14.9.1
| "private" [ "=" <"> 1#field-name <"> ] ; Section 14.9.1
| "no-cache" [ "=" <"> 1#field-name <"> ]; Section 14.9.1
| "no-store" ; Section 14.9.2
| "no-transform" ; Section 14.9.5
| "must-revalidate" ; Section 14.9.4
| "proxy-revalidate" ; Section 14.9.4
| "max-age" "=" delta-seconds ; Section 14.9.3
| "s-maxage" "=" delta-seconds ; Section 14.9.3
| cache-extension ; Section 14.9.6
cache-extension = token [ "=" ( token | quoted-string ) ]
µ±Ö¸Áî²»°éÓÐ1#field-name²ÎÊý³öÏÖʱ£¬¸ÃÖ¸ÁîÊÊÓÃÓÚÕû¸öÇëÇó»òÏìÓ¦¡£µ±ÕâÑùÒ»¸öÖ¸Áî°éÓÐÒ»¸ö1#field-name²ÎÊýʱ£¬Ëü½öÓ¦ÓÃÓÚ±»ÃüÃûµÄÍ·Óò£¬¶ø²»ÄÜÓ¦ÓÃÓÚÇëÇó»òÏìÓ¦µÄÆäËû²¿·Ö¡£ÕâÒ»»úÖÆÖ§³Ö¿ÉÀ©Õ¹ÐÔ£»HTTPÐÒ齫À´µÄ°æ±¾µÄʵÏÖ¿ÉÒÔͨ¹ý½«Ö¸ÁîÓ¦ÓÃÓÚHTTP/1.1ÖÐ䶨ÒåµÄÍ·Óò¡£
»º´æ¿ØÖÆÖ¸Áî¿É·ÖΪÈçϼ¸Àࣺ
- ¶ÔʲôÊǿɻº´æµÄÏÞÖÆ£»Õâ¿ÉÄÜÖ»ÓÉÔ´·þÎñÆ÷Ö¸¶¨¡£
- ¶ÔʲôÄܱ»»º´æ±£´æµÄÏÞÖÆ£»Õâ¿ÉÓÉÔ´·þÎñÆ÷»òÓû§´úÀíÖ¸¶¨¡£
- ¶Ô»ù±¾¹ýÆÚ»úÖÆµÄ¸Ä½ø£»Õâ¿ÉÄÜÓÉÔ´·þÎñÆ÷»òÓû§´úÀíÖ¸¶¨¡£
- ¶Ô»º´æÖØÑéÖ¤¼°ÖØÔصĿØÖÆ£»Õâ¿ÉÄܽöÓÉÓû§´úÀíÖ¸¶¨¡£
- ¶ÔʵÌå´«ÊäµÄ¿ØÖÆ
- »º´æÏµÍ³µÄÀ©Õ¹¡£
14.9.1ʲôÊǿɻº´æµÄ
ȱʡÇé¿öÏ£¬ÈôÇëÇó·½·¨¡¢ÇëÇóÍ·ÓòºÍÏìӦ״̬ÂëÖ¸Ã÷ÁËÏìӦΪ¿É»º´æµÄ£¬Ôò´ËÏìÓ¦¾ÍÊÇ¿ÉÒÔ»º´æµÄ¡£13.4½Ú×ܽáÁ˿ɻº´æÐÔµÄÕâЩȱʡÇé¿ö¡£ÏÂÁлº´æ¿ØÖÆÏìÓ¦Ö¸ÁCache-Control response deirctives£©ÔÊÐíÔ´·þÎñÆ÷¸²¸ÇȱʡµÄÏìÓ¦¿É»º´æÐÔ£º
public
Ö¸Ã÷ÏìÓ¦ÏìÓ¦¿ÉÒÔ±»Èκλº´æ±£´æ£¬¼´±ã¸ÃÏìӦͨ³£ÊDz»¿É»º´æµÄ»ò¸ÃÏìÓ¦Ö»±»Ò»¸ö·Ç¹²Ïí»º´æ±£´æµÄÇé¿öÏ¡££¨²Î¼û14.8½Ú£¬¹ØÓÚAuthorizationÍ·ÓòµÄ¸ü¶àÏêÊö¡££©
private
±íÃ÷ÏìÓ¦ÏûÏ¢µÄ²¿·Ö»òËùÓв¿·ÖÊÇΪһ¸öÓû§×¼±¸µÄ²¢ÇÒ²»µÃ±»¹²Ïí»º´æ±£´æ¡£ÕâʹԴ·þÎñÆ÷¿ÉÒÔÉêÃ÷ÏìÓ¦µÄÌØ¶¨²¿·ÖÊÇÕë¶ÔÒ»¸öÓû§£¬²¢ÇÒ¶ÔÆäËûÓû§µÄÇëÇó¶øÑÔ²»ÊÇÓÐЧµÄÏìÓ¦¡£Ò»¸ö˽ÓУ¨·Ç¹²Ïí£©»º´æ¿ÉÒÔ»º´æ´ËÏìÓ¦¡£
×¢£ºµ¥´ÊprivateµÄʹÓýöÓÃÀ´¿ØÖÆÏìÓ¦Ôںδ¦¿É±»»º´æ£¬¶ø²»Äܱ£Ö¤ÏûÏ¢ÄÚÈݵÄ˽ÓÐÐÔ¡£
no-cache
Èç¹ûno-cache»º´æ¿ØÖÆÖ¸ÁîûÓÐÖ¸¶¨Ò»¸öfield-name£¬ÄÇôһ¸ö»º´æ²»ÄÜÀûÓôËÏìÓ¦ÔÚûÓÐͨ¹ýÔ´·þÎñÆ÷¶ÔËü½øÐгɹ¦µÄÖØÑéÖ¤µÄÇé¿öÏÂÈ¥Âú×ãºóÐøµÄÇëÇó¡£ÕâÔÊÐíÔ´·þÎñÆ÷È¥·ÀÖ¹ÏìÓ¦±»»º´æ±£´æ£¬¼´Ê¹´Ë»º´æÒѾ±»ÉèÖÃÄÜ·µ»Ø¸ø¿Í»§¶ËÇëÇóÒ»¸ö³Â¾ÉµÄÏìÓ¦¡£
Èôno-cache»º´æ¿ØÖÆÖ¸ÁîÖ¸¶¨Ò»¸ö»ò¶à¸öfield-name£¬ÄÇôһ¸ö»º´æ¿ÉÒÔÀûÓôËÏìӦȥÂú×ãºóÐøµÄÇëÇ󣬵«ÕâÒªÊÜÏÞÓÚ¶Ô»º´æµÄÈÎºÎÆäËüÏÞÖÆ¡£È»¶ø£¬Ö¸¶¨µÄfiled-name±ØÐë²»ÄÜÔÚºóÐøÇëÇóµÄÏìÓ¦Àï±»·¢ËÍÈç¹û´ËÏìӦûÓÐÔÚÔ´·þÎñÆ÷ÄÇÀïµÃµ½³É¹¦ÖØÑéÖ¤µÄÇé¿öÏ¡£ÕâÔÊÐíÔ´·þÎñÆ÷ÄÜ·ÀÖ¹»º´æÖØÀûÓÃÏìÓ¦ÀïµÄijЩͷÓò£¬µ«ÈÔÈ»¿ÉÒÔÔÊÐí»º´æÏìÓ¦µÄÊ£Óಿ·Ö¡£
×¢Ò⣺´ó¶àÊýHTTP/1.0»º´æ½«²»ÄÜʶ±ð»ò×ñÑÕâ¸öÖ¸Áî¡£
14.9.2ʲôÄܱ»»º´æ±£´æ
no-store
no-store»º´æ¿ØÖÆÖ¸ÁîµÄÄ¿µÄÔÚÓÚ·ÀÖ¹ÎÞÒâµÄй¶»ò±£ÁôÁËÃô¸ÐÐÅÏ¢£¨±ÈÈç´æ·ÅÔÚ±¸·Ý´Å´øµÄÐÅÏ¢£©¡£ no-store»º´æ¿ØÖÆÖ¸ÁîÓ¦ÓÃÓÚÕû¸öÏûÏ¢£¬²¢ÇÒ¿ÉÒÔÔÚÏìÓ¦Àï»òÔÚÇëÇóÀï±»·¢ËÍ¡£Èç¹ûÔÚÇëÇóÀï±»·¢ËÍ£¬Ò»¸ö»º´æ²»Äܱ£´æ´ËÇëÇó»ò´ËÇëÇóÏìÓ¦µÄÈκβ¿·Ö¡£Èç¹ûÔÚÏìÓ¦Àï±»·¢ËÍ£¬Ò»¸ö»º´æ²»Äܱ£´æ´ËÏìÓ¦»òÒýÆð´ËÏìÓ¦ÇëÇóµÄÈκβ¿·Ö¡£´Ë»º´æ¿ØÖÆÖ¸ÁîÄÜÓ¦ÓÃÓڷǹ²Ïí»º´æºÍ¹²Ïí»º´æ¡£“²»Äܱ£´æ”ÔÚÕâ¸öÉÏÏÂÎÄÀcontext£¬Òë×¢£ºÒ²¿ÉÒԽб³¾°£©µÄÒâ˼ÊÇÖ¸»º´æ²»ÄÜÓÐÒâµÄ°ÑÐÅÏ¢±£´æÔÚ·ÇÒ×ʧÐÔ´æ´¢À¶øÇÒ±ØÐ뾡Á¦È¥É¾³ýÒ×ʧÐÔ´æ´¢ÉϵÄÐÅÏ¢µ±Ëüת·¢Íê±Ïºó¡£
¼´Ê¹µ±´ËÖ¸ÁîÔÚÒ»¸öÏìÓ¦Àïʱ£¬Óû§Ò²¿ÉÄÜ»áÏÔʾµØÔÚ»º´æÏµÍ³Ö®Íâ±£´æÕâ¸öÏìÓ¦£¨ÀýÈ磬ÀûÓÃÒ»¸ö“Áí´æÎª”¶Ô»°¿ò£©µÄµØ·½¡£ÀúÊ·»º´æ£¨Òë×¢£º¼û13.13½Ú£©¿ÉÄܱ£´æÕâ¸öÏìÓ¦×÷ΪËüÃÇÕý³£²Ù×÷µÄÒ»¸ö²¿·Ö¡£
´ËÖ¸ÁîµÄÄ¿µÄÊÇΪÁËÂú×ãijЩÓû§ÉùÃ÷µÄÐèÇ󣬻¹ÓоÍÊǸøÄÇЩ¶ÔżȻÐÅÏ¢·¢²¼£¨Õâͨ¹ýδԤÁϵضԻº´æÊý¾Ý×éÖ¯µÄ·ÃÎÊ£©±È½ÏÔÚÒâµÄ×÷ÕßÒ²Ìṩ·½±ã¡£ÔÚһЩÇé¿öÏ£¬ÀûÓô˻º´æ¿ØÖÆÖ¸Áî¿ÉÄÜ»áÔöÇ¿Òþ˽£¬µ«ÊÇÎÒÃÇ×¢Òâµ½Ëü²¢²»ÊÇÔÚÈκÎÇé¿ö϶¼ÊÇ¿ÉÐÅÈεĻò¶¼ÊÇÄܳä·ÖµØ±£»¤Òþ˽¡£ÌرðÊÇ£¬¶ñ¶¾µÃ»òÕßÓÐË𺦵Ļº´æ¿ÉÄܲ»ÄÜʶ±ðµ½»ò×ñÑ´ËÖ¸Á²¢ÇÒÍøÂçͨÐÅËæÊ±Ò²ÈÝÒ×Êܵ½ÇÔÌý¡£
14.9.3¶Ô»ù±¾¹ýÆÚ»úÖÆµÄ¸Ä½ø
ʵÌåµÄ¹ýÆÚʱ¼ä£¨Òë×¢£ºÕâÀïµÄ¹ýÆÚʱ¼äÒ²¾ÍÊÇ“ÏÔʾ¹ýÆÚʱ¼ä”£¬¼û13.3.1Àï¹ØÓÚ“ÏÔʾ¹ýÆÚʱ¼ä”µÄ˵Ã÷£©¿ÉÓÉÔ´·þÎñÆ÷ÀûÓÓExpires”Í·Óò£¨²Î¼û14.21½Ú£©Ö¸¶¨¡£ »òÕߣ¬ËüÒ²¿ÉÒÔÔÚÏìÓ¦ÀïÀûÓÃmax-age»º´æ¿ØÖÆÖ¸ÁîÖ¸¶¨¡£µ±max-age»º´æ¿ØÖÆÖ¸Áî³öÏÖÔÚÒ»¸ö»º´æµÄÏìÓ¦ÀïµÄʱºò£¬Èç¹û´Ë»º´æµÄÏìÓ¦µ±Ç°ÄêÁ䣨current age£¬Òë×¢£º¼û13.2.3½Ú¹ØÓÚcurrent ageµÄ¶¨Ò壩±È¼ÙÈçÒ»¸öеÄÇëÇó´ËʱȥÇëÇóÄǸö×ÊÔ´¶øµÃµ½ÏìÓ¦ÀïµÄageÖµ£¨ÒÔÃëΪµ¥Î»£©Òª´ó£¬ÄÇô´Ë»º´æµÄÏìÓ¦¾ÍÊdz¾ɵģ¨stale£©¡£¶ÔÔÚÒ»¸öÏìÓ¦ÀïÓ¦ÓÃmax-age»º´æ¿ØÖÆÖ¸ÁîÒâζ×Å´ËÏìÓ¦Êǿɻº´æµÄ£¨Ò²¾ÍÊÇ˵“¹«ÓеĔ£©³ý·Ç¸ü¶àÆäËûµÄ¾ßÓÐÏÞÖÆÐԵĻº´æ¿ØÖÆÖ¸Áî³öÏÖÔÚÏìÓ¦Àï¡£
ÈôÏìӦͬʱº¬ÓÐExpiresÍ·ÓòºÍmax-age»º´æ¿ØÖÆÖ¸ÁÄÇômax-age»º´æ¿ØÖÆÖ¸ÁîÓ¦¸Ã¸²¸ÇExpiresÍ·Óò£¬¼´Ê¹ExpiresÍ·Óò¸ü¾ßÏÞÖÆÐÔ¡£´Ë¹æÔòÔÊÐíÔ´·þÎñÆ÷¶ÔÒ»¸ö¸ø¶¨µÄÏìÓ¦Ìṩһ¸ö¸ü³¤µÄ¹ýÆÚʱ¼ä¸øHTTP/1.1»º´æ£¨»òÒÔºóµÄ°æ±¾£©£¬Õâ¶Ô±ÈHTTP/1.0»º´æÀ´Ëµ¡£Õâ¸ö¹æÔò¿ÉÄÜ»áºÜÓÐÓã¬Èç¹ûij¸öHTTP/1.0»º´æ²»ºÏÊʵؼÆËãÁËÄêÁä»ò¹ýÆÚʱ¼äÓÉÓÚ²»Í¬²½µÄʱÖÓ¡£
Ðí¶àHTTP/1.0»º´æÊµÏÖ¿ÉÄÜ»á°ÑÏìÓ¦ÀïСÓÚ»òµÈÓÚ¸ÃÏìÓ¦ÀïDateÍ·ÓòÖµµÄExpiresÍ·ÓòÖµ¿´³ÉÓë“no-cache”»º´æÏìÓ¦¿ØÖÆÖ¸ÁCache-Control response directive£©µÈЧ¡£Èç¹ûÒ»¸öHTTP/1.1»º´æ½ÓÊÕµ½ÕâÑùÒ»¸öÏìÓ¦£¬²¢ÇÒ´ËÏìӦûÓаüº¬Ò»¸öCache-ControlÍ·Óò£¬ËüÓ¦¸Ã°Ñ´ËÏìÓ¦¿´³ÉÒ»¸ö²»ÄÜ»º´æµÄ£¬ÕâÊÇΪÁ˱£³ÖºÍHTTP/1.0·þÎñÆ÷¼æÈÝ¡£
×¢Ò⣺һ¸öÔ´·þÎñÆ÷¿ÉÄÜÏ£Íû°ÑÒ»¸öÏà¶ÔеÄHTTP»º´æ¿ØÖÆÌØÐÔ£¬ÀýÈç“private”»º´æ¿ØÖÆÖ¸ÁÓÃÔÚÒ»¸ö´æÓоɰ汾»º´æµÄÍøÂçÉÏ£¬¶øÇҴ˾ɰ汾»º´æ²»ÄÜÀí½â´ËÌØÐÔ¡£Ô´·þÎñÆ÷Ó¦¸ÃÐèÒª°ÑÐÂÌØÐÔºÍÏìÓ¦ÀïֵСÓÚ»òµÈÓÚDateÖµµÄExpiresÍ·ÓòÁªºÏÆðÀ´£¬ÕâÑùÒÔ±ã·ÀÖ¹¾É°æ±¾µÄ»º´æ²»ºÏÊʵı£´æ´ËÏìÓ¦¡£
s-maxage
Èç¹ûÒ»¸öÏìÓ¦°üº¬Ò»¸ös-maxage»º´æ¿ØÖÆÖ¸ÁÄÇô¶ÔÓÚÒ»¸ö¹²Ïí»º´æ£¨²»ÄܶÔ˽Óлº´æ£©À´Ëµ£¬s-maxageÖ¸¶¨µÄÖµ½«»á¸²¸Çmax-age»º´æ¿ØÖÆÖ¸Áî»òExpiresÍ·Óò¡£s-maxage»º´æ¿ØÖÆÖ¸ÁîÕÕÑùÒâÖ¸proxy-revalidate»º´æ¿ØÖÆÖ¸Á¼û14.9.4½Ú£©µÄÓïÒ壬Ҳ¾ÍÊÇ˵£¬´Ë¹²Ïí»º´æ²»ÄÜÀûÓô˻º´æÏîÔÚËü±ä¾Éºó£¬ÔÚûÓÐͨ¹ýÔ´·þÎñÆ÷Ê×ÏÈÖØÑéÖ¤ËüµÄÇé¿öÏ£¬È¥ÏìÓ¦ºóÐøµÄÇëÇó¡£s-maxage»º´æ¿ØÖÆÖ¸Áî×ÜÊDZ»Ë½Óлº´æºöÂÔ¡£
×¢£º´ó¶àÊý²»×ñѴ˹淶µÄÀϰ汾»º´æÃ»ÓÐʵÏÖÈκλº´æ¿ØÖÆÖ¸Áî¡£ Ò»¸öÔ´·þÎñÆ÷Èç¹ûÏ£ÍûÀûÓÃÒ»¸ö»º´æ¿ØÖÆÖ¸ÁîÈ¥ÏÞÖÆ£¨µ«²»ÄÜ×èÖ¹£©×ñÑHTTP/1.1µÄ»º´æÈ¥½øÐлº´æ´¦Àí£¬ÄÇôËü¿ÉÄÜ»á²ÉÓÃmax-age¿ØÖÆÖ¸ÁîÈ¥¸²¸ÇExpiresÍ·Óò£¬²¢ÇÒËü»á³ÐÈÏHTTP/1.1ÒÔǰ°æ±¾µÄ»º´æ²»»áÈ¥¹Û²ìmax-age»º´æ¿ØÖÆÖ¸Áî¡£
ÆäËü»º´æ¿ØÖÆÖ¸ÁîÔÊÐíÒ»¸öÓû§´úÀí£¨user agent£©È¥¸Ä±ä»ù±¾µÄ¹ýÆÚ»úÖÆ¡£ÕâЩָÁî¿ÉÄܻᱻָ¶¨ÔÚÇëÇóÀ
max-age
±íÃ÷¿Í»§¶ËÔ¸½ÓÊÜÒ»¸öÕâÑùÒ»¸öÏìÓ¦£¬´ËÏìÓ¦µÄÄêÁä²»´óÓÚ¿Í»§¶ËÇëÇóÀïmax-ageÖ¸¶¨Ê±¼ä£¨ÒÔÃëΪµ¥Î»£©£¨Òë×¢£ºÈç¹û´óÓڵϰ£¬±íÃ÷´ËÏìÓ¦Êdz¾ɵģ©¡£³ý·Çmax-stale»º´æ¿ØÖÆÖ¸ÁîÒ²°üº¬ÔÚÏìÓ¦À·ñÔò¿Í»§¶ËÊDz»ÄܽÓÊÕÒ»¸ö³Â¾ÉÏìÓ¦µÄ¡£
min-fresh
±íÃ÷¿Í»§¶ËÔ¸½ÓÊÜÒ»¸öÕâÑùµÄÏìÓ¦£¬Æä±£ÏÊÊÙÃü²»Ð¡ÓÚÆäÏìÓ¦µ±Ç°ÄêÁä(Òë×¢£ºcurrent age£¬¼û13.2.3½Ú¹ØÓÚcurrent_ageµÄ¶¨Òå)Óë¿Í»§¶ËÇëÇóÀïµÄmin-freshÖ¸¶¨Ê±¼äÖ®ºÍ£¨ÒÔÃëΪµ¥Î»£©¡£Ò²¾ÍÊÇ˵£¬¿Í»§¶ËÏëÒªÒ»¸öÏìÓ¦ÖÁÉÙÔÚmin-freshÖ¸¶¨µÄʱ¼äÄÚÊDZ£Ïʵġ£
max-stale
±íÃ÷¿Í»§¶ËÔ¸½ÓÊÜÒѾ¹ýÆÚµÄÏìÓ¦¡£ Èô¿Í»§¶ËÇëÇóÀïΪmax-ageÖ¸¶¨ÁËÒ»¸öÖµ£¬Ôò±íÃ÷¿Í»§¶ËÔ¸½ÓÊܹýÆÚʱ¼ä²»³¬¹ýËüÔÚmax-staleÀïÖ¸¶¨ÃëÊýµÄÏìÓ¦¡£Èômax-ageδָ¶¨Ò»¸öÖµ£¬Ôò¿Í»§¶ËÔ¸½ÓÊÜÈÎÒâÄêÁäµÄ³Â¾ÉÏìÓ¦¡£
Èç¹û»º´æ·µ»ØÁËÒ»¸ö³Â¾ÉÏìÓ¦£¬ÕâÊÇÓÉÓÚmax-stale»º´æ¿ØÖÆÖ¸Áî³öÏÖÔÚÇëÇóÀ»òÓÉÓÚ´Ë»º´æ±»ÉèÖóÉÄܸ²¸ÇÏìÓ¦µÄ¹ýÆÚʱ¼ä£¬ÄÇô´Ë»º´æ±ØÐë°ÑÒ»¸öWarningÍ·Óò·Å½øÕâ¸ö³Â¾ÉÏìÓ¦À´ËWarningÍ·ÓòÀïÓ¦¸ÃÊÇ110¾¯¸æÂ루ÏìÓ¦Êdz¾ɵģ©¡£
Ò»¸ö»º´æ¿ÉÒÔ±»ÉèÖÃΪ¿ÉÒÔ²»ÐèÒªÑéÖ¤¾Í¿ÉÒÔ·µ»Ø³Â¾ÉµÄÏìÓ¦£¬µ«Õâ²»Ó¦ÓëÈκΓ±ØÐ딵ȼ¶¹ØÓÚ»º´æÑéÖ¤£¨ÀýÈ磬һ¸ö“must-revalidate”»º´æ¿ØÖÆÖ¸ÁµÄÒªÇó³åÍ»¡£
ÈôÐÂÇëÇóÓ뻺´æÏî¶¼°üº¬Ò»¸ö“max-age”»º´æ¿ØÖÆÖ¸ÁÄÇôȡÁ½¸öÖµµÄСÕßȥΪ´ËÇëÇó¾ö¶¨»º´æÏîµÄ±£Ïʳ̶ȡ£
14.9.4»º´æÖØÑéÖ¤ºÍ¼ÓÔØ¿ØÖÆ£¨Cache Revalidation and Reload Controls£©
ÓÐʱ£¬Óû§´úÀí¿ÉÄÜÏ£Íû»ò³öÓÚÐèÒª£¬¼á³ÖÏëÈÃÒ»¸ö»º´æÍ¨¹ýÔ´·þÎñÆ÷È¥ÖØÑéÖ¤ËüµÄ»º´æÏ»òÕß´ÓÔ´·þÎñÆ÷ÄÇÀïÖØÐ¼ÓÔØËüµÄ»º´æÏî¡£end-to-endÖØÑéÖ¤¿ÉÄÜ»áÓбØÒªµÄ£¬Èç¹û»º´æ»òÔ´·þÎñÆ÷ÒѾ¹À¼ÆÁË»º´æÏìÓ¦£¨cached response£©µÄ¹ýÆÚʱ¼ä¡£end-to-endÖØÔØ¿ÉÄÜÊÇÓбØÒªµÄ£¬Èç¹û»º´æÏîÓÉÓÚijÔÒòÒѾ±äµÃ³Â¾ÉÁË¡£
end-to-endÖØÑéÖ¤¿ÉÄܱ»ÇëÇ󣺵±¿Í»§¶ËûÓб¾µØ»º´æ¸±±¾£¬ÔÚÕâÖÖÇé¿öÏ£¬ÎÒÃdzÆËüΪ“ûָ¶¨µÄend-to-endÖØÑéÖ¤£¨unspecified end-to-end revalidation£©”£»µ±¿Í»§¶ËÓб¾µØ»º´æ¸±±¾£¬ÔÚÕâÖÖÇé¿öÏ£¬ÎÒÃdzÆËüΪ“Ö¸¶¨µÄend-to-endÖØÑéÖ¤£¨specific end-to-end revalidation£©”¡£
¿Í»§¶ËÄÜÖ¸¶¨ÏÂÃæÈýÖÖ¶¯×÷£¬ÀûÓûº´æ¿ØÖÆÇëÇóÖ¸ÁCache-Control request directives£©£º
end-to-end reload
ÇëÇó°üÀ¨“no-cache”»º´æ¿ØÖÆÖ¸Á»òΪÁËÓëHTTP/1.0¿Í»§¶Ë¼æÈݵēPragma: no-cache”»º´æ¿ØÖÆÖ¸ÁͷÓòÃû²»Äܱ»°üº¬ÔÚno-cache»º´æ¿ØÖÆÖ¸ÁîÀï¡£·þÎñÆ÷²»ÄÜÀûÓÃÒ»¸ö»º´æ¸±±¾À´ÏìÓ¦ÕâÑùÒ»¸öÇëÇó¡£
specific end-to-end revalidation
ÕâÑùµÄÇëÇó°üº¬Ò»¸ö“max-age=0”»º´æ¿ØÖÆÖ¸ÁËüÇ¿ÖÆÃ¿¸ö;¾¶Ô´·þÎñÆ÷µÄ»º´æÈ¥Í¨¹ýÏÂÒ»¸ö»º´æ»ò·þÎñÆ÷À´ÖØÑéÖ¤ËüËùÓµÓеĻº´æÏÈç¹ûÓеϰ£©¡£´Ë³õʼÇëÇó°üº¬Ò»¸ö´øÓпͻ§¶Ëµ±Ç°ÑéÖ¤Æ÷µÄ»º´æÑéÖ¤Ìõ¼þ¡£
unspecified end-to-end revalidation
ÕâÑùµÄÇëÇó°üº¬Ò»¸ö“max-age=0”»º´æ¿ØÖÆÖ¸ÁËüÇ¿ÖÆÃ¿¸ö;¾¶Ô´·þÎñÆ÷µÄ»º´æÈ¥Í¨¹ýÏÂÒ»¸ö»º´æ»ò·þÎñÆ÷À´ÖØÑéÖ¤ËüËùÓµÓеĻº´æÏÈç¹ûÓеϰ£©¡£´Ë³õʼÇëÇó²»°üº¬Ò»¸ö»º´æÑéÖ¤Ìõ¼þ£»ÑØ×Å·¾¶ÉϵĵÚÒ»¸ö»º´æ£¨Èç¹ûÓеϰ£©£¬Èç¹ûËüÓµÓÐÄǸö×ÊÔ´µÄÒ»¸ö»º´æÏÄÇô´Ë»º´æ»á°üº¬Ò»¸ö´øÓлº´æµ±Ç°ÑéÖ¤Æ÷µÄ»º´æÑéÖ¤Ìõ¼þ¡£
max-age
µ±Ò»¸öÖм仺´æ±»Ò»¸ömax-age=0µÄ»º´æ¿ØÖÆÖ¸ÁîÇ¿ÆÈÈ¥ÖØÑéÖ¤ËüµÄ»º´æÏ²¢ÇÒ¿Í»§¶ËÒѾÔÚÇëÇóÀï°üº¬ÁËËüÓµÓеÄÑéÖ¤Æ÷£¬´ËÑéÖ¤Æ÷¿ÉÄܲ»Í¬ÓÚµ±Ç°»º´æÏîÀï±£´æµÄÑéÖ¤Æ÷¡£ÔÚÕâÖÖÇé¿öÏ£¬»º´æÓ¦¸ÃÔÚ²»Ó°ÏìÓïÒå͸Ã÷ÐÔµÄÇé¿öÏÂÀûÓÃÁ½¸öÑéÖ¤Æ÷ÖеÄÒ»¸öÈ¥Ö´ÐÐÇëÇó¡£
È»¶ø£¬ÑéÖ¤Æ÷µÄÑ¡Ôñ¿ÉÄÜ»áÓ°ÏìÐÔÄÜ¡£×îºÃµÄ°ì·¨¶ÔÖм仺´æÀ´Ëµ£¬¾ÍÊǵ±Ö´ÐÐÇëÇóʱÀûÓÃËü×Ô¼ºµÄÑéÖ¤Æ÷¡£Èç¹û·þÎñÆ÷ÒÔ303£¨Ã»Óиı䣩»Ø¸´£¬ÄÇô´Ë»º´æÄÜ·µ»ØÒ»¸öËü×Ô¼ºµÄµ±Ç°ÒѾÑéÖ¤Á˵ĸ±±¾¸ø¿Í»§¶ËͬʱÒÔÒ»¸ö200£¨OK£©×´Ì¬Âë¡£Èç¹û·þÎñÆ÷ÒÔÒ»¸öÐÂʵÌåºÍÒ»¸öÐµĻº´æÑéÖ¤Æ÷À´»Ø¸´ÇëÇó£¬ÄÇô´ËÖм仺´æÄܰѷµ»ØµÄÑéÖ¤Æ÷ͬ¿Í»§¶ËÇëÇóÀïµÄÑéÖ¤Æ÷×÷±È½Ï£¬Õâͨ¹ýÀûÓÃÒ»¸öÇ¿±È½Ï·½·¨¡£Èç¹û¿Í»§¶ËµÄÑéÖ¤Æ÷ºÍÔ´·þÎñÆ÷µÄÏàµÈ£¬ÄÇô´ËÖм仺´æÆ÷Ö»ÊǼòµ¥µÄ·µ»Ø304£¨Ã»Óиı䣩ÏìÓ¦¡£·ñÔò£¬Ëü·µ»ØÒ»¸öеÄʵÌå²¢ÇÒ״̬ÂëÊÇ200µÄÏìÓ¦¡£
Èç¹ûÒ»¸öÇëÇó°üº¬Ò»¸öno-cache»º´æ¿ØÖÆÖ¸ÁÄÇôËü²»Ó¦¸Ãmin-fresh£¬max-stale£¬»òmax-age»º´æ¿ØÖÆÖ¸Áî¡£
only-if-cache
ÔÚһЩÇé¿öÏ£¬ÀýÈçÔã¸âµÄÍøÂçÁ¬½Ó£¬Ò»¸ö¿Í»§¶Ë¿ÉÄÜÏ£ÍûÒ»¸ö»º´æÖ»·µ»ØËüµ±Ç°±£´æµÄÏìÓ¦£¬²¢ÇÒ²»ÐèҪͨ¹ýÔ´·þÎñÆ÷¶ÔÆä½øÐÐÖØÐ¼ÓÔØ»òÖØÑéÖ¤¡£Èç¹ûÕâÑù×÷¿Í»§¶Ë¿ÉÄÜ»á°üº¬Ò»¸öonly-if-cached»º´æ¿ØÖÆÖ¸ÁîÔÚÇëÇóÀï¡£Èç¹û»º´æ½ÓÊÕÁËÕâÑùµÄÖ¸ÁÄÇôËüÓ¦¸ÃÀûÓÃÒ»¸öÓëÇëÇóËùÒªÇóµÄ»º´æÏîÈ¥ÏìÓ¦£¬»òÕßÒÔ504£¨Íø¹Ø³¬Ê±£©×´Ì¬ÂëÏìÓ¦¡£È»¶ø£¬Èç¹ûÒ»×黺´æ×÷Ϊһ¸öͳһµÄϵͳÀ´²Ù×÷£¬²¢ÇÒÓзdz£ºÃµÄÄÚ²¿Á¬½Ó£¬ÄÇôÕâ¸öÇëÇó¿ÉÄÜ»áת·¢µ½»º´æ×éµÄÄÚ²¿¡£
must-revalidate
ÓÉÓÚÒ»¸ö»º´æ¿ÉÄܱ»ÉèÖÃÈ¥ºöÂÔ·þÎñÆ÷Ö¸¶¨µÄ¹ýÆÚʱ¼ä£¬²¢ÇÒÓÖÓÉÓÚÒ»¸ö¿Í»§¶ËÇëÇó¿ÉÄܰüº¬Ò»¸ömax-stale»º´æ¿ØÖÆÖ¸ÁËüÖ»ÓÐÒ»¸öСӰÏ죩£¬ËùÒÔ´ËÐÒéÕÕÑù°üº¬Ò»¸öÈÃÔ´·þÎñÆ÷Ç¿ÆÈ»º´æÏî±»ÖØÑéÖ¤µÄ»úÖÆ¡£µ±must-revalidate»º´æ¿ØÖÆÖ¸Áî³öÏÖÔÚÏìÓ¦Àï²¢±»Ò»¸ö»º´æ½ÓÊպ󣬴˻º´æ²»ÄÜÀûÓô˻º´æÏÈç¹ûÔÚËü±äµÃ³Â¾É²¢ÇÒûÓÐͨ¹ýÔ´·þÎñÆ÷¶ÔËü½øÐÐÖØÑéÖ¤µÄÇé¿öÏ£¬È¥ÏìÓ¦Ò»¸öºóÐøµÄÇëÇó¡££¨Ò²¾ÍÊÇ˵£¬Èç¹û£¨»ùÓÚÔ´·þÎñÆ÷µÄExpires»òmax-ageÖµ£©»º´æÏìÓ¦Êdz¾ɵģ¬ÄÇô£¬´Ë»º´æÃ¿´Î±ØÐë½øÐÐend-to-endÖØÑéÖ¤£©
must-revalidate»º´æ¿ØÖÆÖ¸Áî¶Ôij¸öÐÒéÌØÐԵĿÉÐÅÀµÐÔ²Ù×÷ÒªÓбØÒªÖ§³Ö¡£ÔÚËùÓÐÇé¿öÏ£¬Ò»¸öHTTP/1.1»º´æ±ØÐë×ñÑmust-revalidate»º´æ¿ØÖÆÖ¸Áî£»ÌØ±ðµØ£¬Èç¹û´Ë»º´æ²»ÄÜÖ±½ÓºÍÔ´·þÎñÆ÷ͨÐÅ£¬ÄÇôËü±ØÐë²úÉúÒ»¸ö504£¨Íø¹Ø³¬Ê±£©ÏìÓ¦¡£
·þÎñÆ÷Ó¦¸Ã·¢ËÍmust-revalidate»º´æ¿ØÖÆÖ¸ÁֻÓÐÔÚ¿Í»§¶Ë»ò»º´æ¶ÔÄǸöʵÌåµÄÖØÑéÖ¤ÇëÇóµÄ²Ù×÷ʧ°ÜµÄʱºò£¬ÀýÈçÒ»¸ö²»¶¯ÉùÏ¢µÄûÓÐÖ´ÐеĽðÈÚÊÂÎñ¡£½ÓÊն˲»ÄܲÉÈ¡ÈκÎÎ¥·´´Ë»º´æ¿ØÖÆÖ¸ÁîµÄ×Ô¶¯µÄÐÐΪ£¬²¢ÇÒ²»ÄÜ×Ô¶¯µØÌṩһ¸ö±»ÑéÖ¤ÎÞЧµÄʵÌ帱±¾Èç¹û´Ë¸±±¾Í¨¹ýÔ´·þÎñÆ÷ÖØÑé֤ʧ°Ü£¨Òë×¢£ºÑé֤ʧ°Ü˵Ã÷»º´æÀï±£´æµÄ¸±±¾Í¨¹ýÔ´·þÎñÆ÷ÑéÖ¤ÊÇÎÞЧµÄ£»ÑéÖ¤³É¹¦ËµÃ÷»º´æÀï±£´æµÄ¸±±¾Í¨¹ýÔ´·þÎñÆ÷ÑéÖ¤ÊÇÓÐЧµÄ£¬Ëü¿ÉÒÔÓÃÀ´ÏìÓ¦ºóÐøµÄÇëÇ󣩡£
¾¡¹ÜÕâ²»±»ÍƼö£¬Óû§´úÀí£¨user agent£©Èç¹ûÔÚÔã¸âµÄÍøÂçÁ¬½ÓÏÞÖÆÏ£¬¿ÉÄÜ»áÎ¥·´´Ë»º´æ¿ØÖÆÖ¸Áµ«ÊÇ£¬Èç¹ûÕâÑùµÄ»°£¬Ëü±ØÐëÏÔʾµØÈ¥¾¯¸æÓû§ÕâÊÇÒ»¸öûÓÐÑéÖ¤µÄÏìÓ¦£¬¶øÇÒÓû§»§´úÀí»¹Ó¦¸ÃÐèÒªÓû§µÄÈ·ÈÏÐÅÏ¢¡£
proxy-revalidate
proxy-revalidate»º´æ¿ØÖÆÖ¸ÁîºÍmust-revalidate»º´æ¿ØÖÆÖ¸ÁîÓÐÏàͬµÄÓïÒ壬³ýÁËËü²¢²»ÄÜÓ¦ÓÃÓڷǹ²ÏíµÄÓû§´úÀíµÄ»º´æ¡£ËüÄܱ»ÓÃÓÚÒ»¸öÒѾ±»ÊÚȨÇëÇóµÄÏìÓ¦£¬È¥ÔÊÐíÓû§µÄ»º´æÄܱ£´æ»òÕß¹ýºóÄÜ·µ»Ø´ËÏìÓ¦¶ø²»ÐèÒªÈ¥ÖØÑéÖ¤Ëü£¨ÒòΪËüÒѾ±»ÄǸöÓû§ÊÚȨÁËÒ»´Î£©£¬µ«ÊÇ·þÎñÓÚ¶à¸öÓû§µÄ´úÀíÈÔÈ»ÐèҪÿ´ÎÈ¥ÖØÑéÖ¤Ëü£¨ÕâÊÇΪÁ˱£Ö¤Ã¿¸öÓû§ÒѾ±»ÊÚȨ£©¡£×¢ÒâÕâÑùµÄÊÚȨÏìÓ¦ÕÕÑùÐèÒªpublic»º´æ¿ØÖÆÖ¸ÁÕâÊÇΪÁËÔÊÐíËûÃÇÍêÈ«Äܱ»»º´æ¡£
14.9.5 No-Transform»º´æ¿ØÖÆÖ¸Áî
no-ransform
Öм仺´æ£¨´úÀí£©µÄʵÏÖÕßÃÇÒѾ·¢ÏÖת»»Ä³¸öʵÌåÖ÷ÌåµÄýÌåÀàÐÍתÊǺÜÓÐÓõġ£Ò»¸ö·Ç͸Ã÷´úÀí¿ÉÄÜ£¬ÀýÈ磬»áÔÚ²»Í¬Í¼Ïñ¸ñʽ֮¼ä½øÐÐת»»£¬ÕâÊÇΪÁ˽ÚÔ¼¿Õ¼ä»òÔÚµÍËÙµÄÁ¬½ÓÉϼõÉÙͨÐÅÁ÷Á¿¡£
È»¶ø£¬µ±ÕâЩת»»Ó¦ÓÃÓÚijЩӦÓõÄʵÌåÖ÷Ìåʱ£¬»áÒý·¢ÑÏÖØµÄÔË×÷·½ÃæµÄÎÊÌâ¡£±ÈÈ磬ҽѧͼÏóÓ¦Ó㬿ÆÑ§Êý¾Ý·ÖÎöºÍ¶Ëµ½¶ËÈÏÖ¤¶¼ÒÀÀµÓÚ½ÓÊÕµ½µÄʵÌåÖ÷ÌåÓëÔʵÌåÖ÷ÌåÒ»±ÈÒ»µÄ¹ØÏµ¡£
ËùÒÔ£¬Èç¹ûÏûÏ¢°üÀ¨ÁËno-ransform»º´æ¿ØÖÆÖ¸Á ÄÇôÖм仺´æ»ò´úÀí¾Í²»Ó¦¸Ã¸Ä±ä13.5.2½ÚÖÐÁгöµÄÍ·Óò¡£ÕâÒâζ×Å»º´æ»ò´úÀí²»µÃ¸Ä±äÓÉÕâЩ±¨Í·¶¨ÒåµÄʵÌåÖ÷ÌåµÄÈκη½Ã棬°üÀ¨ÊµÌåÖ÷Ìå±¾ÉíµÄÖµ¡£
14.9.6»º´æ¿ØÖÆÀ©Õ¹£¨Cache control Extendions£©
Cache-ControlÍ·Óò¿Éͨ¹ýÒ»¸ö»ò¶à¸öcache-extension±ê¼ÇµÄʹÓÃÀ´ÊµÏÖÆäÀ©Õ¹¡£ÆäÖÐÿһ±ê¼Ç¶¼¸³ÓèÒ»¿ÉÑ¡µÄÖµ¡£ ÐÅÏ¢À©Õ¹£¨ÄÇЩÎÞÐë¸Ä±ä»º´æ»úÐÐΪµÄ£©¿ÉÒÔ²»¾¸Ä±äÆäËü»º´æ¿ØÖÆÖ¸ÁîµÄÓïÒå¶øÌí¼Ó¡£ÐÐΪÀ©Õ¹ÊÇͨ¹ýÐÞ¸ÄÏÖÓлº´æ¿ØÖÆÖ¸ÁîµÄ»ù±¾ÐÐΪÀ´ÊµÏֵġ£ лº´æ¿ØÖÆÖ¸ÁîÓë±ê×¼»º´æ¿ØÖÆÖ¸Áî¶¼±»Ìṩ£¬ÒÔÖÁÓÚ²»Àí½âлº´æ¿ØÖÆÖ¸ÁîµÄÓ¦ÓóÌÐò»áȱʡµØ²ÉÓñê×¼»º´æ¿ØÖÆÖ¸Áî¹æ¶¨µÄÐÐΪ£¬¶øÄÇЩÀí½âÐÂÖ¸ÁîµÄÓ¦ÓóÌÐòÔò½«Æä¿´×öÐÞ¸ÄÁ˱ê×¼»º´æ¿ØÖÆÖ¸ÁîµÄÒªÇó¡£ÕâÑù£¬»º´æ¿ØÖÆÖ¸ÁîµÄÀ©Õ¹¿ÉÒÔÔÚÎÞÐë¸Ä±ä»ù±¾ÐÒéµÄÇé¿öϾÍÄܹ»ÊµÏÖ¡£
ÕâÒ»À©Õ¹»úÖÆÒÀÀµÓÚÕâÑùÒ»¸öHTTP»º´æ£¬´Ë»º´æ×ñ´ÓËùÓлº´æ¿ØÖÆÖ¸ÁîµÄ»º´æ£¬×ñ´ÓijЩÀ©Õ¹£¬¶øÇÒ»áºöÂÔËùÓÐËü²»ÄÜÀí½âµÄ»º´æ¿ØÖÆÖ¸Áî¡£
ÀýÈ磬¿¼ÂÇÒ»¸ö¼ÙÏëµÄÃûΪ“community”µÄÐµĻº´æÏìÓ¦¿ØÖÆÖ¸Á´ËÖ¸Áî±»¿´³ÉÊǶÔprivate»º´æ¿ØÖÆÖ¸ÁîµÄÐÞÊΡ£ÎÒÃǶ¨ÒåÕâ¸öÐµĻº´æ¿ØÖÆÖ¸ÁîÒÔ±íÃ÷£º³ýÁ˷ǹ²Ïí»º´æÄܱ£´æ´ËÏìÓ¦Ö®Í⣬»¹ÓÐÔÚcommunityÀïÒÔËüÖµÃüÃûµÄÉçÇø£¬Ö»ÓÐÔÚ´ËÉçÇøÀïµÄ³ÉÔ±Ëù¹²ÏíµÄÈκλº´æ²ÅÄܱ£´æ´ËÏìÓ¦¡£ÀýÈ磬Èç¹ûÒ»¸öÔ´·þÎñÆ÷Ï£ÍûÔÊÐíUCIÉçÇøÀïµÄ³ÉÔ±ÔÚËûÃǹ²Ïí»º´æÀï¿ÉÒÔʹÓÃÒ»¸ö˽ÓÐÏìÓ¦£¬ÄÇô´ËÔ´·þÎñÆ÷Ó¦¸Ã°üº¬£º
Cache-Control: private, commuity="UCI"
Ò»¸ö¼ûµ½´ËÍ·ÓòµÄ»º´æ½«»áÕýÈ·µÄ²Ù×÷£¬¼´Ê¹´Ë»º´æ²»ÄÜÀí½âÕâ¸öcommunity»º´æÀ©Õ¹£¬ÒòΪ»º´æÕÕÑùÄÜ¿´µ½²¢ÇÒÄÜÀí½âprivate»º´æ¿ØÖÆÖ¸ÁîËùÒÔÕâÑùÄܵ¼ÖÂȱʡµÄ°²È«ÐÐΪ¡£
14.10 Connection
Connection³£ÓÃÍ·ÓòÔÊÐí·¢ËÍÕßÖ¸¶¨Ä³Ò»Ìض¨Á¬½ÓÖеÄÑ¡ÏÕâЩѡÏî²»µÃÓÉ´úÀí£¨proxy£©ÔÚÒÔºóµÄÁ¬½ÓÖд«ËÍ¡£
ConnectionÍ·Óò×ñÑÈçÏÂÓï·¨£º
Connection = “Connection” “:” 1#(connection-token)
connection-token = token
HTTP/1.1´úÀí±ØÐëÔÚת·¢±¨ÎÄ֮ǰ½âÎöConnectionÍ·Óò£¬È»ºóÕë¶Ô´ËÍ·ÓòÖÐÿһ¸öconnection-token£¬´Ó±¨ÎÄÖÐÒÆ¿ªËùÓÐÓëconnection-tokenÀïͬÃûµÄÍ·Óò¡£ Á¬½ÓÑ¡ÏîÊÇÓÉConnectÍ·ÓòÖеÄconnection-tokenÖ¸Ã÷µÄ£¬¶ø·ÇÈκζÔÓ¦µÄ¸½¼ÓµÄÍ·Óò£¬ÒòΪÕâЩ¸½¼ÓÍ·ÓòÔÚȱÉÙÓëÁ¬½ÓÑ¡ÏîÏà¹ØµÄ²ÎÊýʱ¿ÉÄÜÎÞ·¨±»´«ËÍ¡£
ConnectÍ·ÓòÀïÁгöµÄÏûϢͷÓò²»µÃ°üº¬end-to-endÍ·Óò£¬ÀýÈçCache-ControlÍ·Óò¡£
HTTP/1.1¶¨ÒåÁË"close"Á¬½ÓÑ¡ÏÕâÊÇΪÁËÈ÷¢ËÍÕß±íÃ÷ÔÚÍê³ÉÏìÓ¦ºóÁ¬½Ó½«±»¹Ø±Õ¡£
ÀýÈç
Connection£ºclose
±íÃ÷ÎÞÂÛÊdzöÏÖÔÚÇëÇó»òÏìÓ¦µÄÍ·ÓòÖУ¬¶¼±íÃ÷Á¬½Ó²»Ó¦±»ÊÓΪÔÚÍê³ÉÏÖÓÐÇëÇó/ÏìÓ¦ºóÊÇ“³ÖÐøµÄ£¨persistent£©”£¨²Î¼û8.1½Ú£©¡£
²»Ö§³Ö³ÖÐøÁ¬½ÓµÄHTTP/1.1Ó¦ÓóÌÐò±ØÐëÔÚÿһÏûÏ¢Öж¼¼ÓÉÏ"close"Á¬½ÓÑ¡Ïî¡£
½ÓÊÕµ½º¬ÓÐConnectÍ·ÓòµÄHTTP/1.0£¨»ò¸üµÍ°æ±¾£©ÏûÏ¢µÄϵͳ±ØÐëҪΪÿһ¸öconnection-tokenȥɾ³ý»òºöÂÔÏûÏ¢ÖÐÓë֮ͬÃûµÄÍ·Óò¡£ÕâÑù×ö±ÜÃâÁËÔçÓÚHTTP/1.1°æ±¾µÄ´úÀí´íÎóµØ×ª·¢ÕâЩͷÓò¡£
14.11 Content-Encoding
“Content-Encoding”ʵÌåÍ·ÓòÊǶÔýÌåÀàÐ͵ÄÐÞÊΡ£µ±´ËÍ·Óò³öÏÖʱ£¬ÆäÖµ±íÃ÷¶ÔʵÌåÖ÷Ìå²ÉÓÃÁ˺ÎÖÖµÄÄÚÈݱàÂ룬´Ó¶ø¿ÉÒÔÖªµÀ²ÉÓúÎÖÖ½âÂë»úÖÆÒÔ»ñÈ¡Content-TypeÍ·ÓòÖÐÖ¸³öµÄýÌåÀàÐÍ¡£Content-EncodingÍ·ÓòÖ÷ҪĿµÄÊÇ¿ÉÒÔÔÚ²»¶ªÊ§Ï²ãýÌåÀàÐ͵ÄÉí·Ý϶ÔÎĵµ½øÐÐѹËõ¡£
Content-Encoding = "Content - Encoding" ":" 1#content-coding
ÄÚÈݱàÂëÔÚ3.5½ÚÀﶨÒå¡£ÏÂÃæÊÇÒ»¸öÓ¦ÓõÄÀý×Ó£º
Content-Encoding£ºgzip
ÄÚÈݱàÂ루content-coding£©ÊÇÇëÇóURIÖ¸¶¨ÊµÌåµÄÌØÐÔ¡£Í¨³££¬ÊµÌåÖ÷ÌåÒÔÄÚÈݱàÂ루content-coding£©µÄ·½Ê½´æ´¢£¬È»¶øÖ»ÓÐÔÚ´ËʵÌåÖ÷Ìå±»³ÊÏÖ¸øÓû§Ö®Ç°²ÅÄܱ»½âÂ롣Ȼ¶ø£¬·Ç͸Ã÷´úÀí¿ÉÄÜ»á°ÑʵÌåÖ÷ÌåµÄÄÚÈݱàÂ루content-coding£©¸Ä³É½ÓÊÕ¶ËÄÜÀí½âµÄÄÚÈݱàÂ루content-coding£©£¬³ý·Ç“no-transform”»º´æ¿ØÖÆÖ¸Áî³öÏÖÔÚÏûÏ¢Àï¡£
Èç¹ûʵÌåµÄÄÚÈݱàÂë²»ÊÇ“identity”£¬ÄÇô´ËÏìÓ¦±ØÐë°üº¬Ò»¸öContent-EncodingʵÌåÍ·Óò£¨¼û14.11½Ú£©£¬´ËÍ·Óò±ØÐëÁгö²»ÊÇidentityµÄÄÚÈݱàÂë¡£
ÈôʵÌåµÄÄÚÈݱàÂ루content-coding£©ÊÇÒ»¸ö²»±»Ô´·þÎñÆ÷½ÓÊܵÄÇëÇóÏûÏ¢£¬ÔòÏìÓ¦±ØÐëÒÔ415״̬ÂëÏìÓ¦£¨²»Ö§³ÖµÄýÌåÀàÐÍ£©¡£
ÈôʵÌå²ÉÓöàÖÖ±àÂ룬ÔòÄÚÈݱàÂë±ØÐëÔÚContent-EncdoingÍ·ÓòÀïÁгö£¬¶øÇÒ»¹±ØÐë°´ËûÃDZ»±àÂëµÄ˳ÐòÁгö¡£¶îÍâµÄ¹ØÓÚ±àÂë²ÎÊýµÄÐÅÏ¢¿ÉÄÜ»áÔÚÆäËüµÄʵÌåÍ·ÓòÀïÌṩ£¬ÕâÔڴ˹淶ÀïûÓж¨Òå¡£
14.12 Content-Language
Content-LanguageʵÌåÍ·ÓòÃèÊöÁËʵÌåÃæÏòÓû§µÄ×ÔÈ»ÓïÑÔ¡£Çë×¢Ò⣬Õâ²»Ò»¶¨µÈͬÓÚʵÌåÖ÷ÌåÖÐÓõ½µÄËùÓÐÓïÑÔ¡£
Content-Language = “Content-Language” “:” 1#language-tag
ÓïÑÔ±êÇ©ÓÉ3.10½Ú¶¨Òå¡£Content-LanguageÍ·ÓòµÄÖ÷ҪĿµÄÔÚÓÚÈÃÓû§¸ù¾Ý×Ô¼ºÏ²°®µÄÓïÑÔÀ´Ê¶±ðºÍÇø·ÖʵÌå¡£ÕâÑù£¬Èç¹ûʵÌåÖ÷ÌåµÄÄÚÈÝÊÇÃæÏòµ¤ÂóÓïÑÔµÄÓû§£¬ÄÇôÏÂÃæµÄÍ·ÓòÊÇÊʺϵģº
Content-Language: da
ÈôδָÃ÷Content-LanguageÍ·Óò£¬ÄÇôȱʡÊÇÄÚÈÝÊÇÖ§³ÖËùÓв»Í¬ÓïÑÔµÄÓû§¡£Õâ¼È¿ÉÄÜÒâζ×Å·¢ËÍÕßÈÏΪʵÌåÖ÷ÌåµÄÄÚÈÝÓëÈÎÒâ×ÔÈ»ÓïÑÔÎ޹أ¬Ò²¿ÉÄÜ·¢ËÍÕß²»Öª´ËÄÚÈݸÃÃæÏòºÎÖÖÓïÑÔ¡£
ÒªÃæÏò¶àÖÖÌýÖÚ£¬ÔÚContent-LanguageÍ·ÓòÀï¿ÉÁгö¶àÖÖÓïÑÔ¡£ÀýÈ磬ͬʱÓÃëÀïÍÁÓïºÍÓ¢Óï·¢ÐГTreaty of Waitangi”¾Í¿ÉÒÔÓÃÏÂÃæ±íʾ£º
Content-Language: mi,en
È»¶ø£¬ÔÚʵÌåÖÐÓжàÖÖÓïÑÔ²¢²»´ú±í´ËʵÌåÒ»¶¨ÊÇΪ¶à¸ö¹ú¼ÒÓïÑÔµÄÓû§×¼±¸µÄ¡£±ÈÈç¡¶³õѧÀ¶¡ÎÄ¡·Ö®ÀàµÄÓïÑÔÆôÃɽ̳̣¬ÏÔÈ»ÊÇÕë¶ÔÓ¢ÓïÓû§µÄ¡£ÕâÀºÏÊʵÄContent-LanguageÍ·ÓòÀïÓ¦Ö»°üÀ¨“en”¡£
Content-Language¿ÉÓ¦ÓÃÓÚÈÎÒâýÌåÀàÐÍ -- Ëü²»ÏÞÓÚÎı¾Ê½µÄÎĵµ¡£
14.13 Content-Length
Content-LengthʵÌåÍ·Óò°´Ê®½øÖÆ»ò°Ëλ×Ö½ÚÊýÖ¸Ã÷ÁË·¢¸ø¸ø½ÓÊÕÕßµÄʵÌåÖ÷ÌåµÄ´óС£¬»òÊÇÔÚʹÓÃHEAD·½·¨µÄÇé¿öÏ£¬Ö¸Ã÷ÈôÇëÇóΪGET·½·¨Ê±Ó¦¸Ã·¢Ë͵ÄʵÌåÖ÷ÌåµÄ´óС¡£
Content-Length = “Content-Length” “:” 1*DIGIT
ʾÀý£º
Content-Length: 3495
³ý·Ç±»4.4½ÚÀï¹æ¶¨µÄ¹æÔò½ûÖ¹£¬·ñÔòÓ¦ÓóÌÐòÓ¦¸ÃÀûÓôËÍ·ÓòÖ¸Ã÷ÏûÏ¢Ö÷Ì壨message-body£©µÄ´«Ê䳤¶È¡£
ÈκδóÓÚ»òµÈÓÚ0µÄContent-Length¾ùΪÓÐЧֵ¡£ 4.4½ÚÃèÊöÁËÈçºÎÅжÏÏûÏ¢Ö÷ÌåµÄ³¤¶È£¬Èç¹ûÒ»¸öContent-LengthûÓÐÔÚÏûÏ¢Àï¸ø¶¨¡£
Çë×¢Òâ´ËÍ·ÓòµÄº¬ÒåÓëMIMEÖеĹØÓÚ´ËÍ·ÓòµÄ¶¨ÒåÓкܴóµÄ²»Í¬£¬MIMEÖУ¬ËüÔÚcontent-typeÀàÐÍΪ“message/external-body”µÄÏûÏ¢ÀïÊÇ¿ÉÑ¡µÄ¡£ÔÚHTTPÖУ¬³ý·Ç±»4.4½ÚÀﶨÒåµÄ¹æÔò±»½ûÓ㬷ñÔòÒ»µ©ÏûÏ¢µÄ³¤¶ÈÒªÔÚ´«ËÍǰ±»È·¶¨£¬¾ÍÓ¦·¢ËÍ´ËÍ·Óò¡£
14.14 Content-Location
Content-LocationʵÌåÍ·Óò¿ÉÓÃÀ´ÎªÏûÏ¢ÀïµÄʵÌåÌṩ¶ÔÓ¦×ÊÔ´µÄλÖ㬵±´ËʵÌåµÄ·ÃÎÊλÖúÍÇëÇóURI²»ÊÇͬһλÖÃʱ¡£Ò»¸ö·þÎñÆ÷Ó¦¸ÃΪÏìӦʵÌåµÄ±äÁ¿£¨variant£¬Òë×¢£º¼û1.3½Ú ÊõÓÌṩһ¸öContent-LocationÍ·Óò£»ÓÈÆäÊÇÔÚ×ÊÔ´Óжà¸ö¶ÔÓ¦µÄʵÌåʱ£¬²¢ÇÒÕâЩʵÌå»áÓи÷×ÔµÄλÖ㬿ÉÒÔͨ¹ýÕâЩλÖõ¥¶ÀµØ·ÃÎʵ½¸÷¸öʵÌ壬Õâʱ·þÎñÆ÷Ó¦¸ÃΪһ¸öÌØ¶¨µÄ±äÁ¿£¨variant£©Ìṩһ¸öContent-LocationÍ·Óò¡£
Content – Location = “Content-Location” “:” (absoluteURI | relativeURI)
Content-LocationµÄֵͬÑùΪʵÌ嶨ÒåÁË»ùURI£¨base URI£©¡£
Content-LocationµÄÖµ²¢²»ÄÜ×÷ΪԴÇëÇóURIµÄÌæ´úÎËüÖ»ÄÜÊdzÂÊöÁËÇëÇóʱ¶ÔÓ¦µÄÌØ¶¨ÊµÌå×ÊÔ´µÄλÖ᣽«À´µÄÇëÇóÒ²Ðí»áÓÃContent-LocationÀïµÄURI×÷ΪÇëÇóURI£¬Èç¹ûÇëÇóÆÚÍûÖ¸¶¨ÄǸöÌØ¶¨ÊµÌå×ÊÔ´µÄ»°¡£
Ò»Èç¹ûÒ»¸öʵÌ庬ÓÐÒ»¸öContent-LocationÍ·Óò£¬²¢ÇÒ´ËÍ·ÓòÀïµÄURI²»Í¬ÓÚ»ñµÃ´ËʵÌåURI£¬ÄÇô»º´æ²»»áÀûÓôËʵÌåÈ¥ÏìӦʹÓÃÁËContent-LocatonÀïURIµÄºóÐøÇëÇó¡£È»¶ø£¬Content-LocationÄܱ»ÓÃÓÚÇø·Öͬһ¸öÇëÇó×ÊÔ´µÄ¶à¸öʵÌ壬ÕâÔÚ13.6½ÚÀïÃèÊöÁË¡£
ÈôContent-LocationÓµÓеÄÊÇÏà¶ÔURI£¨relative URI£©£¬Ôò´ËÏà¶ÔURI£¨relative URI£©ÊÇÏà¶ÔÓÚÇëÇóURIÀ´½âÎöµÄ¡£
PUT»òPOSTÇëÇóÖк¬ÓÐContent-LocationÍ·ÓòÊÇûÓиø³ö¶¨ÒåµÄ£»·þÎñÆ÷¿É×ÔÓɺöÂÔËü¡£
14.15 Content-MD5
ÈçRFC 1864[23]ÖÐËù¶¨ÒåµÄ£¬Content-MD5ʵÌåÍ·Óòº¬ÓеÄÊÇʵÌåÖ÷ÌåµÄMD5ÕªÒª£¬ÕâÊÇΪÁ˸øÒ»¸öend-to-endÏûÏ¢µÄʵÌåÖ÷ÌåµÄÌṩÍêÕûÐÔ¼ì²â¡££¨×¢£ºMICÓÐÀûÓÚ¼ì²âʵÌåÖ÷Ìå´«ËÍÖеÄż·¢ÐԵĸ͝£¬µ«²»Ò»¶¨ÄÜ·À·¶¶ñÒâÏ®»÷¡££©
Content-MD5 = "Content-MD5" ":" md5-digest
MD5-digest=< ÓÉRFC 1864 ¶¨ÒåµÄbase64µÄ128λMD5ÕªÒª>
Content-MD5Í·Óò¿ÉÓÉÔ´·þÎñÆ÷»ò¿Í»§¶ËÉú³É£¬ÓÃ×÷ʵÌåÖ÷ÌåµÄÍêÕûÐÔ¼ìÑé¡£Ö»ÓÐÔ´·þÎñÆ÷»ò¿Í»§¶Ë¿ÉÉú³ÉContent-MD5Í·Óò£»²»µÃÓÉ´úÀí·þÎñÆ÷ºÍÍø¹ØÉú³É£¬·ñÔò»áÓÐã£ÓÚÆä×÷Ϊ¶Ëµ½¶ËÍêÕûÐÔ¼ìÑéµÄ¼ÛÖµ¡£ÈκÎʵÌåÕýÖ÷ÌåµÄ½ÓÊÕÕߣ¬°üÀ¨´úÀíºÍÍø¹Ø£¬¶¼¿É¼ì²é´ËÍ·ÓòÀïµÄÕªÒªÖµÓë½ÓÊÕµ½µÄʵÌåÖ÷ÌåµÄÕªÒªÖµÊÇ·ñÏà·û¡£
MD5ÕªÒªµÄ¼ÆËã»ùÓÚʵÌåÖ÷ÌåµÄÄÚÈÝ£¬°üÀ¨ÈκÎÓ¦ÓõÄÄÚÈݱàÂ루content-coding£©£¬µ«²»°üÀ¨Ó¦ÓÃÓÚÏûÏ¢Ö÷ÌåµÄÈκδ«Êä±àÂë¡£Èô½ÓÊÕµ½µÄÏûÏ¢¾ßÓд«Êä±àÂ룬ÄÇô´«Êä±àÂë±ØÐëÔÚ¼ìÑéContent-MD5ÖµÓë½ÓÊÕµ½µÄʵÌå֮ǰ±»½â³ý¡£
ÕâÑùÔì³ÉµÄºó¹ûÊÇ£ºÕªÒªÍêÈ«°´ÕÕʵÌåÖ÷Ì壨entity-body£©Èôδ¾´«Êä±àÂ루transfer encoding£©±àÂë¶ø±»ÒÔ·¢³öµÄ˳Ðò½øÐÐÖð×Ö½Ú¼ÆËãµÃµ½µÄ¡£
HTTP ½«RFC 1864ÍØ¿íµ½ÔÊÐí¶ÔMIME¸´ºÏýÌåÀàÐÍ£¨Èçmultipart/*,message/RFC822£©¼ÆËãÕªÒª£¬µ«Õâ²¢²»¸Ä±äÈçǰËùÊöµÄÕªÒª¼ÆËã·½·¨¡£
Óɴ˲úÉúÁËһϵÁÐÓ°Ïì¡£¸´ºÏýÌåÀàÐ͵ÄʵÌåÖ÷Ìå¿ÉÄܰüº¬Ðí¶àbody-part£¬Ã¿Ò»¸öbody-part¶¼ÓÐËü×Ô¼ºµÄMIMEºÍHTTPÍ·Óò£¨°üÀ¨Content-MD5£¬Content-Transfer-Encoding£¬ºÍContent-EncodingÍ·Óò£©£¬Èç¹ûÒ»¸öbody-partÓÐÒ»¸öContent-Transfer-Encoding»òContent-EncodingÍ·Óò£¬ÄÇôӦ¸ÃÈÏΪ´Ëbody-partµÄÄÚÈÝÒѾӦÓÃÁ˴˱àÂ룬²¢ÇÒÈÏΪ´Ëbody-part±»°üº¬ÔÚContent-MD5µÄÕªÒªÀïÊÇÔÚÓ¦ÓÃÁ˴˱àÂëÖ®ºó¡£Transfer-EncodingÍ·Óò²»ÐèÒª³öÏÖÔÚbody-partÀï¡£
£¬
²»¿ÉÔÚ¼ÆËã»òºË¶ÔժҪ֮ǰ¾Í½«ÈÎºÎÆäËü»»ÐÐת»»ÎªCRLF£ºÊµ¼Ê´«ÊäµÄÎı¾ÖÐʹÓõĻ»ÐбØÐëÔ·â²»¶¯µÄ²ÎÓëÕªÒª¼ÆËã¡£
×¢£ºËäÈ»HTTPµÄContent-MD5µÄ¶¨ÒåºÍRFC 1864ÖйØÓÚMIMEʵÌåÖ÷ÌåµÄÍêȫһÑù£¬ µ«HTTP ʵÌåÖ÷ÌåÔÚ¶ÔContent-MD5µÄÓ¦ÓÃÉÏÈÔÈ»Óм¸´¦ÓëMIMEʵÌåÖ÷ÌåÓÐËùÇø±ð¡£Ê×ÏÈ£¬HTTP²»ÏóMIME»áÓÃContent-Transfer-EncodingÍ·Óò£¬¶øÊÇ»áʹÓÃTransfer-EncodingºÍÓëContent-EncodingÍ·Óò¡£ Æä´Î£¬HTTP±ÈMIME¸ü¶àµØÊ¹Óöþ½øÖÆÄÚÈÝÀàÐÍ£¬ÔÚ´ËÖÖÇé¿öÏ£¬ÓÃÓÚ¼ÆËãÕªÒªµÄ×Ö½Ú˳ÐòÒ²¼´ÓÉÀàÐͶ¨ÒåµÄ´«Êä×Ö½ÚµÄ˳Ðò¡£×îºó£¬HTTPÔÊÐíÎı¾Àà´«Êäʱ²ÉÓÃÊýÖÖ»»ÐУ¬¶ø²»Ö»Êǹ淶µÄʹÓÃCRLFµÄµÄ±ê×¼ÐÎʽ¡£
14.16 Content-Range
Content-RangeʵÌåÍ·ÓòÓ벿·ÖʵÌåÖ÷ÌåÒ»Æð·¢ËÍ£¬ÓÃÓÚÖ¸Ã÷²¿·ÖʵÌåÖ÷ÌåÔÚÍêÕûʵÌåÖ÷ÌåÀïÄÇÒ»²¿·Ö±»²ÉÓᣠ·¶Î§µÄµ¥Î»£¨Range unit£©ÔÚ3.12½ÚÖж¨Òå¡£
Content-Range = "Content-Range" ":" content-range-spec
content-range-spec = byte-content-range-spec
byte-content-range-spec = bytes-unit SP
byte-range-resp-spec "/"
( instance-length | "*" )
byte-range-resp-spec = (first-byte-pos "-" last-byte-pos)
| "*"
instance-length = 1*DIGIT
³ý·ÇÎÞ·¨»òºÜÄÑÅжϣ¬´ËÍ·ÓòÓ¦Ö¸Ã÷ÍêÕûʵÌåÖ÷ÌåµÄ×ܳ¤¶È¡£ÐǺœ*”±íʾÉú³ÉÏìӦʱµÄinstance-lengthδ֪¡£
Óëbyte-ranges-specifierÖµ£¨²Î¼û14.35.1½Ú£©²»Í¬µÄÊÇ£¬byte-range-resp-spec±ØÐëÖ»ÄÜÖ¸Ã÷Ò»¸ö·¶Î§£¬²¢ÇÒ±ØÐë°üº¬Ê××Ö½ÚºÍβ×ֽڵľø¶ÔλÖá£
Ò»¸ö´øÓÐbyte-range-resp-specµÄbyte-content-range-spec£¬Èç¹ûËüµÄlast-byte-posֵСÓÚfirst-byte-posÖµ£¬»òËüµÄinstance-lengthֵСÓÚ»òµÈÓÚËüµÄlast-byte-posÖµ£¬ÄÇô¾Í˵Ã÷ÊÇÎÞЧµÄ¡£ÊÕµ½ÎÞЧµÄbyte-content-range-spec½«±»ºöÂÔ£¬²¢ÇÒÈκÎËæÆä´«ÊäµÄÄÚÈݶ¼½«±»ºöÂÔ¡£
ÏìӦʱ·¢ËÍ״̬Âë416£¨ÇëÇóµÄ·¶Î§ÎÞ·¨Âú×㣩µÄ·þÎñÆ÷Ó¦¸Ã°üº¬Ò»¸öContent-RangeÍ·Óò£¬ÇÒÀïÃæµÄbyte-range-resp-specµÄֵΪ“*”¡£instance-lengthÖ¸Ã÷ÁËÑ¡¶¨×ÊÔ´µÄ³¤¶È¡£×´Ì¬ÂëΪ206£¨²¿·ÖÄÚÈÝ£©µÄÏìÓ¦²»Ó¦¸Ã°üº¬Ò»¸öbyte-range-resp-sepcΪ“*”µÄContent-RangeÍ·Óò¡£
¼Ù¶¨ÊµÌå¹²º¬1234×Ö½Ú£¬byte-content-range-specÖµµÄÀý×ÓÈçÏ£º
. The first 500 bytes:
bytes 0-499/1234
. The second 500 bytes:
bytes 500-999/1234
. All except for the first 500 bytes:
bytes 500-1233/1234
. The last 500 bytes:
bytes 734-1233/1234
µ±HTTPÏûÏ¢Àï°üº¬µ¥Ò»·¶Î§Ê±£¬£¨±ÈÈ磬¶Ôµ¥Ò»·¶Î§ÇëÇóµÄÏìÓ¦£¬»ò¶ÔÒ»×éÄÜÎÞ·ìÏàÁ¬µÄ·¶Î§ÇëÇóµÄÏìÓ¦£©£¬ÄÇô´ËÄÚÈݱØÐë¸úËæÒ»¸öContent-RangeÍ·Óò£¬²¢ÇÒ»¹Ó¦¸Ã°üº¬Ò»¸öContent-LengthÍ·ÓòÀ´±íÃ÷ʵ¼ÊÐèÒª±»´«Êä×ֽڵij¤¶È¡£ÀýÈ磬
HTTP/1.1 206 Partial content
Date: Wed, 15 Nov 1995 06:25:24 GMT
Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
Content-Range: bytes 21010-47021/47022
Content-Length: 26012
Content-Type: image/gif
µ±HTTP±¨Îİüº¬¶à¸ö·¶Î§Ê±£¨±ÈÈ磬¶Ô¶à¸öÎ´ÖØµþ·¶Î§ÇëÇóµÄÏìÓ¦£©£¬ËüÃǻᱻµ±×÷¶à²¿·ÖÀàÐ͵ÄÏûÏ¢À´´«ËÍ¡£Îª´ËÄ¿µÄ¶à²¿·ÖýÌåÀàÐÍΪ“multipart/byteranges”£¬ËüÔÚ¸½Â¼19.2Àï½éÉÜÁË¡£¼û19.6.3Àï¹ØÓÚ¼æÈÝÐÔµÄÎÊÌâÃèÊö¡£
¶Ôµ¥Ò»·¶Î§ÇëÇóµÄÏìÓ¦²»µÃʹÓÃmultipart/byterangesýÌåÀàÐÍ¡£Èô¶Ô¶à¸ö·¶Î§ÇëÇóµÄÏìÓ¦½á¹ûΪһ¸öµ¥Ò»·¶Î§£¬ÄÇô¿ÉÒÔÒÔÒ»¸ömultipart/byterangesýÌåÀàÐÍ·¢ËͲ¢ÇÒ´ËýÌåÀàÐÍÀïÖ»ÓÐÒ»¸ö²¿·Ö£¨part£©¡£Ò»¸ö¿Í»§¶ËÎÞ·¨¶Ômultipart/byterangesÏûÏ¢½âÂ룬ÄÇôËü²»ÄÜÔÚÒ»¸öÇëÇóÖÐÇëÇó¶à¸ö×Ö½Ú·¶Î§¡£
µ±¿Í»§¶ËÔÚÒ»¸öÇëÇóÖÐÉêÇë¶à¸ö×Ö½Ú·¶Î§Ê±£¬·þÎñÆ÷Ó¦°´ËûÃÇÔÚÇëÇóÖгöÏÖµÄ˳Ðò·¶Î§·µ»ØËûÃÇËùÖ¸¶¨µÄ·¶Î§¡£
Èô·þÎñÆ÷³öÓھ䷨ÎÞЧµÄÔÒòºöÂÔÁË×Öbyte-range-spec£¬ËüÓ¦°ÑÇëÇóÀïµÄÎÞЧ·¶Î§¿´³É²»´æÔÚ¡££¨Õý³£Çé¿öÏ£¬ÕâÒâζ×Å·µ»ØÒ»¸ö°üº¬ÍêÕûʵÌåµÄ200ÏìÓ¦¡££©
Èç¹û·þÎñÆ÷½ÓÊÕµ½Ò»¸öÇëÇ󣬴ËÇëÇó°üº¬Ò»¸öÎÞ·¨Âú×ãµÄRangeÇëÇóÍ·Óò£¨Ò²¼´£¬ËùÓÐbyte-range-specÀïµÄfirst-byte-posÖµ´óÓÚµ±Ç°Ñ¡Ôñ×ÊÔ´µÄ³¤¶È£©£¬ÄÇôËü½«·µ»ØÒ»¸ö416ÏìÓ¦£¨ÇëÇóµÄ·¶Î§ÎÞ·¨Âú×㣩£¨²Î¼û10.4.17½Ú£©¡£
×¢£º ¿Í»§¶Ë¶ÔÎÞ·¨Âú×ãRangeÇëÇóÍ·Óò²»ÄÜÖ¸Íû·þÎñÆ÷Ò»¶¨·µ»Ø416£¨ÇëÇóµÄ·¶Î§ÎÞ·¨Âú×㣩ÏìÓ¦¶ø·Ç200£¨OK£©µÄÏìÓ¦£¬ÒòΪ²»ÊÇËùÓзþÎñÆ÷¶¼ÄÜ´¦ÀíRangeÇëÇóÍ·Óò¡£
14.17 Content-Type
Content-TypeʵÌåÍ·ÓòÖ¸Ã÷·¢¸ø½ÓÊÕÕßµÄʵÌåÖ÷ÌåµÄýÌåÀàÐÍ£¬»òÔÚHEAD·½·¨ÖÐÖ¸Ã÷ÈôÇëÇóΪGETʱ½«·¢Ë͵ÄýÌåÀàÐÍ¡£
Content-Type = "Content-Type" ":" media-type
ýÌåÀàÐÍÓÐ3.7½Ú¶¨Òå¡£ ´ËÍ·ÓòµÄʾÀýÈçÏ£º
Content-Type: text/html; charset=ISO-8859-4
7.2.1½ÚÌṩÁ˹ØÓÚÈ·¶¨ÊµÌåýÌåÀàÐÍ·½·¨µÄ½øÒ»²½ÂÛÊö¡£
14.18 Date
Date³£ÓÃÍ·Óò±íÃ÷²úÉúÏûÏ¢µÄÈÕÆÚºÍʱ¼ä£¬ËüºÍRFC822ÖеÄorig-dateÓïÒåÒ»Ñù¡£´ËÍ·ÓòÖµÊÇÒ»¸öÔÚ3.3.1ÀïÃèÊöµÄHTTP-date£»Ëü±ØÐëÓÃRFC1123[8]ÀïµÄdate¸ñʽ·¢ËÍ¡£
Date="Date""£º"HTTP-date
¾Ù¸öÀý×Ó
Date:Tue,15 Nov 1994 08:12:31GMT
Ô´·þÎñÆ÷ÔÚËùÓеÄÏìÓ¦ÖбØÐë°üÀ¨Ò»¸öÈÕÆÚÍ·Óò£¬³ýÁËÏÂÃæÕâЩÇé¿ö£º
Èç¹ûÏìÓ¦µÄ״̬´úÂëÊÇ100£¨¼ÌÐø£©»ò101£¨×ª»»ÐÒ飩£¬ÄÇôÏìÓ¦¸ù¾Ý·þÎñÆ÷µÄÐèÒª¿ÉÒÔ°üº¬Ò»¸öDateÍ·Óò¡£
Èç¹ûÏìӦ״̬´úÂë±í´ïÁË·þÎñÆ÷µÄ´íÎó£¬Èç500£¨ÄÚ²¿·þÎñÆ÷´íÎ󣩻ò503£¨ÄÑÒÔ»ñµÃµÄ·þÎñ£©£¬ÄÇôԴ·þÎñÆ÷¾Í²»Êʺϻò²»ÄÜÈ¥²úÉúÒ»¸öÓÐЧµÄÈÕÆÚ¡£
Èç¹û·þÎñÆ÷ûÓÐʱÖÓ£¬²»ÄÜÌṩºÏÀíµÄµ±Ç°Ê±¼äµÄ½üËÆÖµ£¬Õâ¸öÏìӦû±ØÒª°üÀ¨DateÍ·Óò£¬µ«ÔÚÕâÖÖÇé¿öϱØÐë×ñÕÕ 14.18.1½ÚÖеĹæÔò¡£
Ò»¸öÊÕµ½µÄÏûÏ¢Èç¹ûûÓÐDateÍ·ÓòµÄ»°¾Í»á±»½ÓÊÕÕß¼ÓÉÏÒ»¸ö£¬Èç¹ûÕâÌõÏûÏ¢Òª±»Õâ¸ö½ÓÊÕÕß»º´æ»òÕßÕâÌõÏûÏ¢ÐèÒª´©¹ýÒ»¸öÐèÒªÈÕÆÚµÄÐÒéÍø¹Ø¡£Ò»¸öûÓÐʱÖÓµÄHTTPʵÏÖ²»ÄÜÔÚûÓÐÖØÑéÖ¤ÏìӦʱȥ»º´æ£¨±£´æ£©´ËÏìÓ¦¡£Ò»¸öHTTP»º´æ£¬ÌرðÊÇÒ»¸ö¹²Ïí»º´æ£¬Ó¦¸ÃʹÓÃÒ»ÖÖ»úÖÆÊ¹£¬ÀýÈçNTP[28]£¬È¥ÈÃËüµÄʱÖÓÓëÍâ½ç¿É¿¿µÄʱÖÓ±£³Öͬ²½¡£
¿Í»§¶ËÔÚ°üÀ¨ÊµÌåÖ÷Ì壨entity-body£©µÄÏûÏ¢ÖÐÓ¦¸Ã°üº¬Ò»¸öDateÍ·Óò£¬ÀýÈçÔÚPUTºÍPOSTÇëÇóÀ¼´Ê±ÕâÑù×öÊÇ¿ÉÑ¡µÄ¡£Ò»¸öûÓÐʱÖӵĿͻ§¶Ë²»ÄÜÔÚÇëÇóÖз¢ËÍDateÍ·Óò¡£
Ò»¸öDateÍ·ÓòÖеÄHTTP-date²»Ó¦¸ÃÊÇÒ»¸öÏûÏ¢²úÉúʱ¿ÌÖ®ºóµÄÈÕÆÚºÍʱ¼ä¡£ËüÓ¦¸Ã±íʾÓëÏûÏ¢²úÉúʱµÄÈÕÆÚºÍʱ¼äµÄ×î½üËÆÖµ£¬³ý·ÇûÓа취²úÉúÒ»¸öºÏÀíµÄ¾«È·ÈÕÆÚºÍʱ¼ä¡£Ò»¸öÇ¡µ±µÄÏ൱¾«È·µÄÈÕÆÚºÍʱ¼ä¡£ÀíÂÛÉÏ˵£¬ÈÕÆÚÓ¦¸ÃÊÇÔÚʵÌ壨entity£©²úÉú֮ǰµÄÄÇÒ»¿Ì£¬Êµ¼ÊÉÏ£¬ÈÕÆÚÊÇÔÚ²»Ó°ÏìÆäÓïÒåÖµµÄÇé¿öÏÂÏûÏ¢²úÉúÆÚ¼äµÄÈÎÒâʱ¿Ì¡£
14.18.1ûÓÐʱÖÓµÄÔ´·þÎñÆ÷ÔË×÷
һЩԴ·þÎñÆ÷ʵÏÖ¿ÉÄÜûÓпɵÃʱÖÓ¡£Ò»¸öûÓпɵÃʱÖÓµÄÔ´·þÎñÆ÷²»ÄܸøÒ»¸öÏìÓ¦Ö¸¶¨Expires»òLast-ModifiedÍ·ÓòÖµ£¬³ý·Çͨ¹ýÒ»¸ö¾ßÓпÉÐÅÀµÊ±ÖÓµÄϵͳ»òÓû§£¬°Ñ´ËÖµÓë´Ë×ÊÔ´ÁªÏµÔÚÒ»Æð¡£¿ÉÒÔ¸øExpires¸³ÓèÒ»¸ö¹ýÈ¥Öµ£¬´ËֵΪ·þÎñÆ÷ÉèÖÃʱ¼ä»ò´ËÉèÖÃʱ¼ä֮ǰµÄÖµ¡££¨ÕâÔÊÐíÏìÓ¦µÄ“pre-expiration”²»ÐèҪΪÿ¸ö×ÊÔ´±£´æ·ÖÀëµÄExpiresÖµ£©¡£
14.19 ETag
EtagÏìӦͷÓòÌṩÁËÇëÇó¶ÔÓ¦±äÁ¿£¨variant£©µÄµ±Ç°ÊµÌå±êÇ©¡£ÓëʵÌå±êǩһÆðʹÓõÄÍ·ÓòÓÉ14.24£¬14.26ºÍ14.44¡£ÊµÌå±êÇ©¿ÉÓÃÓڱȽÏÀ´×Ôͬһ×ÊÔ´µÄ²»Í¬ÊµÌå¡££¨²Î¼û13.3.3½Ú£©
Etag = "Etag" ":" entity-tag
Àý£º
ETag: "xyzzy"
ETag: W/"xyzzy"
ETag: ""
14.20 Expect
ExpectÇëÇóÍ·ÓòÓÃÓÚÖ¸Ã÷¿Í»§¶ËÐèÒªµÄÌØ¶¨·þÎñÆ÷ÐÐΪ¡£
Expect = "Expect" ":" 1#expectation
expectation = "100-continue" | expectation-extension
expectation-extension = token [ "=" ( token | quoted-string )
*expect-params ]
expect-params = ";" token [ "=" ( token | quoted-string ) ]
Ò»¸ö·þÎñÆ÷Èç¹û²»ÄÜÀí½â»ò×ñÑÒ»¸öÇëÇóÀïExpectÍ·ÓòµÄÈκÎexpectationÖµ£¬ÄÇôËü±ØÐëÒÔºÏÊʵĴíÎó״̬ÂëÏìÓ¦¡£Èç¹û·þÎñÆ÷²»ÄÜÂú×ãÈκÎexpection£¬·þÎñÆ÷±ØÐëÒÔ417£¨ÆÚÍûʧ°Ü£©×´Ì¬ÂëÏìÓ¦£¬»òÕßÈç¹û·þÎñÆ÷¶ÔÇëÇóÓöµ½ÆäËüÎÊÌ⣬·þÎñÆ÷±ØÐë·¢ËÍ4xx״̬Âë¡£
±¾Í·ÓòΪ½«À´µÄÀ©Õ¹±»¶¨Òå³ÉÒ»¸öÀ©Õ¹µÄÓï·¨¡£Èô·þÎñÆ÷½ÓÊÕµ½µÄÇëÇóº¬ÓÐËü²»Ö§³ÖµÄexpectation-extension£¬ÄÇôËü±ØÐëÒÔ417£¨ÆÚÍûʧ°Ü£©×´Ì¬ÏìÓ¦¡£
expectationÖµµÄ±È½Ï¶ÔÓÚδÒýÓñê¼Ç£¨unquoted token£©£¨°üÀ¨“100-contine”±ê¼Ç£©ÊǶøÑÔÊDz»Çø·Ö´óСдµÄ£¬¶ÔÒýÓÃ×Ö·û´®£¨quoted-string£©µÄexpectation-extension¶øÑÔÊÇÇø·Ö´óСдµÄ¡£
Expect»úÖÆÊÇhop-by-hopµÄ£º¼´HTTP/1.1´úÀí£¨proxy£©±ØÐë·µ»Ø417£¨ÆÚÍûʧ°Ü£©ÏìÓ¦Èç¹ûËü½ÓÊÕÁËÒ»¸öËü²»ÄÜÂú×ãµÄexpectation¡£ È»¶ø£¬ExpectÇëÇóÍ·Óò±¾ÉíÊÇend-to-endÍ·Óò£»Ëü±ØÐëÒªËæÇëÇóÒ»Æðת·¢¡£
Ðí¶à¾É°æµÄHTTP/1.0ºÍHTTP/1.1Ó¦ÓóÌÐò²¢²»Àí½âExpectÍ·Óò¡£
²Î¼û8.2.3½ÚÖÐ100£¨¼ÌÐø£©×´Ì¬µÄʹÓá£
14.21 Expires
ExpiresʵÌåÍ·Óò£¨entity-header£©¸ø³öÁËÔÚºÎÈÕºÎʱ֮ºóÏìÓ¦¼´±»ÊÓΪ³Â¾ÉµÄ¡£Ò»¸ö³Â¾ÉµÄ»º´æÏî²»Äܱ»»º´æ£¨Ò»¸ö´úÀí»º´æ»òÒ»¸öÓû§´úÀíµÄ»º´æ£©·µ»Ø¸ø¿Í»§¶Ë£¬³ý·Ç´Ë»º´æÏî±»Ô´·þÎñÆ÷ÑéÖ¤£¨»òÕß±»Ò»¸öÓµÓÐʵÌåµÄ±£Ïʸ±±¾µÄÖм仺´æ£©¡£¼û13.2½Ú¹ØÓÚ¹ýÆÚÄ£Ð͵ĽøÒ»²½µÄÌÖÂÛ¡£
ExpiresÍ·ÓòµÄ³öÏÖ²¢²»Òâζ×ÅÔ´×ÊÔ´£¨Òë×¢£º´æ·ÅÓÚÔ´·þÎñÆ÷µÄ×ÊÔ´£©ÔÚExpireÖ¸¶¨Ê±¼äʱ¡¢Ö®Ç°»òÖ®ºó½«»á¸Ä±ä»ò½«»á²»´æÔÚ¡£
ExpiresÍ·ÓòÀïÈÕÆÚ¸ñʽÊǾø¶ÔÈÕÆÚ£¨absolute date£©ºÍʱ¼ä£¬ÓÉ3.3.1½ÚÖÐHTTP-date¶¨Ò壻Ëü±ØÐëÊÇRFC1123ÀïµÄÈÕÆÚ¸ñʽ£º
Expires="Expires " ":" HTTP-date
ʹÓÃʾÀýΪ£º
Expires: Thu, 01 Dec 1994 16:00:00 GMT
×¢£ºÈôÏìÓ¦°üº¬Ò»¸öCache-ControlÍ·Óò£¬²¢ÇÒº¬ÓÐmax-age»º´æ¿ØÖÆÖ¸Á²Î¼û14.9.3½Ú£©£¬Ôò´ËÖ¸Á¸ÇExpiresÍ·Óò¡£
HTTP/1.1¿Í»§¶ËºÍ»º´æ±ØÐë°ÑÆäËûÎÞЧµÄÈÕÆÚ¸ñʽ£¬ÌرðÊǰüº¬“0”µÄÈÕÆÚ¸ñʽ¿´³ÉÊǹýÈ¥µÄʱ¼ä£¨Ò²¾ÍÊÇ˵£¬“ÒѾ¹ýÆÚ”£©¡£
ΪÁ˽«ÏìÓ¦±êΪ“ÒѾ¹ýÆÚ”£¬Ô´·þÎñÆ÷±ØÐë°ÑExpiresÍ·ÓòÀïµÄÈÕÆÚÉèΪÓëDateÍ·ÓòÖµÏàµÈ¡££¨²Î¼û13.2.4½ÚÀï¹ØÓÚ¹ýÆÚ¼ÆËãµÄ¹æÔò¡££©
Ϊ±ê¼ÇÏìӦΪ“ÓÀ²»¹ýÆÚ”£¬Ô´·þÎñÆ÷±ØÐë°ÑExpiresÍ·ÓòÀïµÄÈÕÆÚÉèΪÍíÓÚÏìÓ¦·¢ËÍʱ¼äÒ»Äê×óÓÒ¡£HTTP/1.1·þÎñÆ÷²»Ó¦·¢Ëͳ¬¹ý½«À´Ò»ÄêµÄ¹ýÆÚÈÕÆÚ¡£
¶ÔÓÚȱʡ²»¿É±»»º´æµÄÏìÓ¦¶øÑÔ£¬³ý·Ç±»Cache-ControlÍ·Óò£¨¼û14.9½Ú£©Ö¸Ã÷£¬·ñÔòÈç¹ûExpiresÍ·ÓòÀïÈÕÆÚֵΪÏìÓ¦½«À´µÄʱ¼ä£¬ÄÇô¾Í±íÃ÷´ËÏìÓ¦Êǿɻº´æµÄ¡£
14.22 From
FromÇëÇó±¨Í·Óò£¬Èç¹ûÓеϰ£¬Ó¦¸Ã°üº¬Óû§´úÀíµ±Ç°²Ù×÷Óû§µÄemailµØÖ·¡£Õâ¸öµØÖ·Ó¦¸ÃÊÇ»úÆ÷¿ÉÓõĵØÖ·£¬Õâ±»RFC 822 [9]ÀïµÄ“mailbox”¶¨ÒåͬʱҲÔÚRFC 1123 [8]ÀïÐÞ¶©ÁË£º
From = "From" ":" mailbox
ÀýÈ磺
From: webmaster@w3.org
Í·Óò¿ÉÒÔ±»ÓÃÓڼǼÈÕÖ¾ºÍ×÷Ϊʶ±ðÎÞЧ»ò¶àÓàÇëÇóµÄ×ÊÔ´¡£Ëû²»Ó¦¸ÃÓÃ×÷²»°²È«ÐÎʽµÄ·ÃÎʱ£»¤¡£Õâ¸öÍ·ÓòµÄ½âÊÍÊÇ£ºÇëÇóÊÇ´ú±íËùÖ¸¶¨µÄÈËÖ´Ðе쬴ËÈËÓ¦¸Ã³Ðµ£Õâ¸ö·½·¨Ö´ÐеÄÔðÈΡ£ÌرðµÄ£¬»úÆ÷ÈË´úÀí³ÌÐòÓ¦¸Ã°üº¬Õâ¸öÍ·Óò£¬ÕâÑù´ËÈËÓ¦¸Ã¶ÔÔËÐд˻úÆ÷ÈË´úÀí³ÌÐò¸ºÔ𣬲¢ÇÒÓ¦¸ÃÄܱ»ÁªÏµÉÏÈç¹ûÔÚ½ÓÊն˳öÏÖÎÊÌâµÄ»°¡£
´ËÍ·ÓòÀïµÄÍøÂçemailµØÖ·ÊÇ¿ÉÒԺͷ¢³öÇëÇóµÄÍøÂçÖ÷»ú£¨host£©·ÖÀëµÄ¡£ÀýÈ磬µ±Ò»¸öÇëÇóͨ¹ýÒ»¸ö´úÀí£¨proxy£©Ê±£¬³õʼÇëÇó·¢ËÍÕߵĵØÖ·Ó¦¸Ã±»Ê¹Óá£
¿Í»§¶ËÔÚûÓÐÓû§µÄÔÊÐíÊDz»Ó¦¸Ã·¢³öFromÍ·ÓòµÄ£¬ÒòΪËü¿ÉÄܺÍÓû§µÄ¸öÈËÀûÒæ»òÕßËûÃÇÕ¾µãµÄ°²È«Õþ²ßÏà³åÍ»¡£Ç¿ÁÒ½¨ÒéÔÚÈκÎÒ»´ÎÇëÇó֮ǰÓû§ÄÜÈ¡Ïû£¬ÊÚȨ£¬ºÍÐÞ¸ÄÕâ¸öÍ·ÓòµÄÖµ¡£
14.23 Host
HostÇëÇóÍ·Óò˵Ã÷ÁËÕýÔÚÇëÇó×ÊÔ´µÄÍøÂçÖ÷»úºÍ¶Ë¿ÚºÅ£¬Õâ¿ÉÒÔ´ÓÔ´URI»òÒýÓÃ×ÊÔ´£¨Í¨³£ÊÇÒ»¸öHTTP URL£¬ÕâÔÚ3.3.3½ÚÀïÃèÊö£©¡£HostÍ·ÓòÖµ±ØÐë´ú±íÔ´·þÎñÆ÷»òÍø¹Ø£¨±»Ô´URLÖ¸¶¨£©µÄÃüÃûÊÚȨ£¨naming authority£©¡£ÕâÔÊÐíÔ´·þÎñÆ÷»òÍø¹ØÈ¥Çø·ÖÓÐÄÚÔÚÆçÒåµÄURLS£¬ÀýÈ磬ӵÓÐÒ»¸öIPµØÖ·µÄ·þÎñÆ÷£¬ËüµÄ¸ù“/”URL¶ÔÓ¦Óжà¸öÖ÷»úÃû¡£
Host = "Host" ":" host [ ":" port ] ; 3.2.2½Ú
Ò»¸ö“host”Èç¹ûûÓиúËæµÄ¶Ë¿ÚÐÅÏ¢£¬ÄÇô¾Í²ÉÓÃÊÇÇëÇó·þÎñµÄµÄĬÈ϶˿ڣ¨ÀýÈ磬¶ÔÒ»¸öHTTP URLÀ´Ëµ£¬¾ÍÊÇ80¶Ë¿Ú£©¡£ÀýÈ磬һ¸ö¶ÔÔ´·þÎñÆ÷http://www.w3.org/pub/WWW/µÄÇëÇ󣬿ÉÒÔÓÃÏÂÃæÀ´±íʾ£º
GET /pub/WWW/HTTP/1.1
Host: www.w3.org
Ò»¸ö¿Í»§¶Ë±ØÐëÔÚËùÓÐHTTP/1.1ÇëÇóÏûÏ¢Àï°üº¬Ò»¸öHostÍ·Óò¡£Èç¹ûÇëÇóURIûÓаüº¬ÇëÇó·þÎñµÄÍøÂçÖ÷»úÃû£¬ÄÇôHostÍ·Óò±ØÐë¸øÒ»¸ö¿ÕÖµ¡£Ò»¸öHTTP/1.1´úÀí±ØÐëÈ·±£ÈκÎËüת·¢µÄÇëÇóÏûÏ¢Àï±ØÐë°üº¬Ò»¸öºÏÊʵÄHostÍ·Óò£¬´ËÍ·ÓòÖ¸¶¨ÁË´úÀíÇëÇóµÄ·þÎñµØÖ·¡£ËùÓлùÓÚÍøÂçµÄHTTP/1.1·þÎñÆ÷±ØÐëÏìÓ¦400£¨»µÇëÇó£©×´Ì¬Â룬Èç¹ûÇëÇóÏûÏ¢ÀïȱÉÙHostÍ·Óò¡£
¼û5.2ºÍ19.6.1.1½ÚÀïÓÐÕë¶ÔHostÍ·ÓòµÄÆäËûÒªÇó¡£
14.24 If-Match
If-MatchÇëÇóÍ·ÓòÊÇÓÃÀ´È÷½·¨³ÉΪÌõ¼þ·½·¨¡£Èç¹ûÒ»¸ö¿Í»§¶ËÒѾ´ÓÒ»¸ö×ÊÔ´Àï»ñµÃÒ»¸ö»ò¶à¸öʵÌ壨entity£©£¬ÄÇôËû¿ÉÒÔͨ¹ýÔÚIf-MatchÍ·ÓòÀï°üº¬ÏàÓ¦µÄʵÌå±êÇ©£¨entity tag£©À´ÑéÖ¤ÕâЩʵÌåµÄÒ»¸ö»ò¶à¸öÊÇ·ñ¾ÍÊÇ·þÎñÆ÷µ±Ç°ÊµÌ塣ʵÌå±êÇ©£¨entity tag£©ÔÚ3.11½ÚÀﶨÒå¡£Õâ¸öÌØÐÔʹ¸üлº´æÐÅÏ¢Ö»ÐèÒªÒ»¸öºÜСµÄÊÂÎñ¿ªÏú¡£ËüÕÕÑù±»ÓÃÓÚ·Àֹͨ¹ý¸üÐÂÇëÇó¶ÔÒ»¸ö×ÊÔ´ÆäËü°æ±¾µÄ²»¾ÒâÐ޸ġ£×÷ΪһÖÖÌØÊâÇé¿ö£¬“*”Æ¥Åä×ÊÔ´µÄµ±Ç°ÈκÎʵÌå¡£
If-Match = "If-Match" ":" £¨ "*" | 1#entity-tag £©
Èç¹ûIf-MatchÍ·ÓòÀïÈκÎÒ»¸öʵÌå±êÇ©¼ÙÉèÓëÏàËÆµÄGETÇëÇó£¨Ã»ÓÐIf-MatchÍ·Óò£©·µ»ØÊµÌåµÄʵÌå±êÇ©ÏàÆ¥Å䣬»òÕßÈç¹û¸ø³ö“*”²¢ÇÒÇëÇó×ÊÔ´µÄµ±Ç°ÊµÌå´æÔÚ£¬ÄÇô·þÎñÆ÷¿ÉÒÔÖ´ÐÐÇëÇó·½·¨¾ÍºÃÏñIf-MatchÍ·Óò²»´æÔÚÒ»Ñù¡£
·þÎñÆ÷±ØÐëÓÃÇ¿±È½Ï·½·¨£¨¼û13.3.3£©À´±È½ÏIf-MatchÀïµÄʵÌå±êÇ©£¨entity tag£©¡£
Èç¹ûûÓÐÒ»¸öʵÌå±êǩƥÅ䣬»òÕ߸ø³öÁË“*”µ«·þÎñÆ÷ÉÏûÓе±Ç°µÄʵÌ壬ÄÇô·þÎñÆ÷²»ÄÜÖ´ÐдËÇëÇóµÄ·½·¨£¬²¢ÇÒ·µ»Ø412ÏìÓ¦£¨ÏȾöÌõ¼þʧ°Ü£©¡£ÕâÖÖÐÐΪÊǺÜÓÐÓõģ¬ÌرðÊÇÔÚµ±¿Í»§¶ËÏ£Íû·ÀÖ¹Ò»¸ö¸üз½·¨£¨updating method£©£¨ÀýÈçPUT·½·¨£©È¥ÐÞ¸ÄÒ»¸ö¿Í»§¶ËÉÏ´ÎÇëÇóµÄµ«ÏÖÔÚÒѾ¸Ä±äÁ˵Ä×ÊԴʱ£¬
Èç¹ûÇëÇóÔÚ¼ÙÉèÔÚûÓÐIf-MatchÍ·ÓòµÄÇé¿öϵ¼ÖÂÁ˳ý2XX»ò412ÒÔÍâµÄÆäËû״̬ÂëÏìÓ¦£¬ÄÇôIf-MatchÍ·Óò±ØÐë±»ºöÂÔ¡£
“If-Match: *” µÄº¬ÒåÊÇ£º´Ë·½·¨½«±»Ö´ÐУ¬Èç¹ûÔ´·þÎñÆ÷£¨»ò»º´æ£¬ºÜ¿ÉÄÜʹÓÃVary»úÖÆ£¬¼û14.44½Ú£©Ñ¡ÔñµÄ±íÏÖÐÎʽ£¨representation£©´æÔڵϰ£¬µ«ÊÇÈç¹û´Ë±íÏÖÐÎʽ²»´æÔÚ£¬ÄÇô´Ë·½·¨²»Äܱ»Ö´ÐС£
Èç¹ûÒ»¸öÇëÇóÏëÒª¸üÐÂÒ»¸ö×ÊÔ´£¨ÀýÈçPUT£©ÄÇôËü¿ÉÒÔ°üº¬Ò»¸öIf-MatchÍ·ÓòÀ´Ö¸Ã÷£ºµ±ÏàÓ¦ÓÚIf-MatchÖµ£¨Ò»¸öʵÌå±êÇ©£©µÄʵÌå²»ÔÙÊÇÄǸö×ÊÔ´µÄ±íÏÖÐÎʽʱ£¬´ËÇëÇó·½·¨²»Äܱ»²ÉÓá£ÕâÔÊÐíÓû§±íÃ÷£ºÈç¹ûÄǸö×ÊÔ´ÒѾ¸Ä±äÁ˶øËûÃDz»ÖªµÀµÄ»°£¬ËûÃDz»Ï£ÍûÇëÇó³É¹¦¡£
ÀýÈ磺
If-Match: "xyzzy"
If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
If-Match: *
¼ÈÓÐIf-MatchÍ·ÓòÓÖÓÐIf-None-Match»òIf-Modified-SinceÍ·ÓòµÄÇëÇóµÄ½á¹ûÔÚ±¾¹æ·¶Ã»Óж¨Òå¡£
14.25 If-Modified-Since
If-Modified-SinceÇëÇóÍ·Óò±»ÓÃÀ´È÷½·¨³ÉΪÌõ¼þ·½·¨£ºÈç¹ûÇëÇó±äÁ¿£¨variant£©×Ô´Ó´ËÍ·ÓòÀïÖ¸¶¨µÄʱ¼äÖ®ºóûÓиı䣬ÄÇô·þÎñÆ÷²»Ó¦¸Ã·µ»ØÊµÌ壻¶øÊÇÓ¦¸ÃÒÔ304£¨Ã»Óиı䣩״̬Âë½øÐÐÏìÓ¦£¬Í¬Ê±·µ»ØÏûÏ¢²»ÐèÒªÏûÏ¢Ö÷Ì壨message-body£©¡£
If-Modified-Since = "If-Modified-Since" ":" HTTP-date
Ò»¸öÀý×ÓÊÇ£º
If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
Èç¹ûÒ»¸öGETÇëÇó·½·¨º¬ÓÐIf-Modified-SinceÍ·Óòµ«Ã»ÓÐRangeÍ·Óò£¬ÄÇô´Ë·½·¨ÇëÇóµÄʵÌåÖ»ÓÐÇëÇóÀïIf-Modified-SinceÍ·ÓòÖÐÖ¸¶¨ÈÕÆÚÖ®ºó±»¸Ä±äºó²ÅÄܱ»·þÎñÆ÷·µ»Ø¡£¾ö¶¨Õâ¸öËã·¨°üÀ¨ÏÂÁÐÇé¿ö£º
a£©Èç¹ûÇëÇó¼ÙÉè»áµ¼Ö³ý״̬200Ö®ÍâµÄÈÎºÎÆäËü״̬̬Â룬»òÕßÈç¹ûIf-Modified-SinceÈÕÆÚÊÇÎÞЧµÄ£¬ÄÇôÏìÓ¦¾ÍºÍÕý³£µÄGETÇëÇóµÄÏìÓ¦ÍêȫһÑù¡£±È·þÎñÆ÷µ±Ç°Ê±¼äÍíµÄÈÕÆÚÊÇÎÞЧµÄ¡£
b£©Èç¹û×Ô´ÓÒ»¸öÓÐЧµÄIf-Modified-SinceÈÕÆÚÒÔÀ´£¬±äÁ¿ÒѾ±»ÐÞ¸ÄÁË£¬ÄÇô·þÎñÆ÷Ó¦¸Ã·µ»ØÒ»¸öÏìӦͬÕý³£GETÇëÇóÒ»Ñù¡£
c£©Èç¹û×Ô´ÓÒ»¸öÓÐЧµÄIf-Modified-SinceÈÕÆÚÒÔÀ´£¬±äÁ¿Ã»Óб»Ð޸ģ¬ÄÇô·þÎñÆ÷Ó¦¸Ã·µ»ØÒ»¸ö304£¨Ã»Óиı䣩ÏìÓ¦¡£
ÕâÖÖÌØÕ÷µÄÄ¿µÄÊÇÒÔÒ»¸ö×îСµÄÊÂÎñ¿ªÏúÀ´¸üлº´æÐÅÏ¢¡£
×¢ÊÍ£ºRangeÇëÇóÍ·ÓòÐÞ¸ÄÁËIf-Modified-SinceµÄº¬Ò壻ÏêϸÐÅÏ¢¼û14.35¡£
×¢ÊÍ£ºIf-Modified-SinceµÄʱ¼äÊÇÓÉ·þÎñÆ÷½âÎöµÄ£¬ËüµÄʱÖÓ¿ÉÄܺͿͻ§¶ËµÄ²»Í¬²½¡£
×¢ÊÍ£ºµ±´¦ÀíÒ»¸öIf-Modified-SinceÍ·ÓòµÄʱºò£¬Ò»Ð©·þÎñÆ÷ʹÓþ«È·µÄÈÕÆÚ±È½Ï·½·¨£¬¶ø²»ÊÇÉÔ²îµÄ±È½Ï·½·¨£¬À´¾ö¶¨ÊÇ·ñ·¢ËÍÏìÓ¦304£¨Ã»Óиı䣩ÏìÓ¦¡£µ±Îª»º´æÑéÖ¤¶ø·¢ËÍÒ»¸öIf-Modified-SinceÍ·ÓòµÄʱºò£¬ÎªÁ˵õ½×îºÃµÄ½á¹û£¬¿Í»§¶Ë±»½¨ÒéÈ¥ÀûÓþ«È·µÄÈÕÆÚ×Ö·û´®£¬´Ë×Ö·û´®ÊÇÒÔǰµÄLast-ModifiedÍ·ÓòÀï±»½ÓÊյġ£
×¢ÊÍ£ºÈç¹û¿Í»§¶Ë£¬¶ÔͬһÇëÇó£¬ÔÚIf-Modified-SinceÍ·ÓòÖÐʹÓÃÈÎÒâÈÕÆÚ´úÌæLast-ModifiedÍ·ÓòÀïµÃµ½µÄÈÕÆÚ£¬ÄÇô¿Í»§¶ËÓ¦¸ÃÖªµÀÕâ¸öÈÕÆÚÊÇÓÉ·þÎñÆ÷ͨ¹ý¶Ôʱ¼äµÄÀí½âÀ´½âÊ͵ġ£ÓÉÓÚ¿Í»§¶ËºÍ·þÎñÆ÷Ö®¼äʱ¼ä±àÂëµÄ²»Í¬£¬¿Í»§¶ËÓ¦¸Ã¿¼ÂÇʱÖÓ²»Í¬²½ºÍÉáÈëµÄÎÊÌâ¡£Èç¹ûÔÚ¿Í»§¶ËµÚÒ»´ÎÇëÇóʱ¿ÌÓëºóÀ´ÇëÇóÀïÍ·ÓòIf-Modified-SinceÖ¸¶¨µÄÈÕÆÚÖ®¼ä£¬ÎĵµÒѾ¸Ä±ä£¬Õâ¾Í¿ÉÄÜ»á³öÏÖ¾ºÕùÌõ¼þ£¬»¹ÓУ¬Èç¹ûIf-Modified-Since´Ó¿Í»§¶ËµÃµ½µÄÈÕÆÚûÓеõ½·þÎñÆ÷ʱÖӵĽÃÕý£¬¾ÍÓпÉÄܳöÏÖʱÖÓÆ«²îµÈÎÊÌâµÄ¡£¿Í»§¶ËºÍ·þÎñÆ÷ʱ¼äµÄÆ«²î×îÓпÉÄÜÊÇÓÉÓÚÍøÂçµÄÑÓ³ÙÔì³ÉµÄ¡£
¼ÈÓÐIf-Modified-SinceÍ·ÓòÓÖÓÐIf-Match»òIf-Unmodified-SinceÍ·ÓòµÄÇëÇóµÄ½á¹ûÔÚ±¾¹æ·¶Ã»Óж¨Òå¡£
14.26 If-None-Match
If-None-MatchÍ·Óò±»ÓÃÓÚÒ»¸ö·½·¨Ê¹Ö®³ÉΪÌõ¼þµÄ¡£Ò»¸ö¿Í»§¶ËÈç¹ûÓÐÒ»¸ö»ò¶à¸ö´Óij×ÊÔ´»ñµÃµÄʵÌ壬ÄÇôËûÄÜÑéÖ¤ÔÚÕâЩʵÌåÖÐÓв»´æÔÚÓÚ·þÎñÆ÷µ±Ç°ÊµÌåÖеÄʵÌ壬Õâͨ¹ýÔÚIf-None-MatchÍ·ÓòÀï°üº¬ÕâЩʵÌåÏà¹ØµÄʵÌå±êÇ©£¨entity tag£©À´´ïµ½´ËÄ¿µÄ¡£Õâ¸öÌØÐÔÔÊÐíͨ¹ýÒ»¸ö×îСÊÂÎñ¿ªÏúÀ´¸üлº´æÐÅÏ¢¡£ËüͬÑù±»ÓÃÓÚ·ÀÖ¹Ò»¸ö·½·¨£¨È磬PUT£©²»¾ÒâµÄ¸Ä±äÒ»¸öÒѾ´æÔÚµÄ×ÊÔ´£¬¶ø¿Í»§¶Ë»¹ÏàÐÅÄǸö×ÊÔ´²¢²»´æÔÚʱ¡£
×÷ÎªÌØÊâÇé¿ö£¬Í·ÓòÖµ“*”Æ¥Åä×ÊÔ´µÄÈκε±Ç°ÊµÌå¡£
If-None-Match = "If-None-Match" ":" £¨ "*" | 1#entity-tag £©
Èç¹ûIf-None-MatchÍ·ÓòÀïµÄÈκÎʵÌå±êÇ©£¨entity tag£©¼ÙÉèÓëÒ»¸öÏàËÆµÄGETÇëÇ󣨼ÙÉèûÓÐIf-None-MatchÍ·Óò£©·µ»ØÊµÌåµÄʵÌå±êÇ©ÏàÆ¥Å䣬»òÕߣ¬Èç¹û“*”±»¸ø³ö²¢ÇÒ·þÎñÆ÷¹ØÓÚÄǸö×ÊÔ´µÄÈκε±Ç°ÊµÌå´æÔÚ£¬ÄÇô·þÎñÆ÷²»ÄÜÖ´ÐдËÇëÇó·½·¨£¬³ý·Ç×ÊÔ´µÄÐÞ¸ÄÈÕÆÚ²»ÄÜÆ¥Åä´ËÇëÇóÀïIf-Modified-SinceÍ·Óò£¨¼ÙÉèÓеϰ£©ÀïÌṩµÄÈÕÆÚ ¡£»»ÑÔÖ®£¬Èç¹ûÇëÇó·½·¨ÊÇGET»òHEAD£¬ÄÇô·þÎñÆ÷Ó¦ÒÔ304£¨Ã»Óиı䣩À´ÏìÓ¦£¬²¢ÇÒ°üº¬Æ¥ÅäʵÌåµÄÏà¹Ø»º´æÍ·Óò£¨ÌرðÊÇEtag£© ¡£¶ÔÓÚËùÓÐÆäËü·½·¨£¬·þÎñÆ÷±ØÐëÒÔ412£¨ÏȾöÌõ¼þʧ°Ü£©×´Ì¬ÂëÏìÓ¦¡£
13.3½Ú˵Ã÷ÁËÈçºÎÅжÏÁ½ÊµÌå±êÇ©ÊÇ·ñÆ¥Åä¡£Èõ±È½Ï·½·¨Ö»ÄÜÓÃÓÚGET»òHEADÇëÇó¡£
Èç¹ûIf-None-MatchÍ·ÓòÀïûÓÐʵÌå±êǩƥÅ䣬ÄÇô·þÎñÆ÷¿ÉÒÔÖ´ÐдËÇëÇó·½·¨¾ÍÏñIf-None-MatchÍ·Óò²»´æÔÚÒ»Ñù£¬µ«ÊDZØÐëºöÂÔÇëÇóÀïµÄÈκÎIf-Modified-SinceÍ·Óò¡£ÄǾÍÊÇ˵£¬Èç¹ûûÓÐʵÌå±êǩƥÅä £¬ÄÇô·þÎñÆ÷²»ÄÜ·µ»Ø304£¨Ã»Óиı䣩ÏìÓ¦¡£
Èç¹û¼ÙÉèÔÚûÓÐIf-None-MatchÍ·Óò´æÔÚµÄÇé¿öÏ£¬ÇëÇó»áµ¼Ö³ý2xx¼°304״̬ÂëÖ®ÍâÏìÓ¦£¬ÄÇôIf-None-MatchÍ·Óò±ØÐë±»ºöÂÔ¡££¨¼û13.3.4½Ú¹ØÓÚ¼ÙÈçͬʱ´æÔÚIf-Modified-SinceºÍIf-None-MatchÍ·Óòʱ·þÎñÆ÷µÄÐÐΪµÄÌÖÂÛ£©
“If-None-Match: *”µÄÒâ˼ÊÇ£ºÈç¹û±»Ô´·þÎñÆ÷£¨»ò±»»º´æ£¬¿ÉÄÜÀûÓÃVary»úÖÆ£¬¼û14.44½Ú£©Ñ¡ÔñµÄ±íÏÖÐÎʽ£¨representation£©´æÔڵϰ£¬ÇëÇó·½·¨²»Äܱ»Ö´ÐУ¬È»¶ø£¬Èç¹û±íÏÖÐÎʽ²»´æÔڵϰ£¬ÇëÇó·½·¨ÊÇÄܱ»Ö´Ðеġ£Õâ¸öÌØÐÔ¿ÉÒÔ·ÀÖ¹ÔÚ¶à¸öPUT²Ù×÷ÖеľºÕù¡£
Àý:
If-None-Match: "xyzzy"
If-None-Match: W/"xyzzy"
If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz"
If-None-Match: *
Èç¹ûÒ»¸öÇëÇóº¬ÓÐIf-None-MatchÍ·Óò£¬»¹º¬ÓÐÒ»¸öIf-Match»òIf-Unmodified-SinceÍ·ÓòµÄ»°£¬´ËÇëÇóµÄÖ¸Ïò½á¹ûÔڴ˹淶ÀïûÓж¨Òå¡£
14.27 If-Range
Èç¹û¿Í»§¶ËÔÚÆäËùÖ¸µÄ»º´æÖÐÓÐÒ»¸öʵÌåµÄ²¿·Ö¸±±¾£¬²¢Ï£ÍûÆä»º´æÖÐÓдËʵÌåµÄÍêÕû¸±±¾£¬ÄÇô´Ë¿Í»§¶ËÓ¦¸ÃÔÚÒ»¸öÌõ¼þGET£¨conditional GET£©£¨ÔÚGETÇëÇóÏûÏ¢ÀïÀûÓÃÁËIf-Unmodified-SinceºÍIf-MatchÍ·Óò£¬»òÀûÓÃÁËÆäÖÐÒ»¸ö£©ÇëÇóÀïÀûÓÃRangeÇëÇóÍ·Óò£¨request-header£©¡£È»¶ø£¬Èç¹ûÓÉÓÚʵÌå±»¸Ä±ä¶øÊ¹Ìõ¼þʧ°Ü£¬ÄÇô´Ë¿Í»§¶Ë¿ÉÄܻᷢ³öµÚ¶þ´ÎÇëÇó´Ó¶øÈ¥»ñµÃÕû¸öµ±Ç°ÊµÌåÖ÷Ì壨entity-body£©¡£
If-RangeÍ·ÓòÔÊÐí¿Í»§¶Ë¶Ì·£¨short-circuit£©µÚ¶þ´ÎÇëÇó¡£ËµµÄͨË×Ò»µã£¬ÕâÒâζ×Å£ºÈç¹ûʵÌåûÓиı䣬·¢ËÍÎÒÏëÒªµÄ²¿·Ö£¨Òë×¢£º·¢ËÍrangeÖ¸Ã÷µÄʵÌ巶Χ£©£»Èç¹ûʵÌå¸Ä±äÁË£¬ÄǾͰÑÕû¸öеÄʵÌå·¢¹ýÀ´¡£
If-Range = “if-Range” “:”( entity-tag | HTTP-date)
Èô¿Í»§¶ËûÓÐÒ»¸öʵÌåµÄʵÌå±êÇ©£¨entity tag£©£¬µ«ÓÐÒ»¸ö×îºóÐÞ¸ÄÈÕÆÚ£¨Last-Modified date£©£¬Ëü¿ÉÒÔÔÚIf-RangeÍ·ÓòÀïÀûÓôËÈÕÆÚ¡££¨·þÎñÆ÷ͨ¹ý¼ì²éÒ»Á½¸ö×Ö·û¼´¿ÉÇø·ÖºÏ·¨HTTP-dateÓëÈÎÒâÐÎʽµÄentity-tag¡££©If-RangeÍ·ÓòÓ¦¸ÃÖ»ÄÜÓëÒ»¸öRangeÍ·ÓòÒ»ÆðʹÓ㬲¢ÇÒ±ØÐë±»ºöÂÔÈç¹ûÇëÇó²»°üº¬Ò»¸öRangeÍ·Óò»òÕßÈç¹û·þÎñÆ÷²»Ö§³Ö×Ó·¶Î§£¨sub-range£©²Ù×÷¡£
Èç¹ûIf-RangeÍ·ÓòÀï¸ø¶¨µÄʵÌå±êǩƥÅä·þÎñÆ÷Éϵ±Ç°ÊµÌåµÄʵÌå±êÇ©£¨entity tag£©£¬ÄÇô·þÎñÆ÷Ó¦¸ÃÌṩ´ËʵÌåµÄÖ¸¶¨·¶Î§£¬²¢ÀûÓÃ206£¨²¿·ÖÄÚÈÝ£©ÏìÓ¦¡£Èç¹ûʵÌå±êÇ©£¨entity tag£©²»Æ¥Å䣬ÄÇô·þÎñÆ÷Ó¦¸Ã·µ»ØÕû¸öʵÌ壬²¢ÀûÓÃ200£¨ok£©ÏìÓ¦¡£
14.28 If-Unmodified-Since
If-Unmodified-SinceÇëÇóÍ·Óò±»ÓÃÓÚÒ»¸ö·½·¨Ê¹Ö®³ÉΪÌõ¼þ·½·¨¡£Èç¹ûÇëÇó×ÊÔ´×Ô´Ó´ËÍ·ÓòÖ¸¶¨Ê±¼ä¿ªÊ¼Ö®ºóûÓиı䣬ÄÇô·þÎñÆ÷Ó¦¸ÃÖ´ÐдËÇëÇó¾ÍÏñIf-Unmodified-SinceÍ·Óò²»´æÔÚÒ»Ñù¡£
Èç¹ûÇëÇó±äÁ¿£¨variant£¬Òë×¢£º¼ûÊõÓÔÚ´ËÍ·ÓòÖ¸¶¨Ê±¼äºóÒÔºóÒѾ¸Ä±ä£¬ÄÇô·þÎñÆ÷²»ÄÜÖ´ÐдËÇëÇ󣬲¢ÇÒ±ØÐë·µ»Ø412£¨Ç°ÌáÌõ¼þʧ°Ü£©×´Ì¬Âë¡£
If-Unmodified-Since = "If-Unmodified-Since" ":" HTTP-ÈÕÆÚ
´ËÓòµÄÓ¦ÓÃʵÀý:
If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT
Èç¹ûÇëÇóÕý³£Çé¿öÏ£¨¼´¼ÙÉèÔÚûÓÐIf-Unmodified-SinceÍ·ÓòµÄÇé¿öÏ£©µ¼ÖÂÈκηÇ2xx»ò412״̬Â룬ÄÇôIf-Unmodified-SinceÍ·Óò½«»áºöÂÔ¡£
Èç¹û´ËÍ·ÓòÖÐÖ¸¶¨µÄÈÕÆÚÎÞЧ£¬ÄÇô´ËÍ·Óò»á±»ºöÂÔ¡£
ÔÚÇëÇóÀïÓÐIf-Unmodified-SinceÍ·Óò²¢ÇÒÓÐIf-None-Match»òÕßIf-Modified-SinceÍ·ÓòÖеÄÒ»¸ö£¬ÕâÖÖÇëÇóµÄ´¦Àí½á¹ûÔڴ˹淶ÖÐûÓб»¶¨Òå¡£
14.29 Last-Modified
Last-ModifiedʵÌåÍ·Óò£¨entity-header£©Ö¸Ã÷Á˱äÁ¿£¨variant£©±»Ô´·þÎñÆ÷ËùÈ·ÐŵÄ×îºóÐ޸ĵÄÈÕÆÚºÍʱ¼ä¡£
Last-Modified = “Last-Modified” “:” HTTP-date
Ó¦ÓÃʾÀýÈçÏ£º
Last-Modified : Tue, 15 Nov 1994 12:45:26 GMT
´ËÍ·ÓòµÄÈ·Çк¬ÒåÈ¡¾öÓÚÔ´·þÎñÆ÷µÄʵÏÖºÍÔ´×ÊÔ´£¨original resource£©µÄÐÔÖÊ¡£ ¶ÔÎļþ¶øÑÔ£¬Ëü¿ÉÄܽö½öָʾÎļþÉÏ´ÎÐ޸ĵÄʱ¼ä¡£¶ÔÓÚ°üº¬¶¯Ì¬²¿·ÖµÄʵÌå¶øÑÔ£¬Ëü¿ÉÄÜÊÇ×é³ÉÆä¸÷¸ö²¿·ÖÖÐ×îºóÐÞ¸Äʱ¼ä×î½üµÄÄǸö²¿·Ö¡£¶ÔÊý¾Ý¿âÍø¹Ø¶øÑÔ£¬Ëü¿ÉÄÜÊǼǼµÄ×îÐÂÐÞ¸Äʱ¼ä´Á¡£¶ÔÐéÄâ¶ÔÏóÀ´Ëµ£¬Ëü¿ÉÄÜÊÇ×îºóÄÚ²¿×´Ì¬¸Ä±äµÄʱ¼ä¡£
Ô´·þÎñÆ÷²»µÃ·¢ËÍÒ»¸ö³ÙÓÚÏûÏ¢²úÉúʱ¼äµÄLast-ModifiedÈÕÆÚ¡£¼ÙÈç×ÊÔ´×îºóÐÞ¸ÄÈÕÆÚ¿ÉÄÜָʾ½«À´µÄij¸öʱ¼ä£¬´Ë·þÎñÆ÷Ó¦¸ÃÓÃÏûÏ¢²úÉúµÄʱ¼äÌæ»»ÄǸöÈÕÆÚ¡£
Ô´·þÎñÆ÷»ñµÃʵÌåµÄLast-ModifiedÖµÓ¦¸Ã¾¡Á¿¿¿½ü·þÎñÆ÷²úÉúÏìÓ¦µÄDateÖµ¡£ÕâÔÊÐí½ÓÊÕÕß¶ÔʵÌåÐÞ¸Äʱ¼ä×÷³ö׼ȷµÄ¹À¼Æ£¬ÌرðÊÇÈç¹ûʵÌåµÄ¸Ä±äʱ¼ä½Ó½üÏìÓ¦²úÉúµÄʱ¼ä¡£
HTTP/1.1·þÎñÆ÷Ó¦¸Ã·¢ÉúLast-ModifiedÍ·ÓòÎÞÄܺÎʱ¡£
14.30 Location
LocationÏìӦͷÓò±»ÓÃÓÚΪÁËÍê³ÉÇëÇó»òʶ±ðÒ»¸öÐÂ×ÊÔ´£¬Ê¹½ÓÊÕÕßÄÜÖØ¶¨ÏòÓÚLocationָʾµÄURI¶ø²»ÊÇÇëÇóURI¡£¶ÔÓÚ201£¨Created£©ÏìÓ¦¶øÑÔ£¬LocationÊÇÇëÇó½¨Á¢ÐÂ×ÊÔ´µÄλÖ᣶ÔÓÚ3xxÏìÓ¦¶øÑÔ£¬LocationÓ¦¸ÃÖ¸Ã÷ÁË·þÎñÆ÷×Ô¶¯Öض¨Ïò×ÊԴϲ°®µÄURI¡£LocationÍ·ÓòÖµÓÉÒ»¸ö¾ø¶ÔURI×é³É¡£
Location = “Location” “:” absoluteURI
Ò»¸öÀý×ÓÈçÏ£º
Location : http://www.w3.org/pub/WWW/People.html
×¢: Content-LocationÍ·Óò£¨14.14½Ú£©²»Í¬ÓÚLocationÍ·Óò£¬Content-LocationÍ·ÓòÖ¸¶¨ÁËÇëÇóÀï·âװʵÌåµÄԴλÖá£ÓпÉÄÜÒ»¸öÏìÓ¦¼´°üº¬locationÒ²°üº¬Content-LocationÍ·Óò¡£ÔÚ13.10½ÚÀïÓйØÓÚһЩ·½·¨µÄÒªÇó¡£
14.31 Max-Forwards
Max-ForwardsÇëÇóÍ·ÓòÌṩһÖÖ»úÖÆ£¬ÄǾÍÊÇÀûÓÃTRACE£¨9.8½Ú£©ºÍOPTIONS£¨9.2½Ú£©·½·¨È¥ÏÞÖÆ´úÀí»òÍø¹ØµÄÊýÁ¿£¬ÕâЩ´úÀí»òÍø¹ØÄÜ´«µÝÇëÇóµ½ÏÂÒ»¸öÈëÁ÷£¨inbound£©·þÎñÆ÷¡£ÕâÊǷdz£ÓаïÖúµÄ£¬µ±¿Í»§¶Ë³¢ÊÔÈ¥¸ú×ÙÒ»¸öºÃÏñÏÝÈëʧ°Ü»òÏÝÈëÑ»·µÄÇëÇóÁ´Ê±¡£
Max-Forwards = “Max – Forwards” “:” 1*DIGIT
Max-ForwardsÖµÊÇÊ®½øÖƵÄÕûÊý£¬ËüÖ¸¶¨ÁËÇëÇóÏûϢʣÓàÖØ¶¨ÏòµÄ´ÎÊý¡£
¶ÔÓÚÒ»¸öTRACE»òOPTIONSÇëÇó£¬Èç¹û°üº¬Ò»¸öMax-ForwardsÍ·Óò£¬ÄÇô½ÓÊÕ´ËÇëÇóµÄ´úÀí»òÍø¹Ø±ØÐëÄÜÔÚת·¢£¨forwarding£©´ËÇëÇó֮ǰ¼ì²éºÍ¸üÐÂMax-ForwardsÍ·ÓòÖµ¡£Èç¹û½ÓÊÕµÄֵΪ0£¬ÄÇô½ÓÊÕÕß²»ÄÜת·¢´ËÇëÇó£»¶øÊÇ£¬Ëü±ØÐë×÷Ϊ×îºóµÄ½ÓÊÕÕßÏìÓ¦¡£Èç¹û½ÓÊÕµÄMax-ForwardsÖµ±È0´ó£¬ÄÇô´Ëת·¢µÄÏûÏ¢±ØÐë°üº¬Ò»¸ö¸üÐÂÁ˵ÄMax-ForwardsÍ·Óò£¬¸üеÄÖµÊÇÔÚ½ÓÊÕʱµÄÖµÉϼõÈ¥1¡£
¶Ô±¾¹æ·¶¶¨ÒåµÄËùÓÐÆäËü·½·¨ÒÔ¼°ÈκÎûÓÐÃ÷È·×÷Ϊ·½·¨¶¨Ò岿·ÖµÄÀ©Õ¹·½·¨µÄÇëÇóÀMax-ForwardsÍ·Óò¿ÉÄܻᱻºöÂÔ¡£
14.32 Pragma
Pragma³£ÓÃÍ·Óò±»ÓÃÓÚ°üº¬Ìض¨Ö´ÐÐÖ¸ÁÕâЩָÁî¿ÉÄܱ»Ó¦ÓÃÓÚÇëÇó/ÏìÓ¦Á´ÖÐÈκνÓÊÕÕß¡£´ÓÐÒéµÄ¹ÛµãÀ´¿´£¬pragmaÖ¸ÁîÖ¸¶¨µÄÐÐΪÊÇ¿ÉÑ¡µÄ£»È»¶ø£¬Ò»Ð©ÏµÍ³¿ÉÄÜÒªÇóÐÐΪ±ØÐëÂú×ãÖ¸ÁîµÄÒªÇó¡£
Pragma = “Pragma” “:” 1#pragma-directive
pragma-directive =”no-cache” | extension-pragma
extension-pragma =token [ “=” ( token | quoted-string) ]
µ±no-cacheÖ¸Áî³öÏÖÔÚÇëÇóÏûÏ¢ÖУ¬Ó¦ÓóÌÐòÓ¦¸Ãת·¢£¨forward£©´ËÇëÇóµ½Ô´·þÎñÆ÷£¬¼´Ê¹ËüÓµÓдËÇëÇóÏìÓ¦µÄ»º´æ¸±±¾¡£pragmaÖ¸ÁîºÍno-cache»º´æ¿ØÖÆÖ¸Á¼û14.9£©ÓÃÏàͬµÄÓïÒ壬²¢ÇÒËüΪÁËͬHTTP/1.0Ïòºó¼æÈݶø¶¨ÒåµÄ¡£µ±Ò»¸öno-cacheÇëÇó·¢Ë͸øÒ»¸ö²»×ñÑHTTP/1.1µÄ·þÎñÆ÷ʱ£¬¿Í»§¶ËÓ¦¸Ã¼´°üº¬pragmaÖ¸ÁҲӦ¸Ã°üº¬no-cache»º´æ¿ØÖÆÖ¸Áî¡£
pragmaÖ¸Áî±ØÐëÄÜ´©¹ý´úÀíºÍÍø¹ØÓ¦ÓóÌÐò£¬²»¹Ü¶ÔÓÚÄÇЩӦÓóÌÐòÓÐûÓÐÒâÒå¡£ÒòΪÕâЩָÁî¿ÉÄܶÔÇëÇó/ÏìÓ¦Á´ÉϵÄËùÓнÓÊÜÕßÓÐÓᣲ»¿ÉÄÜΪһ¸öÌØ¶¨µÄ½ÓÊÕÕß¶¨ÒåÒ»¸öpragma£»È»¶ø£¬ÈκζԽÓÊÕÕß²»Ïà¹ØµÄpragmaÖ¸Áî¶¼Ó¦¸Ã±»½ÓÊÕÕߺöÂÔ¡£
HTTP/1.1»º´æÓ¦¸Ã°Ñ"Pragma£ºno_cache"µ±×÷ºÃÏñ¿Í»§¶Ë·¢ËÍÁË"cache_control:no-cache"¡£ÔÚHTTPÖв»»áÓÐеÄpragmaÖ¸Áî»á±»¶¨Òå¡£
14.33 Proxy-Authenticate
Proxy-AuthenticateÏìӦͷÓò±ØÐë±»°üº¬ÔÚ407ÏìÓ¦£¨´úÀíÊÚȨ£©Àï¡£´ËÍ·ÓòÖµÓÉÒ»¸öchallengeºÍparameters×é³É£¬challengeÖ¸Ã÷ÁËÊÚȨ·½°¸£¬¶øparametersÓ¦ÓÃÓÚ´ËÇëÇóURIµÄ´úÀí¡£
Proxy-Authenticate = "Proxy-Authenticate" ":" 1#challenge
¹ØÓÚHTTP·ÃÎÊÊÚȨ¹ý³ÌµÄÃèÊöÔÚ“HTTP Authentication£ºBasic and Digest Access Authentication”[43]ÖнéÉÜÁË¡£²»ÏñWWW-AuthenticateÍ·Óò£¬Proxy-AuthenticateÍ·ÓòÖ»ÄÜÓ¦ÓÃÓÚµ±Ç°Á¬½Ó£¬²¢ÇÒ²»Ó¦¸Ã´«µÝ¸øÏÂÐУ¨downstrem£©¿Í»§¶Ë¡£È»¶ø£¬Ò»¸öÖмä´úÀí¿ÉÄÜÐèÒª´ÓÇëÇóÏÂÐпͻ§¶Ë¶ø»ñµÃËü×Ô¼ºµÄÖ¤Ê飨credentials£©£¬ÕâÔÚһЩÇé¿öϾͺÃÏñ´úÀíÕýÔÚת·¢Proxy-AuthenticateÍ·ÓòÒ»Ñù¡£
14.34 Proxy-Authorization
Proxy-AuthorizationÇëÇóÍ·ÓòÔÊÐí¿Í»§¶ËÈÃÒ»¸öÐèÒªÊÚȨµÄ´úÀíÄܸø×Ô¼º£¨»ò¿Í»§¶ËµÄÓû§£©ÊÚȨ¡£Proxy-AuthorizationÍ·ÓòÖµÓɰüº¬Óû§´úÀíÊÚȨÐÅÏ¢µÄÖ¤Êé×é³É£¬´ËÊÚȨÐÅÏ¢ÊǹØÓÚ¶Ô´úÀíºÍ/»òÇëÇó×ÊÔ´ÓòÀ´ËµµÄ¡£
Proxy-Authorization = “Proxy-Authorization” “:” credentials
HTTP·ÃÎÊÊÚȨ¹ý³ÌÔÚ“HTTP Authentication: Basic and Digest Access Authentication”[43]ÖÐÃèÊö¡£²»ÏñAuthorizationÍ·Óò£¬Proxy-AuthorizationÍ·ÓòÖ»ÄÜÓ¦ÓÃÓÚÏÂÒ»¸öÀûÓÃProxy-AuthenticateÍ·Óò½øÐÐÊÚȨµÄÊä³ö´úÀí¡£
14.35 Range
14.35.1×Ö½Ú·¶Î§ £¨Byte Ranges£©
¼ÈÈ»ËùÓеÄHTTPʵÌå¶¼ÒÔ×Ö½ÚÐòÁÐÐÎʽµÄHTTPÏûÏ¢±íʾ£¬ÄÇô×Ö½Ú·¶Î§µÄ¸ÅÄî¶ÔÈκÎHTTPʵÌå¶¼ÊÇÓÐÒâÒåµÄ.£¨²»¹ý²¢²»ÊÇËùÓеĿͻ§ºÍ·þÎñÆ÷¶¼ÐèÒªÖ§³Ö×Ö½Ú·¶Î§²Ù×÷.¡££©
HTTPÀïµÄ×Ö½Ú·¶Î§Ó¦ÓÃÓÚʵÌåÖ÷ÌåµÄ×Ö½ÚÐòÁУ¨²»±ØºÍÏûÏ¢Ö÷ÌåÒ»Ñù£©¡£
×Ö½Ú·¶Î§²Ù×÷¿ÉÄÜ»áÔÚÒ»¸öʵÌåÀïÖ¸¶¨Ò»¸ö×Ö½Ú·¶Î§»ò¶à¸ö×Ö½Ú·¶Î§¡£
ranges-specifier = byte-ranges-specifier
byte-ranges-specifier = bytes-unit "=" byte-range-set
byte-range-set = 1#£¨ byte-range-spec | suffix-byte-range-spec £©
byte-range-spec = first-byte-pos "-" [last-byte-pos]
first-byte-pos = 1*DIGIT
last-byte-pos = 1*DIGIT
byte-range-specÀïµÄfirst-byte-posÖµ¸ø³öÁËÒ»¸ö·¶Î§ÀïµÚÒ»¸ö×Ö½ÚµÄÆ«ÒÆÁ¿.¡£last-byte-posÖµ¸ø³öÁËÕâ¸ö·¶Î§Àï×îºóÒ»¸ö×Ö½ÚµÄÆ«ÒÆÁ¿£»Ò²¾ÍÊÇ˵£¬È·¶¨µÄ×Ö½ÚλÖñØÐëÔÚʵÌåµÄ·¶Î§Ö®ÄÚ¡£×Ö½ÚÆ«ÒÆÊÇÒÔ0Ϊ»ù×¼£¨Òë×¢£º0´ú±íµÚÒ»¸ö×Ö½Ú£¬1´ú±íµÚ¶þ¸ö×Ö½Ú£©¡£
Èç¹û´æÔÚlast-byte-posÖµ£¬ÄÇôËüÒ»¶¨´óÓÚ»òµÈÓÚÄǸöbyte-range-specÀïµÄfirst-byte-pos£¬·ñÔòbyte-range-specÔھ䷨ÉÏÊÇ·Ç·¨µÄ¡£½ÓÊÕÕß½ÓÊÕµ½°üÀ¨Ò»¸ö»ò¶à¸öÎÞЧµÄbyte-range-specÖµµÄbyte-range-setʱ£¬Ëü±ØÐëºöÂÔ°üº¬ÄǸöbyte-range-setµÄÍ·Óò.¡£
Èç¹ûlast-byte-posÖµ²»´æÔÚ£¬»òÕß´óÓÚ»òµÈÓÚʵÌåÖ÷ÌåµÄµ±Ç°³¤¶È£¬ÔòÈÏΪlast-byte-posµÈÓÚµ±Ç°ÊµÌåÖ÷Ì峤¶È¼õÒ»¡£
ͨ¹ýÑ¡Ôñlast-byte-pos£¬¿Í»§Äܹ»ÏÞÖÆ»ñµÃʵÌåµÄ×Ö½ÚÊýÁ¿¶ø²»ÐèÒªÖªµÀʵÌåµÄ´óС¡£
suffix-byte-range-spec = “-“ suffix-length
suffix-length = 1*DIGIT
suffix-byte-range-specÓÃÀ´±íʾʵÌåÖ÷ÌåµÄºó׺£¬Æä³¤¶ÈÓÉsuffix-lengthÖµ¸ø³ö.¡££¨Ò²¾ÍÊÇ˵£¬ÕâÖÖÐÎʽ¹æ¶¨ÁËʵÌåÕýÎĵÄ×îºóN¸ö×Ö½Ú¡££©Èç¹ûʵÌå¶ÌÓÚÖ¸¶¨µÄsuffix-length£¬ÔòʹÓÃÕû¸öʵÌåÖ÷Ìå¡£
Èç¹ûÒ»¸ö¾ä·¨ÕýÈ·µÄbyte-range-setÖÁÉÙ°üÀ¨Ò»¸öÕâÑùµÄbyte-range-spec£¬ËüµÄfirst-byte-pos±ÈʵÌåÖ÷ÌåµÄµ±Ç°³¤¶ÈҪС£¬»òÖÁÉÙ°üÀ¨Ò»¸ösuffix-length·ÇÁãµÄ suffix-byte-range-spec£¬ÄÇôbyte-range-setÊÇ¿ÉÒÔÂú×ãµÄ£¬·ñÔòÊDz»¿ÉÂú×ãµÄ¡£Èç¹ûbyte-range-set²»ÄÜÂú×㣬ÄÇô·þÎñÆ÷Ó¦¸Ã·µ»ØÒ»¸ö416ÏìÓ¦£¨ÇëÇó·¶Î§²»ÄÜÂú×㣩¡£·ñÔò£¬·þÎñÆ÷Ó¦¸Ã·µ»ØÒ»¸ö206ÏìÓ¦£¨²¿·ÖÄÚÈÝ£©
byte-ranges-specifier£¨×Ö½Ú-·¶Î§-˵Ã÷·û£©ÖµµÄÀý×Ó£¨¼Ù¶¨ÊµÌåÖ÷ÌåµÄ³¤¶ÈΪ10000£©:
-- µÚÒ»¸ö500×Ö½Ú£¨×Ö½ÚÆ«ÒÆÁ¿0-499,°üÀ¨0ºÍ499£©: bytes=0-499
-- µÚ¶þ¸ö500×Ö½Ú£¨×Ö½ÚÆ«ÒÆÁ¿500-999,°üÀ¨500ºÍ999£©: bytes=500-999
-- ×îºó500×Ö½Ú£¨×Ö½ÚÆ«ÒÆÁ¿9500-9999,°üÀ¨9500ºÍ9999£©: bytes=-500 »ò bytes=9500-
-- ½ö½öµÚÒ»¸öºÍ×îºóÒ»¸ö×Ö½Ú£¨×Ö½Ú0ºÍ9999£©: bytes=0-0,-1
-- ¹ØÓÚµÚ¶þ¸ö500×Ö½Ú£¨×Ö½ÚÆ«ÒÆÁ¿500-999,°üÀ¨500ºÍ999£©µÄ¼¸ÖֺϷ¨µ«²»¹æ·¶µÄÐðÊö:
bytes=500-600,601-999
bytes=500-700,601-999
14.35.2·¶Î§ÇëÇó£¨Range Retrieval Requests£©
ʹÓÃÌõ¼þ»òÎÞÌõ¼þGET·½·¨¿ÉÒÔÇëÇóÒ»¸ö»ò¶à¸öʵÌåµÄ×Ö½Ú·¶Î§£¬¶ø²»ÊÇÕû¸öʵÌ壬ÕâÀûÓÃRangeÇëÇóÍ·Óò£¬ÇëÇ󷵻صĽá¹û¾ÍÊÇRangeÍ·ÓòָʾµÄÇëÇó×ÊԴʵÌåµÄ·¶Î§¡£
Range = "Range" ":" ranges-specifier
·þÎñÆ÷¿ÉÒÔºöÂÔRangeÍ·Óò¡£È»¶ø£¬.HTTP/1.1Ô´·þÎñÆ÷ºÍÖм仺´æ±¾Ó¦¸Ã¾¡¿ÉÄÜÖ§³Ö×Ö½Ú·¶Î§£¬ÒòΪRange¸ßЧµØÖ§³Ö´Ó²¿·Ö´«Êäʧ°ÜµÄ»Ö¸´£¬²¢ÇÒÖ§³Ö¸ßЧµØ´Ó´óµÄʵÌåÖлñÈ¡²¿·ÖÄÚÈÝ¡£
Èç¹û·þÎñÆ÷Ö§³ÖRangeÍ·Óò£¬²¢ÇÒÖ¸¶¨µÄ·¶Î§»ò¶à¸ö·¶Î§¶ÔʵÌåÀ´ËµÊÇÊʺϵģº
1. Èç¹ûÔÚÎÞÌõ¼þGETÇëÇóÀï³öÏÖRangeÍ·Óò£¬ÄÇôÕ⽫»á¸Ä±ä·µ»Ø½á¹û£¨Òë×¢£º±¾À´ÊÇ·µ»ØÕû¸öʵÌ壬µ«³öÏÖRangeÍ·Óòºó£¬¾Í·µ»ØÁËÒ»²¿·Ö£©Èç¹ûGETÇëÇó¼ÙÉèÔÚûÓÐRangeÍ·Óòʱ±»·þÎñÆ÷³É¹¦´¦Àí¡£»»¾ä»°Ëµ£¬·µ»ØµÄ״̬Âë²»ÊÇ200£¨ok£©¶øÊÇ206£¨²¿·ÖÏìÓ¦£©¡£
2. Èç¹ûÔÚÌõ¼þGET£¨ÇëÇóÀïÀûÓÃÁËIf-Modified-SinceºÍIf-None-MatchÖÐÈÎÒâÒ»¸ö»òËûÃÇÁ½¸ö£¬»òÕßÀûÓÃÁËIf-Unmodified-SinceºÍIf-MatchÖеÄÈÎÒâÒ»¸ö»òËûÃÇÁ½¸ö£©ÇëÇóÀï³öÏÖRangeÍ·Óò£¬ÄÇôÕ⽫¸Ä±ä·µ»ØµÄ½á¹û£¬Èç¹ûGETÇëÇó¼ÙÉèÔÚûÓÐRangeÍ·Óòʱ±»·þÎñÆ÷³É¹¦³É¹¦²¢ÇÒÌõ¼þÎªÕæ¡£µ«Ëü²»»áÓ°Ïì304£¨Ã»Óиı䣩ÏìÓ¦µÄ·µ»ØÈç¹ûÌõ¼þΪ¼Ù¡£
ijЩÇéÐÎÏ£¬³ýÁËʹÓÃRangeÍ·ÓòÍ⣬ʹÓÃIf-RangeÍ·Óò£¨¼û14.27½Ú£©¿ÉÄܸüºÏÊÊ¡£
Èç¹ûÖ§³Ö·¶Î§ÇëÇóµÄ´úÀí½ÓÊÕÁËÒ»¸ö·¶Î§ÇëÇó£¬Ëü»áת·¢£¨forward£©´ËÇëÇóµ½ÈëÁ÷£¨inbound£©·þÎñÆ÷£¬²¢ÇÒ½ÓÊÕÕû¸ö·µ»ØÊµÌ壬µ«ËüÖ»ÊÇ·µ»Ø¸ø¿Í»§µÄÇëÇóµÄ·¶Î§¡£´úÀí½«½ÓÊÕµÄÕû¸öÏìÓ¦´æ´¢µ½ËüµÄ»º´æÀïÈç¹û´ËÏìÓ¦Âú×㻺´æ·ÖÅä²ßÂÔ¡£
14.36 Referer
RefererÇëÇóÍ·Óò£¬ÎªÁ˶ԷþÎñÆ÷ÓÐÓã¬ÔÊÐí¿Í»§Ö¸¶¨Ä³×ÊÔ´µÄURI£¬¿Í»§¶Ë´Ó´Ë×ÊÔ´»ñµÃµÄÇëÇóURIµÄµØÖ·£¨RefererÍ·ÓòµÄReferer±¾Ó¦¸Ãд³ÉReferrer£¬³öÏÖÁ˱ÊÎ󣩡£RefererÇëÇóÍ·ÓòÔÊÐí·þÎñÆ÷²úÉú·µ»Øµ½×ÊÔ´µÄURIÁ´½ÓµÄÁÐ±í¡£ËüÕÕÑùÔÊÐí·þÎñÆ÷Ϊά»¤¶ø¸ú×Ù¹ýʱ»òд´íµÄÁ´½Ó¡£RefererÍ·Óò²»Äܱ»·¢ËÍÈç¹ûÇëÇóURI´ÓÒ»¸ö±¾ÉíûÓÐURIµÄ×ÊÔ´»ñµÃ£¬ÀýÈçÓû§´Ó¼üÅÌÊäÈë¡£
»ñµÃÇëÇóURIµÄ×ÊÔ´µØÖ·£¨URI£©-ΪÁË·þÎñÆ÷µÄÀûÒæ.RefererÇëÇóÍ·ÔÊÐí·þÎñÆ÷Éú³É¹ØÓÚµ½×ÊÔ´µÄ·´ÏòÁ¬½Ó£¨back-link£©µÄÁбí,ΪÁËÐËȤ,¼Ç¼,ÓÅ»¯µÄ¸ßËÙ»º´æµÈµÈ.ËüÒ²ÔÊÐí×·×Ù¹ýʱµÄ»ò´íÎóÀàÐ͵ÄÁ¬½Ó£¨link£©ÒÔ±ãά»¤.Èç¹ûÇëÇóURIÊÇ´ÓÒ»¸öûÓÐ×Ô¼ºµÄURIµÄÔ´»ñµÃµÄ,Èç´ÓʹÓÃÕß¼üÅ̵ÄÊäÈë,ÄÇôһ¶¨²»Òª·¢ËÍRefererÓò.
Referer = "Referer" ":" £¨ absoluteURI | relativeURI £©
ÀýÈç:
Referer: http://www.w3.org/hypertext/DataSources/Overview.html
Èç¹ûRefererÍ·ÓòµÄÓòÖµÊÇÏà¶ÔURI£¬ÄÇôËü½«±»½âÎöΪÏà¶ÔÓÚÇëÇóURI¡£URI²»Äܰüº¬Ò»¸öƬ¶Î¡£¼û15.1.3¹ØÓÚ°²È«µÄ¿¼ÂÇ¡£
14.37 Retry-After
Retry-AfterÏìӦͷÓòÄܱ»ÓÃÓÚÒ»¸ö503£¨·þÎñ²»¿ÉµÃ£©ÏìÓ¦£¬·þÎñÆ÷ÓÃËüÀ´ÏòÇëÇó¶ËÖ¸Ã÷·þÎñ²»¿ÉµÃµÄʱ³¤¡£´ËÍ·Óò¿ÉÄܱ»ÓÃÓÚ3xx£¨Öض¨Ïò£©ÏìÓ¦£¬·þÎñÆ÷ÓÃËüÀ´£¨Èçwebä¯ÀÀÆ÷£©Ö¸Ã÷Óû§´úÀíÔÙ´ÎÌá½»ÒÑÖØ¶¨ÏòÇëÇó֮ǰµÄ×îСµÈ´ýʱ¼ä¡£Retry-AfterÍ·ÓòÖµ¿ÉÄÜÊÇHTTP-date»òÕßÒ²¿ÉÄÜÊÇÒ»¸öÏìӦʱ¼äºóµÄÊ®½øÖÆÕûÊýÃë¡£
Retry-After = “Retry-After” “:” ( HTTP-date | delta-seconds )
ÏÂÃæÊÇËüµÄÁ½¸öÀý×Ó
Retry-After: Fri,31 Dec 1999 23:59:59 GMT
Retry-After:120
ÔÚºóÒ»Àý×ÓÖУ¬ÑÓ³Ùʱ¼äÊÇ2·ÖÖÓ¡£
14.38 Server
ServerÏìӦͷÓò°üº¬ÁËÔ´·þÎñÆ÷ÓÃÓÚ´¦ÀíÇëÇóµÄÈí¼þÐÅÏ¢¡£ ´ËÓò¿É°üº¬¶à¸ö²úÆ·±ê¼Ç£¨3.8½Ú£©£¬ÒÔ¼°¼ø±ð·þÎñÆ÷ÓëÆäËûÖØÒª×Ó²úÆ·µÄ×¢ÊÍ¡£²úÆ·±ê¼Ç°´ËüÃǵÄÖØÒªÐÔÀ´ÅÅÁУ¬²¢¼ø±ðÓ¦ÓóÌÐò¡£
Server = “Server”
Àý£º
·þÎñÆ÷£ºCERN/3.0 libwww/2.17
ÈôÏìÓ¦ÊÇͨ¹ý´úÀí·þÎñÆ÷ת·¢µÄ£¬Ôò´úÀí³ÌÐò²»µÃÐ޸ķþÎñÆ÷ÏìӦͷÓò¡£×÷ÎªÌæ´ú£¬ËüÓ¦¸Ã°üº¬Ò»¸öViaÍ·Óò£¨ÔÚ14.45½ÚÀïÃèÊö£©¡£
×¢£º½ÒÊ¾ÌØ¶¨µÄÈí¼þ°æ±¾¿ÉÄÜ»áʹ·þÎñÆ÷Ò×ÓÚÊܵ½ÄÇЩÕë¶ÔÒÑÖª°²È«Â©¶´µÄÈí¼þµÄ¹¥»÷¡£ ½¨Òé·þÎñÆ÷ʵÏÖÕß½«´ËÓò×÷Ϊ¿ÉÉèÖÃÏî¡£
14.39 TE
TEÇëÇóÍ·ÓòÖ¸Ã÷¿Í»§¶Ë¿ÉÒÔ½ÓÊÜÄÄЩ´«Êä±àÂ루transfer-coding£©µÄÏìÓ¦£¬ºÍÊÇ·ñÔ¸Òâ½ÓÊտ飨chunked£©´«Êä±àÂëÏìÓ¦µÄβ²¿£¨trailer£©£¨Òë×¢£ºTEÍ·ÓòºÍAccept-EncodingÍ·ÓòÓëContent-EncodingÍ·ÓòºÜÏàËÆ£¬µ«TEÓ¦ÓÃÓÚ´«Êä±àÂ루transfer coding£©£¬¶øContent-EncodingÓ¦ÓÃÓÚÄÚÈݱàÂ루content coding£¬¼û3.5½Ú£©£©¡£ TEÇëÇóÍ·ÓòµÄÖµ¿ÉÄÜÓɰüº¬¹Ø¼ü×Ö“trailers” ºÍ/»òÓöººÅ·Ö¸ôµÄÀ©Õ¹´«Êä±àÂëÃû£¨À©Õ¹´«Êä±àÂëÃû¿ÉÄÜ»áЯ´ø¿ÉÑ¡µÄ½ÓÊܲÎÊýµÄÁÐ±í£©£¨ÔÚ3.6½ÚÃèÊö£©×é³É¡£
TE = "TE" ":" #£¨ t-codings £©
t-codings = "trailers" | £¨ transfer-extension [ accept-params ] £©
Èç¹û³öÏֹؼü×Ö“trailers”£¬ÄÇôËüÖ¸Ã÷¿Í»§¶ËÔ¸Òâ½ÓÊÜ£¨chunked£©´«Êä±àÂëÏìÓ¦µÄβ²¿£¨trailer£©¡£ ´Ë¹Ø¼ü×ÖΪ´«Êä±àÂ루transfer-coding£©Öµ¶ø±£Áô£¬µ«Ëü±¾Éí²»´ú±íÒ»ÖÖ´«Êä±àÂë¡£
¾ÙÀý£º
TE: deflate
TE:
TE: trailers, deflate;q=0.5
TEÇëÇóÍ·Óò½öÊÊÓÃÓÚÁ¢¼´Á¬½Ó¡£ËùÒÔÎÞÂÛºÎʱ£¬Ö»ÒªÔÚHTTP/1.1ÏûÏ¢ÖдæÔÚTEÍ·Óò£¬Á¬½ÓÍ·Óò£¨Connection header filed£©£¨²Î¼û14.10½Ú£©ÖоͱØÐëÖ¸Ã÷¡£
ͨ¹ýTEÍ·Óò£¬·þÎñÆ÷ÄÜÀûÓÃÏÂÊö¹æÔòÀ´²âÊÔ´«Êä±àÂ루transfer-coding£©ÊÇ·ñÊǿɱ»¿Í»§¶Ë½ÓÊܵģº
¿é£¨chunked£©´«Êä±àÂë×ÜÊÇ¿ÉÒÔ½ÓÊܵģ¨Òë×¢£ºËùÒÔ²»ÐèÒªÔÚTEÍ·ÓòÀïÖ¸¶¨¿é£¨chunked£©´«Êä±àÂ룬ÒòΪÇëÇó¶Ë×ÜÊÇ¿ÉÒÔ½ÓÊÕ¿é´«Êä±àÂ룩¡£Èç¹ûÔÚTEÍ·ÓòÀï³öÏֹؼü×Ö“trailers”£¬ÄÇô¿Í»§¶ËÖ¸Ã÷ËüÔ¸Òâ½ÓÊܿ飨chunked£©´«Êä±àÂëÏìÓ¦ÀïµÄβ²¿£¨trailer£©¡£ÕâÒâζ×ſͻ§¶Ë»òÕßÕýÔÚÉùÃ÷ËùÓеÄÏÂÓοͻ§¶ËÔ¸Òâ½ÓÊտ飨chunked£©´«Êä±àÂëÏìÓ¦ÀïµÄβ²¿£¨trailer£©£¬»òÕßÉùÃ÷ËüÔ¸Òâ´ú±íÏÂÓνÓÊÕ¶ËÈ¥³¢ÊÔ»º´æÏìÓ¦¡£
×¢Ò⣺HTTP/1.1²¢Ã»Óж¨ÒåÈκη½·¨È¥ÏÞÖÆ¿é´«Êä±àÂëÏìÓ¦µÄ´óС£¬ÕâÊÇΪÁË·½±ã¿Í»§¶ËÄÜ»º´æÕû¸öÏìÓ¦¡£
Ö»ÒªÊdzöÏÖÔÚTEÍ·ÓòÀïµÄ´«Êä±àÂë¶¼Êǿɱ»ÇëÇó¶Ë½ÓÊܵ쬳ý·Ç´Ë´«Êä±àÂë¸úËæµÄqvalueֵΪ0£¨¸ù¾Ý3.9½ÚÖж¨Ò壬qvalueΪ0±íÃ÷ÊÇ“²»¿É½ÓÊܵĔ£¨not acceptable£©£©£©
Èç¹ûÔÚTEÍ·ÓòÀïÓÐÖ¸Ã÷¶à¸ö´«Êä±àÂëÊǿɽÓÊܵģ¬ÄÇô´«Êä±àÂ루transfer-coding£©µÄqvalueÖµ×î´óµÄÊÇ×îÈÝÒ×±»±»½ÓÊܵġ£¿é´«Êä±àÂëµÄqvalueֵΪ1¡£
Èç¹ûTEÍ·ÓòÖµÊǿյĻòÕßTEÍ·ÓòûÓгöÏÖÔÚÏûÏ¢ÀÄÇô·þÎñÆ÷Ö»ÄÜÈÏΪ¿é£¨chunked£©´«Êä±àÂëµÄÏìÓ¦ÊÇÇëÇó¶Ë¿ÉÒÔ½ÓÊܵġ£Ã»Óд«Êä±àÂëµÄÏûÏ¢×ÜÊǿɽÓÊܵġ£
14.40 Trailer
Trailer³£ÓÃÍ·ÓòÖµÖ¸Ã÷ÁËÔÚÒԿ飨chunked£©´«Êä±àÂëÏûÏ¢ÀïµÄβ²¿£¨trailer£©ÀïÓõ½µÄÍ·Óò¡£
Trailer = "Trailer" ":" 1#field-name
Ò»¸öHTTP/1.1ÏûÏ¢»á°üº¬Ò»¸öTrailerÍ·Óò£¬Èç¹ûËüÀûÓÃÁ˿飨chunked£©´«Êä±àÂë²¢ÇÒ±àÂëÀïµÄβ²¿£¨trailer£©²»Îª¿Õ¡£ÕâÑù×öÊÇΪÁËʹ½ÓÊÕ¶ËÖªµÀ¿é£¨chunked£©´«Êä±àÂëÏìÓ¦ÏûϢβ²¿£¨trailer£©ÓÐÄÄЩͷÓò¡£
Èç¹û¾ßÓп鴫Êä±àÂëµÄÏûÏ¢£¬Ã»ÓÐTrailerÍ·Óò´æÔÚ£¬Ôò´ËÏûÏ¢µÄβ²¿£¨trailer£©½«²»ÄܰüÀ¨ÈκÎÍ·Óò¡£3.6.1½ÚչʾÁ˿鴫Êä±àÂëµÄβ²¿£¨trailer£©µÄÀûÓÃÏÞÖÆ¡£
TrailerÍ·ÓòÖÐָʾµÄÏûϢͷÓò²»ÄܰüÀ¨ÏÂÃæµÄÍ·Óò£º
.Transfer-Encoding
.Content-Length
.Trailer
14.41 Transfer-Encoding
´«ÊäÒëÂ루Transfer-Encoding£©³£ÓÃÍ·ÓòָʾÁËÏûÏ¢Ö÷Ì壨message body£©µÄ±àÂëת»»£¬ÕâÊÇΪÁËʵÏÖÔÚ½ÓÊն˺ͷ¢ËͶËÖ®¼äµÄ°²È«Êý¾Ý´«Êä¡£Ëü²»Í¬ÓÚÄÚÈݱàÂ루content-coding£©£¬´«Êä´úÂëÊÇÏûÏ¢µÄÊôÐÔ£¬¶ø²»ÊÇʵÌ壨entity£©µÄÊôÐÔ¡£
Transfer-Encoding = "Transfer-Encoding" ":" 1#transfer-coding
´«Êä±àÂ루transfer-coding£©ÔÚ3.6½ÚÖб»¶¨ÒåÁË¡£Ò»¸öÀý×ÓÊÇ£º
Transfer-Encoding: chunked
Èç¹ûÒ»¸öʵÌåÓ¦ÓÃÁ˶àÖÖ´«Êä±àÂ룬´«Êä±àÂ루transfer-coding£©±ØÐëÒÔÓ¦ÓõÄ˳ÐòÁгö¡£´«Êä±àÂ루transfer-coding£©¿ÉÄÜ»áÌṩ±àÂë²ÎÊý£¨Òë×¢£º¿´´«Êä±àÂëµÄ¶¨Òå,3.6½Ú£©£¬ÕâЩ±àÂë²ÎÊý¶îÍâµÄÐÅÏ¢¿ÉÄܻᱻÆäËüʵÌåÍ·Óò£¨entity-header£©Ìṩ£¬µ«ÕⲢûÓÐÔڹ淶ÀﶨÒå¡£
Ðí¶àÀϵÄHTTP/1.1Ó¦ÓóÌÐò²»ÄÜÀí½â´«ÊäÒëÂ루Transfer-Encoding£©Í·Óò¡£
14.42 Upgrade
Upgrade³£ÓÃÍ·ÓòÔÊÐí¿Í»§¶ËÖ¸¶¨ËüÖ§³ÖʲôÑùµÄ¸½¼Ó´«ÊäÐÒ飬Èç¹û·þÎñÆ÷»áÇл»µ½UpgradeÖ¸¶¨µÄÐÒéÈç¹ûËü¾õµÃºÏÊʵϰ¡£·þÎñÆ÷±ØÐëÀûÓÃUpgradeÍ·ÓòÓÚÒ»¸ö101£¨Çл»ÐÒ飩ÏìÓ¦ÀÓÃÀ´Ö¸Ã÷½«ÄĸöÐÒé±»Çл»ÁË¡£
Upgrade = “Upgrade” “:” 1#product
ÀýÈ磬
Upgrade: HTTP/2.0£¬SHTTP/1.3, IRC/6.9, RTA/x11
UpgradeÍ·ÓòµÄÄ¿µÄÊÇΪÁËÌṩһ¸ö´ÓHTTP/1.1µ½ÆäËü²»¼æÈÝÐÒéµÄ¼òµ¥Ç¨ÒÆ»úÖÆ¡£ÕâÑù×öÊÇͨ¹ýÔÊÐí¿Í»§¶Ë֪ͨ×Ô¼ºÆÚÍûʹÓÃÁíÒ»ÖÖÐÒéÀ´ÊµÏֵģ¬ÀýÈç¸üа汾µÄHTTPÐÒ飬¼´Ê¹µ±Ç°ÇëÇóÈÔȻʹÓÃHTTP/1.1¡£Ê¹²»¼æÈÝÐÒéµÄÇ¨ÒÆ±äµÃ¼òµ¥£¬ÕâÖ»ÐèÒª¿Í»§¶ËÈ¥·¢ÆðÒ»¸ö¶¼±»Ö§³ÖµÄÐÒéµÄÇëÇ󣬲¢ÇÒÏò·þÎñÆ÷Ö¸Ã÷×Ô¼ºÏëҪʹÓøüºÃµÄÐÒéÈç¹û¿ÉÐеϰ¡£
UpgradeÍ·ÓòÖ»ÄÜÓ¦ÓÃÓÚÇл»Ó¦ÓóÌÐò²ã£¨application –layer£©ÐÒ飬ӦÓóÌÐò²ãÐÒéÔÚ´«Êä²ã£¨transport-layer£©Á¬½ÓÖ®ÉÏ¡£UpgradeÍ·Óò²¢²»Òâζ×ÅÐÒéÒ»¶¨Òª¸Ä±ä£»·þÎñÆ÷¿ÉÒÔ½ÓÊܲ¢ÇÒ¿ÉÒÔÑ¡Ôñ¡£ÔÚÐÒé¸Ä±äºóÓ¦ÓóÌÐò²ã£¨apllication-layer£©Í¨ÐŵÄÄÜÁ¦ºÍ±¾ÖÊ£¬ÍêÈ«ÒÀÀµÓÚÐÂÐÒéµÄÑ¡Ôñ£¬¾¡¹ÜÔڸıäÐÒéºóµÄµÚÒ»´Î¶¯×÷±ØÐëÊǶԳõʼHTTPÇëÇ󣨰üº¬UpgradeÍ·Óò£©µÄÏìÓ¦¡£
UpgradeÍ·ÓòÖ»ÄÜÓ¦ÓÃÓÚÁ¢¼´Á¬½Ó£¨immediate connection£©¡£Òò´Ë£¬upgrade¹Ø¼ü×Ö±ØÐë±»ÌṩÔÚConnectionÍ·ÓòÀ¼û14.10½Ú£©£¬Ö»ÒªUpgradeÍ·Óò³ÊÏÖÔÚHTTP/1.1ÏûÏ¢Àï¡£
UpgradeÍ·Óò²»Äܱ»ÓÃÀ´Ö¸¶¨Çл»µ½Ò»¸ö²»Í¬Á¬½ÓµÄÐÒ顣ΪÕâ¸öÄ¿µÄ£¬Ê¹ÓÃ301£¬302£¬303ÖØ¶¨ÏòÏìÓ¦¸üºÏÊÊ¡£
Õâ¸ö¹æ·¶¶¨ÒåÁ˱¾ÐÒéµÄÃû×ÖΪ“HTTP”£¬ËüÔÚ3.1½ÚµÄHTTP°æ±¾¹æÔòÖж¨ÒåµÄ³¬Îı¾´«ÊäÐÒé¼Ò×åÖб»Ê¹Óá£ÈκÎÒ»¸ö±ê¼Ç¶¼¿É±»ÓÃÀ´×öÐÒéÃû×Ö£¬È»¶ø£¬Ö»Óе±¿Í»§¶ËºÍ·þÎñÆ÷ÓÃÔÚͬһÐÒéÀïʹÓôËÃû×Ö²ÅÓÐÓá£
14.43 User-Agent
User-AgentÇëÇóÍ·Óò°üº¬¹ØÓÚ·¢ÆðÇëÇóµÄÓû§´úÀíµÄÐÅÏ¢¡£ÕâÊÇΪÁËͳ¼Æ£¬¸ú×ÙÐÒéÎ¥·´µÄÇé¿ö£¬ºÍΪÁËʶ±ðÓû§´úÀí´Ó¶øÎªÌض¨Óû§´úÀí×Ô¶¯¶¨ÖÆÏìÓ¦¡£Óû§´úÀíÓ¦¸Ã°üº¬User-AgentÍ·ÓòÔÚÇëÇóÖС£´ËÍ·Óò°üº¬¶à¸öʶ±ð´úÀíºÍ×Ó²úÆ·µÄ²úÆ·±ê¼Ç£¨¼û3.8½Ú£©ºÍ½âÊÍ¡£Í¨³££¬²úÆ·±ê¼Ç°´ÖØÒª³Ì¶ÈµÄ˳ÐòÅÅÁдӶøÈ¥Ö¸¶¨Ó¦ÓóÌÐò¡£
User-Agent = "User-Agent" ":" 1*£¨ product | comment £©
Àý×Ó:
User-Agent: CERN-LineMode/2.15 libwww/2.17b3
14.44 Vary
VaryÍ·ÓòÖµÖ¸¶¨ÁËһЩÇëÇóÍ·Óò£¬ÕâЩÇëÇóÍ·ÓòÓÃÀ´¾ö¶¨µ±»º´æÖдæÔÚÒ»¸öÏìÓ¦ÊDZ£ÏÊʱ»º´æÊÇ·ñ±»ÔÊÐíÈ¥ÀûÓôËÏìӦȥ»Ø¸´ºóÐøÇëÇó¶ø²»ÐèÒªÖØÑéÖ¤£¨revalidation£©¡£¶ÔÓÚÒ»¸ö²»Äܱ»»º´æ»ò³Â¾ÉµÄÏìÓ¦£¬VaryÍ·ÓòÖµÓÃÓÚ¸æËßÓû§´úÀíÑ¡Ôñ±íÏÖÐÎʽ£¨reprentation£©µÄ±ê×¼¡£Ò»¸öVaryÍ·ÓòÖµÊÇ“*”Òâζ×Å»º´æ²»ÄÜ´ÓºóÐøÇëÇóµÄÇëÇóÍ·ÓòÀ´¾ö¶¨ºÏÊʱíÏÖÐÎʽµÄÏìÓ¦¡£¼û13.6½Ú¹ØÓÚ»º´æÈçºÎÀûÓÃVaryÍ·Óò¡£
Vary = "Vary" ":" £¨ "*" | 1#field-name £©
Ò»¸öHTTP/1.1µÄ·þÎñÆ÷Ó¦¸Ã°üº¬Ò»¸öVaryÍ·ÓòÓÚÈκοɻº´æµÄÊÜÏÞÓÚ·þÎñÆ÷Çý¶¯ÐÉ̵ÄÏìÓ¦Àï¡£ÕâÑù×öÊÇÔÊÐí»º´æºÏÊʵؽâÎö¹ØÓÚÄǸö×ÊÔ´µÄ½«À´ÇëÇ󣬲¢Í¨ÖªÓû§´úÀíÄǸö×ÊÔ´µ¼ÏòµØÖ·µÄ³öÏÖ¡£Ò»¸ö·þÎñÆ÷¿ÉÄܰüº¬Ò»¸öVaryÍ·ÓòÓÚÒ»¸ö²»¿É»º´æµÄÊÜÏÞÓÚ·þÎñÆ÷Çý¶¯ÐÉ̵ÄÏìÓ¦ÀÒòΪÕâÑù×ö¿ÉÄÜΪÓû§´úÀíÌṩÓÐÓõIJ¢ÇÒÏìÓ¦¾Ý´Ë¶ø±ä»¯µÄά¶ÈÐÅÏ¢¡£
Ò»¸öVaryÍ·ÓòÖµÓÉÓòÃû£¨filed-name£©×é³É£¬ÏìÓ¦µÄ±íÏÖÐÎʽÊÇ»ùÓÚVaryÍ·ÓòÀïÁоٵÄÇëÇóÍ·ÓòÀ´Ñ¡ÔñµÄ¡£Ò»¸ö»º´æ¿ÉÄÜ»á¼ÙÉèΪ½«À´ÇëÇó½øÐÐÏàͬµÄÑ¡Ôñ£¬Èç¹ûVaryÍ·ÓòÀý¾ÙÁËÏàͬµÄÓòÃû£¬µ«±ØÐëÊÇ´ËÏìÓ¦ÔÚ´ËÆÚ¼äÊDZ£Ïʵġ£
VaryÍ·ÓòÀïµÄÓòÃû²¢²»ÊǾÖÏÞÓÚ±¾¹æ·¶ÀﶨÒåµÄ±ê×¼ÇëÇóÍ·Óò¡£ÓòÃûÊÇ´óСд²»Ãô¸ÐµÄ¡£
VaryÓòֵΪ”*”Òâζ×Ų»ÊÜÏÞÓÚÇëÇóÍ·ÓòµÄ·ÇÌØ¶¨²ÎÊýÔÚÑ¡ÔñÏìÓ¦±íÏÖÐÎʽÖÐÆð×÷Óà ¡£”*”Öµ²»Äܱ»´úÀí·þÎñÆ÷²úÉú£»Ëü¿ÉÄÜÖ»Äܱ»Ô´·þÎñÆ÷²úÉú¡£
14.45 Via
Via³£ÓÃÍ·Óò±ØÐë±»Íø¹ØºÍ´úÀíʹÓã¬ÓÃÀ´Ö¸Ã÷Óû§´úÀíºÍ·þÎñÆ÷Ö®¼ä¹ØÓÚÇëÇóµÄÖмäÐÒéºÍ½ÓÊÕÕߣ¬ºÍÔ´·þÎñÆ÷ºÍ¿Í»§¶ËÖ®¼ä¹ØÓÚÏìÓ¦µÄÖмäÐÒéºÍ½ÓÊÕÕß¡£ËüºÍRFC822[9]ÀïµÄ“Received”Í·ÓòÏàËÆ£¬²¢ÇÒËüÓÃÓÚ¸ú×ÙÏûÏ¢µÄת·¢£¬±ÜÃâÇëÇóÑ»·£¬ºÍÖ¸¶¨ÑØ×ÅÇëÇó/ÏìÓ¦Á´µÄËùÓз¢ËÍÕßµÄÐÒéÄÜÁ¦¡£
Via = "Via" ":" 1#£¨ received-protocol received-by [ comment ] £©
received-protocol = [ protocol-name "/" ] protocol-version
protocol-name = token
protocol-version = token
received-by = £¨ host [ ":" port ] £© | pseudonym
pseudonym = token
received-protocolÖ¸³öÑØ×ÅÇëÇó/ÏìÓ¦Á´Ã¿Ò»¶ÎµÄ·þÎñÆ÷»ò¿Í»§¶ËËù½ÓÊÕÏûÏ¢µÄÐÒé°æ±¾¡£protocol-version±»×·¼ÓÓÚViaÍ·ÓòÖµºóÃæ£¬µ±ÏûÏ¢±»×ª·¢Ê±¡£
Ö»ÒªÐÒéÊÇHTTP£¬ÄÇôprotocol-nameÊÇ¿ÉÓпÉÎ޵ġ£received-byÍ·Óòͨ³£ÊǽÓÊÕµÄת·¢·þÎñÆ÷µÄhost£¨Ö÷»ú£©ºÍ¿ÉÑ¡µÄport£¨¶Ë¿Ú£©ºÅ£¬»ò½ÓÊÕµÄת·¢¿Í»§¶ËµÄhost£¨Ö÷»ú£©ºÍ¿ÉÑ¡µÄport£¨¶Ë¿Ú£©ºÅ¡£È»¶ø£¬Èç¹ûÕæÊµhost£¨Ö÷»ú£©±»¿´×÷ÊÇÐÅÏ¢Ãô¸ÐµÄ£¬ÄÇô´ËÖ÷»ú¿ÉÄܻᱻ±ðÃû´úÌæ¡£Èç¹ûport£¨¶Ë¿ÚºÅ£©Ã»Óб»¸ø¶¨£¬ÄÇôËü¿ÉÄܱ»¼ÙÉèΪreceived-protocolµÄȱʡport£¨¶Ë¿Ú£©ºÅ¡£
ViaÍ·ÓòÀïÈç¹ûÓжà¸öÓòÖµ£¬Ôòÿ¸öÖµ·Ö±ð´ú±íÒ»¸öÒѾת·¢ÏûÏ¢µÄ´úÀí»òÍø¹Ø¡£Ã¿Ò»¸ö½ÓÊÕÕß±ØÐë°ÑËüµÄÐÅÏ¢×·¼Óµ½×îºó£¬ËùÒÔ×îºóµÄ½á¹ûÊǰ´ÕÕת·¢Ó¦ÓóÌÐòµÄ˳ÐòÀ´µÄ¡£
comment£¨×¢ÊÍ£©¿ÉÄܱ»ÓÃÓÚViaÍ·ÓòÊÇΪÁËÖ¸¶¨½ÓÊÕÕß´úÀí»òÍø¹ØµÄÈí¼þ£¬Õâ¸öºÃ±ÈUser-AgentºÍServerÍ·Óò¡£È»¶ø£¬ViaÍ·ÓòÀïËùÓеÄcommentÊÇ¿ÉÑ¡µÄ£¨Òë×¢£º¿ÉÓпÉÎ޵ģ©£¬²¢ÇÒ¿ÉÒÔ±»½ÓÊÕÕßÔÚת·¢ÏûÏ¢Ö®Ç°ÒÆÈ¥¡£
ÀýÈ磬ÓÐÒ»¸öÇëÇóÏûÏ¢À´×ÔÓÚÒ»¸öHTTP/1.0Óû§´úÀí£¬±»·¢Ë͵½´úºÅΪ“fred”µÄÄÚ²¿´úÀí£¬´ËÄÚ²¿´úÀíÀûÓÃHTTP/1.1ÐÒéת·¢´ËÇëÇó¸øÒ»¸öÕ¾µãΪnowhere.comµÄ¹«¹²´úÀí£¬¶ø´Ë¹«¹²´úÀíΪÁËÍê³É´ËÇëÇóͨ¹ý°ÑËüת·¢µ½Õ¾µãΪwww.ics.uci,eduµÄÔ´·þÎñÆ÷¡£±»www.ics.uci.eduÕ¾µã½ÓÊÕºóµÄÇëÇóÕâʱ¿ÉÄÜÓÐÏÂÃæµÄViaÍ·Óò£º
Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
±»ÓÃ×÷ͨÏòÍøÂç·À»ðǽµÄÈë¿ÚµÄ´úÀíºÍÍø¹ØÔÚȱʡÇé¿öϲ»Ó¦¸Ãת·¢host£¨Ö÷»ú£©µÄÃû×ֺͶ˿ڵ½·À»ðÇ½ÇøÓòÀï¡£Èç¹ûÕâЩÐÅÏ¢ÏÔʾµØÖ¸¶¨Òª±»´«ËÍ£¬ÄÇô¾ÍÓ¦¸Ã±»´«ËÍ¡£Èç¹û´ËÐÅÏ¢ÏÔʾµØÖ¸¶¨²»Äܱ»´«ËÍ£¬ÄÇôÈκδ©¹ý·À»ðǽ¶ø±»½ÓÊÕµÄhost£¨Ö÷»ú£©Ó¦¸ÃÓÃÒ»¸öºÏÊʵıðÃûÌæ»»¡£
ΪÁËÒþ²Ø×éÖ¯½á¹¹µÄÄÚ²¿½á¹¹ÐèÒª£¬Ò»¸ö´úÀí£¨proxy£©¿ÉÄÜ»áÔÚÒ»¸öViaÍ·ÓòÖаÑÏàͬreceived-protocalÖµµÄÏîºÏ³ÉÒ»¸öÏî¡£ÀýÈ磬
Via: 1.0 ricky, 1.1 ethel, 1.1 fred, 1.0 lucy
½«±»ÕÛµþ³É
Via: 1.0 ricky, 1.1 mertz, 1.0 lucy
Ó¦ÓóÌÐò²»Ó¦¸ÃºÏ²¢¶à¸öÏ³ý·ÇËûÃǶ¼ÔÚÏàͬ×éÖ¯µÄ¿ØÖÆÏ²¢ÇÒhost£¨Ö÷»ú£©ÒѾ±»±ðÃû´úÌæÁË¡£Ó¦ÓóÌÐò²»Äܺϲ¢²»Í¬received-protocaolÖµµÄÏî¡£
14.46 Warning
Warning³£ÓÃÍ·Óò±»ÓÃÓÚЯ´ø¶îÍâ¹ØÓÚÏûÏ¢µÄ״̬»ò±ä»»µÄÐÅÏ¢¶øÕâЩÐÅÏ¢ÊDz»ÄÜÔÚÏûÏ¢Àï·´Ó¦³öÀ´µÄ¡£ÕâЩÐÅϢͨ³£±»ÓÃÓÚÈ¥¾¯¸æÀ´×ÔÓÚ»º´æ²Ù×÷»òÀ´×ÔÓÚÓ¦ÓÃÓÚÏûϢʵÌåÖ÷Ìåת»»µÄ¹ØÓÚÓïÒå͸Ã÷ÐÔ£¨semantic transparency£©µÄȱÉÙ¡£
WarningÍ·Óò±»ÓÃÓÚÏìÓ¦ÀÕâÀïÓÐÈçÏÂÓï·¨£º
Warning = "Warning" ":" 1#warning-value
warning-value = warn-code SP warn-agent SP warn-text
[SP warn-date]
warn-code = 3DIGIT
warn-agent = £¨ host [ ":" port ] £© | pseudonym
; the name or pseudonym of the server adding
; the Warning header, for use in debugging
warn-text = quoted-string
warn-date = <"> HTTP-date <">
Ò»¸öÏìÓ¦¿ÉÄÜЯ´ø¶à¸öWarningÍ·Óò¡£
warn-text±ØÐëʹÓöÔÓÚ½ÓÊÕÏìÓ¦µÄÓû§À´Ëµ¾¡¿ÉÄÜÄÜÀí½âµÄ×ÔÈ»ÓïÑÔºÍ×Ö·û¼¯¡£ÕÒµ½Óû§×ÔÄÜÀí½âµÄ×ÔÈ»ÓïÑÔºÍ×Ö·û¼¯£¬±ØÐë»ùÓÚÈκοÉÄܵÄ֪ʶ£¬È绺´æ»òÓû§µÄλÖã¬ÇëÇóÀïµÄAccept-LanguageÍ·Óò£¬ÏìÓ¦ÀïµÄContent-LanguageÍ·Óò£¬µÈµÈ¡£È±Ê¡ÓïÑÔÊÇÓ¢Óȱʡ×Ö·û¼¯ÊÇISO-8859-1¡£
Èç¹û×Ö·û¼¯²»ÊÇISO-8859-1£¬ÄÇôËü±ØÐëÀûÓÃRFC2047ÀïÃèÊöµÄÀ´ÔÚwarn-textÀï½øÐбàÂë¡£
WarningÍ·ÓòÄܱ»Ó¦ÓÃÓÚÈκÎÏûÏ¢£¬È»¶ø£¬Ò»Ð©warn-codesÊÇÌØ¶¨ÓÚ»º´æµÄ£¬²¢ÇÒÄܱ»Ó¦ÓÃÓÚÏìÓ¦ÏûÏ¢¡£ÐµÄWarningÍ·ÓòÓ¦¸Ã¼ÓÔÚÈκÎÒÑ´æÔÚWarningÍ·ÓòµÄºóÃæ¡£»º´æ²»ÄÜɾ³ýÈκÎËü½ÓÊÕµÄÏûÏ¢ÀïµÄWarningÍ·Óò¡£È»¶ø£¬Èç¹ûÒ»¸ö»º´æÒªÈ¥³É¹¦ÑéÖ¤ÁËÒ»¸ö»º´æÏÄÇôËüÓ¦¸ÃÒÆ³ýÈκθ½¼ÓÔÚÄǸö»º´æÏîÒÔǰµÄWarningÍ·Óò³ýÁËÌØ¶¨ÓÚ´ËWarning codeµÄWarningÍ·Óò¡£ËüÈ»ºó±ØÐëÌí¼ÓÈκνÓÊÕµÄWarningÍ·ÓòÓÚÑéÖ¤ÏìÓ¦Àï¡£»»¾ä»°Ëµ£¬¸½¼ÓµÄ±ØÐëÊÇ×î½üµÄÏà¹ØÓÚÏìÓ¦µÄWarningÍ·Óò¡£
µ±¶à¸öWarningÍ·Óò±»¸½¼ÓÓÚÒ»¸öÏìÓ¦ÀÄÇôÓû§´úÀíÓ¦¸Ã֪ͨÓû§¾¡¿ÉÄܶàµÄ¾¯¸æ£¬²¢ÇÒÒÔËüÃdzÊÏÖÔÚÏìÓ¦ÀïµÄ˳Ðò¡£Èç¹ûÓû§´úÀí²»ÄÜ֪ͨÓû§ËùÓеľ¯¸æ£¬ÄÇôÓû§´úÀíÓ¦¸Ã°´ÕÕÏÂÃæµÄ¹æÔò£º
- Ç°ÃæµÄÏìÓ¦ÀïµÄ¾¯¸æÓÅÓÚºóÃæÏìÓ¦µÄ¾¯¸æ
- Óû§Æ«°®µÄ×Ö·û¼¯µÄ¾¯¸æÓÅÓÚÆäËü×Ö·û¼¯µÄ¾¯¸æ£¬µ«Õâ³ýÁËwarn-codesºÍwarn-agentsÒ»ÖµÄÇé¿ö¡£
²úÉú¶à¸öWarningÍ·ÓòµÄϵͳӦ¸Ãʱ¿Ì¼ÇסÀûÓÃÓû§´úÀíÐÐΪÀ´°²Åž¯¸æ¡£
¹ØÓÚ¾¯¸æµÄ»º´æÐÐΪµÄÒªÇóÔÚ13.1.2ÀïÃèÊö¡£
ÏÂÃæÊǵ±Ç°¶¨ÒåµÄwarn-codes£¬Ã¿Ò»¸öwarn-code¶¼ÓÐÒ»¸ö½¨ÒéÐÔµÄÒÔÓ¢Óï±íʾµÄwarn-text£¬ºÍËüµÄÒâ˼µÄÃèÊö¡£
110 Response is stale
ÎÞÂÛºÎʱµ±·µ»ØÏìÓ¦Êdz¾ɵÄʱºò£¬±ØÐë±»°üº¬¡£
111 Revalidation failed
Èç¹ûÒ»¸ö»º´æÒòΪ³¢ÊÔÈ¥ÖØÑéÖ¤ÏìӦʧ°Ü¶ø·µ»ØÒ»¸ö³Â¾ÉµÄÏìÓ¦£¨ÓÉÓÚ²»Äܵ½´ï·þÎñÆ÷£©£¬±ØÐë±»°üº¬¡£
112 Disconnected operation
Èç¹û»º´æÔÚÒ»¶Îʱ¼ä±»ÓÐÒâµØ¶Ï¿ªÁ¬½Ó£¬Ó¦¸Ã±»°üº¬¡£
113 Heuristic expiration
Èç¹û»º´æÌ½Ë÷ÐÔµØÑ¡ÔñÁËÒ»¸ö±£ÏÊÊÙÃü´óÓÚ24Сʱ²¢ÇÒÏìÓ¦µÄÄêÁä´óÓÚ24Сʱʱ£¬±ØÐë±»°üº¬¡£
199 Miscellaneous warning
¾¯¸æÎı¾¿ÉÄܰüº¬ÈÎÒâÐÅÏ¢³ÊÏÖ¸øÓû§¡£³ýÁ˳ÊÏÖ¸øÓû§¾¯¸æ£¬½ÓÊÕ¾¯¸æµÄϵͳ²»ÄܲÉÈ¡ÈκÎ×Ô¶¯ÐÐΪ¡£
214 Transformation applied
Èç¹ûÒ»¸öÖм仺´æ»ò´úÀí²ÉÓÃÈκζÔÏìÓ¦µÄÄÚÈݱàÂ루content-coding£©£¨ÔÚContent-EncodingÍ·ÓòÀïÖ¸¶¨£©»òýÌåÀàÐÍ£¨media-type£©£¨ÔÚContent-TypeÍ·ÓòÀïÖ¸¶¨£©µÄ¸Ä±ä±ä£¬»òÏìÓ¦µÄʵÌåÖ÷Ì壨entity-body£©µÄ¸Ã±ä£¬ÄÇô´ËÏìÓ¦Âë±ØÐë±»Öм仺´æ»ò´úÀíÌí¼Ó£¬³ý·Ç´Ë¾¯¸æÂ루warning code£©ÒѾÔÚÏìÓ¦Àï³öÏÖ¡£
299 Miscellaneous persistent warning
¾¯¸æÎı¾Ó¦¸Ã°üº¬ÈÎÒâ³ÊÏÖ¸øÓû§µÄÈÎÒâÐÅÏ¢¡£½ÓÊÕ¾¯¸æµÄϵͳ²»ÄܲÉÈ¡ÈκÎ×Ô¶¯ÐÐΪ¡£
Èç¹ûÒ»¸öʵÏÖÔÚÒ»¸öÏûÏ¢Àï·¢ËͶà¸ö°æ±¾ÊÇHTTP/1.0»ò¸üÔçµÄHTTPÐÒé°æ±¾µÄWarningÍ·Óò£¬ÄÇô·¢ËÍÕß±ØÐë°üº¬Ò»¸öºÍÏìÓ¦ÈÕÆÚ£¨date£©ÏàµÈµÄwarn-dateµ½Ã¿Ò»¸öWarningÍ·ÓòÖµÖС£
Èç¹ûÒ»¸öʵÏÖÊÕµ½Ò»Ìõwarning-valueÀï°üº¬Ò»¸öwarn-dateµÄÏûÏ¢£¬²¢ÇÒÄǸöwarn-date²»Í¬ÓÚÏìÓ¦ÀïµÄDateÖµ£¬ÄÇôwarning-value±ØÐëÔÚ±£´æ£¬×ª·¢£¬»òÀûÓÃÏûϢ֮ǰ´ÓÏûÏ¢Àïɾ³ý¡££¨Õâ»Ø·ÀÖ¹±¾µØ»º´æÈ¥»º´æWarningÍ·ÓòµÄ¶ñ¹û¡££©Èç¹ûËùÓÐwarning-valueÒòΪÕâ¸öÔÒò¶ø±»É¾³ý£¬WarningÍ·Óò±ØÐëÒ²Òª±»É¾³ý¡£
14.47 WWW-Authenticate
WWW-AuthenticateÏìӦͷÓò±ØÐë°üº¬ÔÚ401£¨Ã»Óб»ÊÚȨ£©ÏìÓ¦ÏûÏ¢ÖС£´ËÓòÖµÖÁÉÙÓ¦¸Ã°üº¬Ò»¸öcallenge£¬´ËcallengeÖ¸Ã÷ÊÚȨ·½°¸£¨Òë×¢£ºÓеĵط½·Òë³Éģʽ£©ºÍÊÊÓÃÓÚÇëÇóURIµÄ²ÎÊý¡£
WWW-Authenticate =“WWW-Authenticate” “:” 1#challenge
HTTP·ÃÎÊÊÚȨ¹ý³ÌÔÚ“HTTP Authentication: Basic and Digest Access Authentication”[43]ÀïÃèÊö¡£Óû§´úÀí±»½¨ÒéÌØ±ðСÐÄÈ¥½âÎöWWW-AuthenticateÍ·ÓòÖµ£¬µ±´ËÍ·ÓòÖµ°üº¬¶à¸öchallenge£¬»òÈç¹û¶à¸öWWW-AuthenticateÍ·Óò±»ÌṩÇÒchallengeµÄÄÚÈÝÄܰüº¬¶ººÅ·Ö¸ôµÄÊÚȨ²ÎÊýµÄʱºò¡£
15£®°²È«¿¼ÂÇ £¨Security Consideration£©
ÕâÒ»²¿·ÖÊÇÓÃÀ´ÌáÐѳÌÐò¿ª·¢ÈËÔ±£¬ÐÅÏ¢ÌṩÕߣ¬ºÍÓû§¹ØÓÚHTTP/1.1°²È«·½ÃæµÄÏÞÖÆ¡£ÌÖÂÛ²¢²»°üº¬¶ÔÅû¶ÎÊÌâµÄÃ÷È·µÄ½â¾ö°ì·¨£¬È»¶ø£¬È·¶Ô¼õÉÙ°²È«·çÏÕÌṩÁËһЩ½¨Òé¡£
15.1 ¸öÈËÐÅÏ¢ £¨Personal Information£©
HTTPµÄ¿Í»§¶Ë¾³£Òª¶Ô´óÁ¿µÄ¸öÈËÐÅÏ¢±£ÃÜ£¨ÀýÈçÓû§µÄÃû×Ö£¬Óò£¬ÓʼþµØÖ·£¬¿ÚÁÃܳ׵ȡ££©£¬²¢ÇÒÓ¦µ±·Ç³£Ð¡ÐĵطÀÖ¹ÕâЩÐÅÏ¢ÎÞÒâʶµØÍ¨¹ýHTTPÐÒéй¶µ½ÆäËûµÄ×ÊÔ´¡£ÎÒÃǷdz£Ç¿Áҵؽ¨ÒéÓ¦¸Ã¸øÓû§Ìṩһ¸ö·½±ãµÄ½çÃæÀ´¿ØÖÆÕâÖÖÐÅÏ¢µÄ´«²¥£¬²¢ÇÒÉè¼ÆÕߺÍʵÏÖÕßÔÚÕâ·½ÃæÓ¦¸ÃÌØ±ð×¢Òâ¡£ÀúÊ·¸æËßÎÒÃÇÔÚÕâ·½ÃæµÄ´íÎó¾³£ÒýÆðÑÏÖØµÄ°²È«ºÍ/»òÕßÒþ˽ÎÊÌ⣬²¢µ¼Ö¶ÔÉè¼Æ»òʵÏÖÕߵĹ«Ë¾²úÉú·Ç³£²»ÀûµÄÓ°Ïì¡£
15.1.1·þÎñÆ÷ÈÕÖ¾ÐÅÏ¢µÄÀÄÓà £¨Abuse of Server Log Information£©
·þÎñÆ÷ÊÇÓÃÀ´±£´æÓÃÀ´Ö¸¶¨Óû§¶ÁÄ£ÐÍ»ò¸ÐÐËȤÖ÷ÌâµÄÇëÇóµÄ¡£ÕâЩÐÅϢͨ³£ÏÔÈ»ÊÇÐè±£Ãܵ쬲¢ÇÒËüµÄʹÓÃÔÚijЩ¹ú¼Ò±»·¨Âɱ£»¤¡£ÀûÓÃHTTPÐÒéÌṩÊý¾ÝµÄÈËÃDZØÐë±£Ö¤ÔÚÕâЩÊý¾Ý±»Ðí¿ÉµÄÇé¿öÏ·ַ¢¡£
15.1.2Ãô¸ÐÐÅÏ¢µÄ´«Êä £¨Transfer of Sensitive Inforamtion£©
¾ÍÏñÈκÎÊý¾Ý´«ÊäÐÒéÒ»Ñù£¬HTTP²»Äܵ÷ÕûÊý¾Ý´«ÊäµÄÄÚÈÝ£¬Ò²Ã»ÓÐÈκξÑé·½·¨È¥¾ö¶¨¸ø¶¨ÇëÇó±³¾°ÀïÌØ¶¨ÐÅÏ¢µÄÃô¸ÐÐÔ¡£Òò´Ë£¬Ó¦ÓóÌÐòÓ¦¸Ã¾¡¿ÉÄÜΪ´ËÐÅÏ¢ÌṩÕßÌṩ¶Ô´ËÐÅÏ¢µÄ¿ØÖÆ¡£±³¾°ÀïÓÐËĸöÍ·ÓòÐèÒªÌá³öÀ´£¬ÕâËĸöÍ·ÓòÊÇ£ºServer£¬Via£¬Referer ºÍFrom¡£
½Ò¶·þÎñÆ÷ÌØ¶¨Èí¼þ°æ±¾¿ÉÄÜ»áʹ·þÎñÆ÷µÄ»úÆ÷¸üÈÝÒ×Êܵ½Í¨¹ýÈí¼þ°²È«Â©¶´À´½øÐй¥»÷¡£ÊµÏÖÕßÓ¦¸ÃʹServerÍ·Óò³ÉΪ¿ÉÉèÖõÄÑ¡Ïî¡£
ÓÃ×÷´©¹ýÍøÂç·À»ðǽÈë¿ÚµÄ´úÀíÓ¦¸ÃÌØ±ðСÐĹØÓÚÖ¸¶¨·À»ðǽºóµÄÖ÷»ú£¨host£©Í·ÓòÐÅÏ¢µÄ´«Êä¡£ÌØ±ðµØ£¬´úÀíÓ¦¸ÃÒÆ³ý»òÓÃɱ¶¾ºóµÄ°æ±¾Ìæ»»ÈκβúÉúÓÚ·À»ðǽ֮ºóµÄViaÍ·Óò¡£
RefererÍ·ÓòÔÊÐíѧϰµÄ¶ÁÄ£Ðͺͷ´ÏòÁ´½ÓÇ£Òý¡£ËäÈ»Ëü·Ç³£ÓÐÓ㬵«Ò²»á±»ÀÄÓÃÈç¹ûÓû§ÏêÇéûÓдӰüº¬ÔÚRefererÍ·ÓòÀïÐÅÏ¢·ÖÀ뿪À´¡£¼´Ê¹µ±¸öÈËÐÅÏ¢ÒѾ±»ÒƳýÁË£¬ÄÇôÕâ¸öRefererÍ·ÓòÒ²¿ÉÄÜÖ¸¶¨Ë½ÓеÄÎĵµURI£¬´ËÎĵµ²»ÊʺÏ×÷Ϊ¹²Óеġ£
FromÍ·ÓòÀïµÄÐÅÏ¢¿ÉÄÜ»áºÍÓû§µÄ˽ÓÐÐËȤ»òËûÃÇÕ¾µãµÄ°²È«²ßÂÔÏà³åÍ»£¬Òò´ËÕâЩÐÅÏ¢ÔÚÓû§Ê¹´ËÍ·ÓòÄÚÈÝÎÞЧ¡¢ÓÐЧºÍ¸Ä±äµÄÇé¿öϲ»Äܱ»´«Êä¡£Óû§±ØÐëÄÜÔÚÓû§µÄϲ°®»òÓ¦ÓóÌÐòµÄȱʡÉèÖ÷¶Î§ÄÚÉèÖôËÍ·ÓòµÄÄÚÈÝ¡£
ÎÒÃǽ¨Ò飬¾¡¹Ü²»ÐèÒª£¬¸øÓû§Ìṩһ¸ö·½±ãµÄ´¥·¢Æ÷À´Ê¹·¢ËÍFromºÍRefererÍ·ÓòÐÅÏ¢ÓÐЧ»òʧЧ¡£
User-Agent£¨14.4½Ú£©»òServer£¨14.38½Ú£©Í·ÓòÓÐʱºòÄܱ»ÓÃÀ´È¥È·¶¨Ò»¸öÌØ¶¨µÄ¿Í»§¶Ë»ò·þÎñÆ÷´æÔÚ°²È«Â©¶´¡£²»ÐÒµÄÊÇ£¬Í¬ÑùµÄÐÅÏ¢¾³£±»ÓÃÓÚÆäËüµÄÓмÛÖµµÄÄ¿µÄÒòΪHTTPÏÖÔÚûÓиüºÃµÄ»úÖÆ¡£
15.1.3 URIÖÐÃô¸ÐÐÅÏ¢µÄ±àÂ루Encoding Sensitive Information in URI’s£©
ÒòΪһ¸öÁ´½ÓµÄÔ´¿ÉÄÜÊÇ˽ÓÐÐÅÏ¢»òÕß¿ÉÄܽÒ¶ÆäËü˽ÓÐÐÅÏ¢×ÊÔ´£¬ËùÒÔÇ¿ÁÒ½¨ÒéÓû§ÄÜÑ¡ÔñÊÇ·ñÐèÒª·¢ËÍRefererÍ·Óò¡£ÀýÈ磬ä¯ÀÀÆ÷¿Í»§¶Ë¿ÉÄÜΪÁË¿ª·Å/ÄäÃû·½Ê½»áÓÐÒ»¸ö´¥·¢¿ª¹Ø£¬´Ë¿ª¹Ø¿ÉÄÜʹRefererÍ·ÓòºÍFromÍ·ÓòÐÅÏ¢µÄ·¢ËÍÓÐЧ/ÎÞЧ¡£
¿Í»§¶Ë²»Ó¦¸Ã°üº¬Ò»¸öRefererÍ·ÓòÔÚÒ»¸ö·Ç°²È«HTTPÇëÇóÀÈç¹û²Î¿¼Ò³ÃæÔÚÒ»¸ö°²È«µÄÐÒéÉÏ´«Êä¡£
ÀûÓÃHTTPÐÒéµÄ·þÎñ×÷Õß²»Ó¦¸ÃÀûÓûùÓÚ´°ÌåGETÌá½»Ãô¸ÐÊý¾Ý£¬ÒòΪÕâ¸öÄÜÒýÆðÊý¾ÝÔÚÇëÇóURIÀï±»±àÂë¡£Ðí¶àÒÑ´æÔڵķþÎñ£¬´úÀí£¬ºÍÓû§´úÀí½«¼Ç¼ÇëÇóURIÓÚijЩ¶ÔµÚÈý·½¿É¼ûµÄµØ·½¡£·þÎñÆ÷ÄÜÀûÓûùÓÚ´°ÌåPOSTÌá½»À´È¡´ú»ùÓÚ´°ÌåGETÌá½»¡£
15.1.4Á¬½Óµ½AcceptÍ·ÓòµÄÒþ˽ÎÊÌâ
AcceptÇëÇóÍ·ÓòÄܽÒ¶Óû§µÄÐÅÏ¢¸øËùÓб»·ÃÎʵķþÎñÆ÷¡£Accept-LanguageÍ·ÓòÄܽÒ¶Óû§µÄ˽ÓÐÐÅÏ¢£¬ÒòΪÄÜÀí½âÌØ¶¨ÓïÑÔµÄÈ˾³£±»ÈÏΪ¾ÍÊÇij¸öÌØ¶¨ÖÖ×åÀïµÄ³ÉÔ±¡£ÌṩѡÔñÉèÖÃAccept-LanguageÍ·ÓòÄÚÈÝÓÚÿ´ÎÇëÇóÀïµÄÓû§´úÀí±»Ç¿ÁÒ¹ÄÀøÈÃÉèÖùý³Ì°üº¬Ò»¸öÈÃÓû§ÖªµÀÒþ˽¶ªÊ§µÄÏûÏ¢¡£
ÏÞÖÆË½ÓÐÐÅÏ¢µÄ·½·¨¿ÉÄÜÊÇÔÚȱʡÇé¿öÏÂÈÃÓû§´úÀí²»·¢ËÍAccept-LanguageÍ·Óò£¬²¢ÇÒÈÃÓû§´úÀíѯÎÊÓû§ÊÇ·ñ·¢ËÍAccept-LanguageÍ·Óò¸ø·þÎñÆ÷Èç¹ûÓû§´úÀíͨ¹ý²é¿´ÈκÎÓÉ·þÎñÆ÷²úÉúµÄVaryÏìӦͷÓòʱ·¢ÏÖÕâ´Î·¢ËÍÄÜÌá¸ß·þÎñµÄÖÊÁ¿¡£
ÇëÇóÀïµÄÓû§ÅäÖÃÐԵĽÓÊÜÍ·ÓòÈç¹ûÕâЩ½ÓÊÜÍ·Óò£¨accept header fileds£©°üº¬ÖÊÁ¿Öµ£¬ÄÇôËûÃÇÓ¦¸Ã±»·þÎñÆ÷ÓÃ×÷Ïà¶ÔÐÅÀµºÍ³¤¾ÃµÄÓû§±êʶ·û¡£ÕâÑùµÄÓû§±êʶ·û½«»áÔÊÐíÄÚÈÝÌṩÕß½øÐÐclick-trail¸ú×ÙÒÔ¼°ÔÊÐíºÏ×÷ÄÚÈÝÌṩÕ߯¥Åä¿ç·þÎñÆ÷click-trail»òÕßÐγɵ¥¸öÓû§´°ÌåÌá½»¡£×¢Òâ¶ÔÓÚÐí¶à²¢²»ÔÚ´úÀí·þÎñÆ÷ºóÃæµÄÓû§£¬ÔËÐÐÓû§´úÀíµÄÖ÷»úµÄÍøÂçµØÖ·Ò²½«×÷Ϊ³¤¾ÃÓû§µÄ±êʶ·û¡£ÔÚ´úÀí·þÎñÆ÷±»ÓÃ×÷ÔöÇ¿Òþ˽µÄ»·¾³ÀÓû§´úÀíÔÚÌṩ¸øÖÕ¶ËÓû§½ÓÊÜ£¨accept£©Í·ÓòÅäÖÃÑ¡ÏîÉÏÓ¦¸ÃÊDZ£Êصġ£Ìṩ¸ß¶ÈÍ·ÓòÅäÖÃÄÜÁ¦µÄÓû§´úÀíÓ¦¸Ã¾¯¸æÓû§Òþ˽¿ÉÄܵĶªÊ§¡£
15.2 »ùÓÚÎļþºÍ·¾¶Ãû³ÆµÄ¹¥»÷
HTTPµÄÔ´·þÎñÆ÷µÄʵÏÖÓ¦¸ÃСÐĵØÏÞÖÆHTTPÇëÇ󷵻صÄÎĵµ¸øÄÇЩÓɹÜÀíÔ±ÊÚȨµÄÈË¡£Èç¹ûHTTP·þÎñÆ÷Òª°ÑHTTP URIs·Òë³ÉÎļþϵͳµÄµ÷Óã¬ÄÇô·þÎñÆ÷±ØÐëСÐÄÈ¥¶Ô´ýÌṩ¸øHTTP¿Í»§¶ËµÄÎļþ´«Êä¡£ÀýÈ磬UNIX£¬Î¢ÈíWindows£¬ºÍÆäËû²Ù×÷ϵͳ¶¼ÀûÓÔ..”ȥָʾµ±Ç°µÄ¸¸Ä¿Â¼¡£¶ÔÓÚÕâÒ»¸öϵͳ£¬Èç¹ûHTTP·þÎñÆ÷ÔÊÐí·ÃÎÊÒ»¸ö×ÊÔ´£¬µ«ÕâЩ×ÊԴͨ¹ýHTTP·þÎñÆ÷²»ÄÜ·ÃÎÊ£¬ÄÇôһ¸öHTTP·þÎñÆ÷±ØÐë²»ÔÊÐíÈκÎÕâÑùµÄ¹¹Ôì´æÔÚÓÚÇëÇóURI¡£Í¬ÑùµÄ£¬ÓÃ×÷·þÎñÆ÷ÄÚ²¿ÎļþµÄÒýÓõÄÎļþ£¨Èç·ÃÎÊ¿ØÖÆÎļþ£¬ÅäÖÃÎļþ£¬½Å±¾´úÂ룩±ØÐëÊܵ½±£»¤²»Èò»ºÏÊʵĻñÈ¡£¬ÒòΪËûÃÇ¿ÉÄܰüº¬Ãô¸ÐµÄÐÅÏ¢¡£¾Ñ鏿ËßÎÒÃÇÒ»¸öÔÚHTTP·þÎñÆ÷ʵÏÖÀïµÄÒ»¸öССµÄ´íÎó»á´øÀ´°²È«·çÏÕ¡£
15.3 HTTP://www.cnpaf.net/class/dns' target='_blank'>DNSÆÛÆ
ʹÓÃHTTPµÄ¿Í»§¶ËÑÏÖØÒÀÀµÓÚÓòÃû·þÎñ£¬Òò´ËÕâ»áµ¼Ö»ùÓÚIPºÍHTTP://www.cnpaf.net/class/dns' target='_blank'>DNSÃû³ÆµÄ²»¹ØÁªµÄ¹¥»÷¡£¿Í»§¶ËÐèҪСÐĹØ×¢IPµØÖ·/HTTP://www.cnpaf.net/class/dns' target='_blank'>DNSÃû³Æ¹ØÁªµÄ³Ö¾ÃºÏ·¨ÐÔ¡£
ÌØ±ðµØ£¬HTTP¿Í»§¶ËΪÁËÈ·ÈÏIPµØÖ·/HTTP://www.cnpaf.net/class/dns' target='_blank'>DNSÃû³Æ¹ØÁªÐÔ£¬Ó¦¸ÃÒÀÀµÓÚ¿Í»§¶Ë×Ô¼ºµÄµÄÃû³Æ½âÎöÆ÷£¬¶ø²»ÊÇ»º´æÒÔǰÖ÷»ú£¨host£©Ãû³Æ²éÕÒ£¨host name lookups£©½á¹û¡£Ðí¶àƽ̨ÒѾÄܱ¾µØµÄÈ¥»º´æÖ÷»úÃû³Æ²éÕÒ£¨host name lookups£©µ±ÔÚºÏÊʵÄʱºò£¬²¢ÇÒËûÃÇÓ¦¸Ã±»ÅäÖóÉÄÜÕâÑù×ö¡£È»¶ø£¬Ö»Óе±±»Ãû³Æ·þÎñÆ÷±¨¸æµÄTTL£¨Time To Live£©ÐÅϢʹ±»»º´æµÄÐÅÏ¢ÈÔÈ»ÓÐÓÃʱ£¬»º´æ²éÕÒ£¨lookups£©²ÅÊǺÏÊʵġ£
Èç¹ûHTTP¿Í»§¶ËΪÁËÌá¸ßÐÔÄÜÈ¥»º´æÖ÷»úÃû³Æ²éÕÒ£¨host name lookups£©µÄ½á¹û£¬ÄÇôËû±ØÐë¹Û²ì±»HTTP://www.cnpaf.net/class/dns' target='_blank'>DNS±¨¸æµÄTTLÐÅÏ¢¡£
Èç¹ûHTTP¿Í»§¶Ë²»ÄÜ¿´µ½ÕâÌõ¹æÔò£¬ÄÇôËûÃǾͻᱻÆÛƵ±ÒÔǰ·ÃÎʵÄIPµØÖ·¸Ä±äʱ¡£ÒòÎªÍøÂçµØÖ·µÄ¸Ä±ä±äµÃºÜƽ³££¬ËùÒÔÕâÖÖÐÎʽµÄ¹¥»÷ÔÚ²»¶ÏÔö¼Ó¡£¿´µ½Õâ¸ö¹æÔòÄܼõÉÙDZÔڵݲȫ¹¥»÷µÄ¿ÉÄÜÐÔ¡£
´ËÒªÇóÕÕÑùÄÜÌṩ¿Í»§¶Ë¸ºÔØÆ½ºâÐÐΪÒòÎªÖØ¸´µÄ·þÎñÆ÷ÄÜÀûÓÃͬһ¸öHTTP://www.cnpaf.net/class/dns' target='_blank'>DNSÃû³Æ£¬´ËÒªÇóÄܽµµÍÓû§ÔÚ·ÃÎÊÀûÓòßÂÔ£¨strategy£©µÄÕ¾µãÖеÄÌåÑéʧ°Ü¡£
15.4 LocationÍ·ÓòºÍÆÛÆ
Èç¹ûµ¥¸öµÄ·þÎñÆ÷Ö§³Ö»¥²»ÐÅÈεĶà¸ö×éÖ¯£¬ÄÇôËü±ØÐë¼ì²é×ԳƵÄij¸ö×éÖ¯¿ØÖÆÏ²úÉúÏìÓ¦ÀïLocationºÍContent-LocationÍ·ÓòÖµ£¬ÒÔÈ·ÈÏÕâЩ×é֯ûÓÐÆóͼʹËüÃÇûÓÐȨÏÞµÄ×ÊÔ´ÎÞЧ¡£
15.5 Content-DispositionµÄÎÊÌâ
RFC 1806 [35]£¬ÔÚHTTPÖо³£Ê¹ÓõÄContent-Disposition£¨¼û19.5.1½Ú£©Í·Óò¾ÍÔ´ÓÚ´ËÎĵµ£¬ÓÐÐí¶à·Ç³£ÈÏÕæµÄ°²È«¿¼ÂÇÔÚ´ËÎĵµÀï˵Ã÷¡£Content-Disposition²¢²»ÊÇHTTP±ê×¼°æ±¾ÖеÄÒ»²¿·Ö£¬µ«×Ô´ÓËü±»¹ã·ºÓ¦ÓÃÒÔÀ´£¬ÎÒÃÇÕýÔÚÖ¤Ã÷Ëü¶ÔʹÓÃÕߵļÛÖµºÍ·çÏÕ¡£Ïêϸ×ÊÁϼûRFC 2183 [49]£¨¶ÔRFC 1806µÄÉý¼¶£©¡£
15.6 ÊÚȨ֤ÊéºÍ¿ÕÏпͻ§¶Ë
ÏÖÓеÄHTTP¿Í»§¶ËºÍÓû§´úÀíͨ³£»á²»È·¶¨µØ±£ÁôÊÚȨÐÅÏ¢¡£HTTP/1.1²¢Ã»ÓÐΪ·þÎñÆ÷Ìṩһ¸ö·½·¨È÷þÎñÆ÷È¥Ö¸µ¼¿Í»§¶Ë¶ªÆúÕâЩ»º´æµÄÖ¤Ê飨credentials£©¡£ÕâÊÇÒ»¸öÖØ´óȱÏÝ£¬´ËȱÏÝÐèÒªÀ©Õ¹HTTPÐÒéÀ´½â¾ö¡£ÔÚijЩÇé¿öÏ£¬Ö¤ÊéµÄ»º´æÄܸÉÉæÓ¦ÓóÌÐòµÄ°²È«Ä£ÐÍ£¬´ËÇé¿ö°üº¬µ«²»¾ÖÏÞÓÚ£º
Ø ÕâÑùµÄ¿Í»§¶Ë¡£´Ë¿Í»§¶ËÒѾ¿ÕÏÐʱ¼ä³¬³¤²¢ÇÒ·þÎñÆ÷¿ÉÄÜÏ£ÍûÔÙ´ÎÈÿͻ§¶Ë³öʾ֤Êé¡£
Ø ÕâÑùµÄÓ¦ÓóÌÐò¡£´ËÓ¦ÓóÌÐò°üÀ¨ÁËÒ»¸ö»á»°ÖжÏÖ¸ÁÀýÈçÔÚÒ»Ò³ÉÏÓÐ"logout"»òÕß"commit"µÄ°´Å¥£©£¬ÒÀ¾Ý´ËÖ¸ÁîÓ¦ÓóÌÐòµÄ·þÎñÆ÷¶Ë“ÖªµÀ”ûÓиü¶àµÄÀíÓÉΪ¿Í»§¶Ë±£ÁôÖ¤Êé¡£
ÕâÊÇ×÷Ϊµ±Ç°µ¥¶ÀÑо¿µÄ¡£Óкܶà½â¾öÕâ¸öÎÊÌâµÄÉçÇø£¬²¢ÇÒÎÒÃǹÄÀøÔÚÆÁÄ»±£»¤³ÌÐò£¬¿ÕÏг¬Ê±£¬ºÍÆäËûÄܼõÇᰲȫÎÊÌâµÄ·½·¨ÀïÀûÓÃÃÜÂë±£»¤¡£ÌØ±ðµØ£¬ÄÜ»º´æÖ¤ÊéµÄÓû§´úÀí±»¹ÄÀøÈ¥Ìṩһ¸öÈÝÒ׵طÃÎÊ¿ØÖÆ»úÖÆÈÃÔÚÓû§µÄ¿ØÖÆÏÂÈ¥¶ªÆú»º´æµÄÖ¤Êé¡£
15.7 ´úÀíºÍ»º´æ £¨Proxies and Caching£©
±¾ÖÊÉÏ˵£¬HTTP´úÀíÊÇÖмäÈË£¨men-in-the-middle£©£¬²¢ÇÒ´æÔÚÖмäÈ˹¥»÷£¨man-in-the-middle attacks£©Î£ÏÕ¡£´úÀíÔËÐÐÔÚÆäÉÏϵͳµÄÕÛÖÐÄܵ¼ÖÂÑÏÖØµÄ°²È«ºÍÒþ˽ÎÊÌâ¡£´úÀíÓµÓжÔÏà¹Ø°²È«ÐÅÏ¢¡¢Óû§ºÍ×éÖ¯µÄ¸öÈËÐÅÏ¢¡¢ºÍÊôÓÚÓû§ºÍÄÚÈÝÌṩÕßµÄרÓÐÐÅÏ¢µÄ·ÃÎÊȨÏÞ¡£Ò»¸öÍ×еĴúÀí£¬»òÒ»¸öûÓп¼Âǰ²È«ÐÔºÍÒþ˽ÐԵĴúÀí¿ÉÄܻᱻÓÃ×ö½øÐй¥»÷µÄ´úÀí¡£
´úÀí²Ù×÷ÕßÓ¦¸Ã±£»¤´úÀíÔËÐÐÆäÉϵÄϵͳ£¬ÕýÈçËûÃDZ£»¤Èκΰüº¬»ò´«ÊäÃô¸ÐÐÅÏ¢µÄϵͳһÑù¡£ÌرðµÄ£¬´úÀíÉÏÊÕ¼¯µÄÈÕÖ¾ÐÅÏ¢¾³£°üº¬½Ï¸ßµÄ¸öÈËÃô¸ÐÐÅÏ¢£¬ºÍ/»ò¹ØÓÚ×éÖ¯µÄÐÅÏ¢¡£ÈÕÖ¾ÐÅÏ¢Ó¦¸Ã±»Ð¡Ðĵı£»¤£¬²¢ÇÒÒªºÏÊʵؿª·¢ÀûÓᣣ¨¼û15.1.1£©½Ú¡£
´úÀíµÄÉè¼ÆÕßÓ¦µ±¿¼Âǵ½Éè¼ÆºÍ±àÂëÅж¨ËùÉæ¼°µ½µÄÒþ˽ºÍ°²È«ÎÊÌ⣬ÒÔ¼°ËûÃÇÌṩ¸ø´úÀí²Ù×÷ÈËÔ±ÅäÖÃÑ¡ÏÓÈÆäÊÇȱʡÅäÖã©ËùÇ£Éæµ½µÄÒþ˽ºÍ°²È«ÎÊÌâ¡£
´úÀíµÄÓû§ÐèÒªÖªµÀËûÃÇ×Ô¼º²»±ÈÔËÐдúÀíµÄ²Ù×÷Ô±¸üÖµµÃÐÅÀµ£»HTTPÐÒé×ÔÉí²»Äܽâ¾öÕâ¸öÎÊÌâ¡£
µ±ºÏÊʵÄʱºò£¬¶ÔÃÜÂëѧµÄÕýÈ·Ó¦Ó㬿ÉÄܻᱣ»¤¹ã·ºµÄ°²È«ºÍÒþ˽¹¥»÷¡£ÃÜÂëѧµÄÌÖÂÛ²»ÔÚ±¾ÐÒéÎĵµµÄ·¶Î§ÄÚ¡£
15.7.1¹ØÓÚ´úÀíµÄ·þÎñ¹¥»÷µÄ¾Ü¾ø
´úÀíÊÇ´æÔڵġ£´úÀíºÜÄѱ»±£»¤¡£¹ØÓÚ´ËÑо¿ÕýÔÚ½øÐС£
16 ¸Ðл£¨Acknowledgment£©
Õâ·Ý¹æ·¶´óÁ¿Ê¹ÓÃÁËÀ©Õ¹BNFºÍDavidΪRFC 822 [9]¶¨ÒåµÄ³£Óýṹ¡£Í¬ÑùµÄ£¬Ëü¼ÌÐøÊ¹ÓÃÁ˺ܶàNathaniel BorenesteinºÍNed FreedΪMIME [7]ÌṩµÄ¶¨Òå¡£ÎÒÃÇÏ£ÍûÔڴ˹淶ÀïËûÃǵĽáÂÛÓÐÖúÓÚ¼õÉÙ¹ýÈ¥ÔÚHTTPºÍ»¥ÁªÍøÓʼþÏûÏ¢¸ñʽ¹ØÏµÉϵĻìÏý¡£
HTTPÐÒéÔÚÕ⼸ÄêÒѾÓÐÁËÏ൱µÄ·¢Õ¹¡£ËüÊÜÒæÓÚ´óÁ¿»ý¼«µÄ¿ª·¢ÈËÔ±µÄÉçÇø--Ðí¶àÈËÒѾͨ¹ýwww-talkÓʼþÁбí²ÎÓë½øÀ´--²¢ÇÒͨ³£¾ÍÊÇÄǸöÉçÇø¶ÔHTTPºÍÍòÎ¬ÍøµÄ³É¹¦×÷ÁËÖØ´ó¹±Ïס£ Marc Andreessen, Robert Cailliau, Daniel W. Connolly, Bob Denny, John Franks, Jean-Francois Groff , Phillip M. Hallam-Baker, Hakon W. Lie, Ari Luotonen, Rob McCool, Lou Montulli, Dave Raggett, Tony Sanders, ºÍ Marc VanHeyningenÒòΪËûÃÇÔÚ¶¨ÒåÐÒéÔçÆÚ·½ÃæµÄ¹±Ï×Ó¦¸ÃµÃµ½ÌرðµÄÔÞÓþ¡£
ÕâÆªÎĵµ´ÓËùÓÐÄÇЩ²Î¼ÓHTTP-WGµÄÈËÔ±µÄ×¢ÊÍÖлñµÃÁ˺ܴóµÄÒæ´¦¡£³ýÁËÒѾÌáµ½µÄÄÇЩÈËÒÔÍ⣬ÏÂÁÐÈËÊ¿¶ÔÕâ¸ö¹æ·¶×ö³öÁ˹±Ï×£º
Gary Adams Ross Patterson
Harald Tveit Alvestrand Albert Lunde
Keith Ball John C. Mallery
Brian Behlendorf Jean-Philippe Martin-Flatin
Paul Burchard Mitra
Maurizio Codogno David Morris
Mike Cowlishaw Gavin Nicol
Roman Czyborra Bill Perry
Michael A. Dolan Jeffrey Perry
David J. Fiander Scott Powers
Alan Freier Owen Rees
Marc Hedlund Luigi Rizzo
Greg Herlihy David Robinson
Koen Holtman Marc Salomon
Alex Hopmann Rich Salz
Bob Jernigan Allan M. Schiffman
Shel Kaphan Jim Seidman
Rohit Khare Chuck Shotton
John Klensin Eric W. Sink
Martijn Koster Simon E. Spero
Alexei Kosut Richard N. Taylor
David M. Kristol Robert S. Thau
Daniel LaLiberte Bill £¨BearHeart£© Weinman
Ben Laurie Francois Yergeau
Paul J. Leach Mary Ellen Zurko
Daniel DuBois Josh Cohen
»º´æÉè¼ÆµÄÐí¶àÄÚÈݺͽéÉÜÓ¦¹éÓÚÒÔÏÂÈËÊ¿µÄ½¨ÒéºÍ×¢ÊÍ£ºShel Kaphan, Paul Leach, Koen Holtman, David Morris, ºÍ Larry Masinter¡£
´ó²¿·Ö¹æ·¶µÄ·¶Î§ÊÇ»ùÓÚAri LuotonenºÍJohn FranksÔçÆÚ×öµÄ¹¤×÷£¬ÒÔ¼°´ÓSteve ZillesÁíÍâ¼ÓÈëµÄÄÚÈÝ¡£
¸ÐлPalo AltoµÄ"cave men"¡£ÄãÃÇÖªµÀÄãÃÇÊÇË¡£
Jim Gettys£¨ÕâÆªÎĵµÏÖÔڵıàÕߣ©ÌرðÏ£Íû¸ÐлRoy Fielding£¬ÕâÆªÎĵµÒÔǰµÄ±àÕߣ¬Á¬Í¬John Klensin, Jeff Mogul, Paul Leach, Dave Kristol, Koen Holtman, John Franks, Josh Cohen, Alex Hopmann, Scott Lawrence, ºÍLarry MasinterÒ»Æð¸ÐлËûÃǵİïÖú¡£»¹ÒªÌرð¸ÐлJeff MogulºÍScott Lawrence¶Ô“MUST/MAY/ SHOULD”ʹÓõļì²é¡£
Apache×飬Anselm Baird-Smith£¬JigsawµÄ×÷Õߣ¬ºÍHenrik FrystykÔÚÔçÆÚʵÏÖÁËRFC 2068£¬ÎÒÃÇÏ£Íû¸ÐлËûÃÇ·¢ÏÖÁËÐí¶àÕâÆªÎĵµÕý³¢ÊÔ¾ÀÕýµÄÎÊÌâ¡£
17 ²Î¿¼×ÊÁÏ £¨Reference£©
[1] Alvestrand, H., "Tags for the Identification of Languages", RFC
1766, March 1995.
[2] Anklesaria, F., McCahill, M., Lindner, P., Johnson, D., Torrey,
D. and B. Alberti, "The Internet Gopher Protocol £¨a distributed
document search and retrieval protocol£©", RFC 1436, March 1993.
[3] Berners-Lee, T., "Universal Resource Identifiers in WWW", RFC
1630, June 1994.
[4] Berners-Lee, T., Masinter, L. and M. McCahill, "Uniform Resource
Locators £¨URL£©", RFC 1738, December 1994.
[5] Berners-Lee, T. and D. Connolly, "Hypertext Markup Language -
2.0", RFC 1866, November 1995.
[6] Berners-Lee, T., Fielding, R. and H. Frystyk, "Hypertext Transfer
Protocol -- HTTP/1.0", RFC 1945, May 1996.
[7] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions £¨MIME£© Part One: Format of Internet Message Bodies",
RFC 2045, November 1996.
[8] Braden, R., "Requirements for Internet Hosts -- Communication
Layers", STD 3, RFC 1123, October 1989.
[9] Crocker, D., "Standard for The Format of HTTP://www.cnpaf.net/class/arp' target='_blank'>ARPA Internet Text
Messages", STD 11, RFC 822, August 1982.
[10] Davis, F., Kahle, B., Morris, H., Salem, J., Shen, T., Wang, R.,
Sui, J., and M. Grinbaum, "WAIS Interface Protocol Prototype
Functional Specification," £¨v1.5£©, Thinking Machines
Corporation, April 1990.
[11] Fielding, R., "Relative Uniform Resource Locators", RFC 1808,
June 1995.
[12] Horton, M. and R. Adams, "Standard for Interchange of USENET
Messages", RFC 1036, December 1987.
[13] Kantor, B. and P. Lapsley, "Network News Transfer Protocol", RFC
977, February 1986.
[14] Moore, K., "MIME £¨Multipurpose Internet Mail Extensions£© Part
Three: Message Header Extensions for Non-ASCII Text", RFC 2047,
November 1996.
[15] Nebel, E. and L. Masinter, "Form-based File Upload in HTML", RFC
1867, November 1995.
[16] Postel, J., "Simple Mail Transfer Protocol", STD 10, RFC 821,
August 1982.
[17] Postel, J., "Media Type Registration Procedure", RFC 1590,
November 1996.
[18] Postel, J. and J. Reynolds, "File Transfer Protocol", STD 9, RFC
959, October 1985.
[19] Reynolds, J. and J. Postel, "Assigned Numbers", STD 2, RFC 1700,
October 1994.
[20] Sollins, K. and L. Masinter, "Functional Requirements for
Uniform Resource Names", RFC 1737, December 1994.
[21] US-ASCII. Coded Character Set - 7-Bit American Standard Code for
Information Interchange. Standard ANSI X3.4-1986, ANSI, 1986.
[22] ISO-8859. International Standard -- Information Processing --
8-bit Single-Byte Coded Graphic Character Sets --
Part 1: Latin alphabet No. 1, ISO-8859-1:1987.
Part 2: Latin alphabet No. 2, ISO-8859-2, 1987.
Part 3: Latin alphabet No. 3, ISO-8859-3, 1988.
Part 4: Latin alphabet No. 4, ISO-8859-4, 1988.
Part 5: Latin/Cyrillic alphabet, ISO-8859-5, 1988.
Part 6: Latin/Arabic alphabet, ISO-8859-6, 1987.
Part 7: Latin/Greek alphabet, ISO-8859-7, 1987.
Part 8: Latin/Hebrew alphabet, ISO-8859-8, 1988.
Part 9: Latin alphabet No. 5, ISO-8859-9, 1990.
[23] Meyers, J. and M. Rose, "The Content-MD5 Header Field", RFC
1864, October 1995.
[24] CHTTP://www.cnpaf.net/class/arp' target='_blank'>ARPenter, B. and Y. Rekhter, "Renumbering Needs Work", RFC
1900, February 1996.
[25] Deutsch, P., "GZIP file format specification version 4.3", RFC
1952, May 1996.
[26] Venkata N. Padmanabhan, and Jeffrey C. Mogul. "Improving HTTP
Latency", Computer Networks and ISDN Systems, v. 28, pp. 25-35,
Dec. 1995. Slightly revised version of paper in Proc. 2nd
International WWW Conference '94: Mosaic and the Web, Oct. 1994,
which is available at
http://www.ncsa.uiuc.edu/SDG/IT94/Proceedings/DDay/mogul/HTTPLat
ency.html.
[27] Joe Touch, John Heidemann, and Katia Obraczka. "Analysis of HTTP
Performance", <URL: http://www.isi.edu/touch/pubs/http-perf96/>,
ISI Research Report ISI/RR-98-463, £¨original report dated Aug.
1996£©, USC/Information Sciences Institute, August 1998.
[28] Mills, D., "Network Time Protocol £¨Version 3£© Specification,
Implementation and Analysis", RFC 1305, March 1992.
[29] Deutsch, P., "DEFLATE Compressed Data Format Specification
version 1.3", RFC 1951, May 1996.
[30] S. Spero, "Analysis of HTTP Performance Problems,"
http://sunsite.unc.edu/mdma-release/http-prob.html.
[31] Deutsch, P. and J. Gailly, "ZLIB Compressed Data Format
Specification version 3.3", RFC 1950, May 1996.
[32] Franks, J., Hallam-Baker, P., Hostetler, J., Leach, P.,
Luotonen, A., Sink, E. and L. Stewart, "An Extension to HTTP:
Digest Access Authentication", RFC 2069, January 1997.
[33] Fielding, R., Gettys, J., Mogul, J., Frystyk, H. and T.
Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC
2068, January 1997.
[34] Bradner, S., "Key words for use in RFCs to Indicate Requirement
Levels", BCP 14, RFC 2119, March 1997.
[35] Troost, R. and Dorner, S., "Communicating Presentation
Information in Internet Messages: The Content-Disposition
Header", RFC 1806, June 1995.
[36] Mogul, J., Fielding, R., Gettys, J. and H. Frystyk, "Use and
Interpretation of HTTP Version Numbers", RFC 2145, May 1997.
[jg639]
[37] Palme, J., "Common Internet Message Headers", RFC 2076, February
1997. [jg640]
[38] Yergeau, F., "UTF-8, a transformation format of Unicode and
ISO-10646", RFC 2279, January 1998. [jg641]
[39] Nielsen, H.F., Gettys, J., Baird-Smith, A., Prud'hommeaux, E.,
Lie, H., and C. Lilley. "Network Performance Effects of
HTTP/1.1, CSS1, and PNG," Proceedings of ACM SIGCOMM '97, Cannes
France, September 1997.[jg642]
[40] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions £¨MIME£© Part Two: Media Types", RFC 2046, November
1996. [jg643]
[41] Alvestrand, H., "IETF Policy on Character Sets and Languages",
BCP 18, RFC 2277, January 1998. [jg644]
[42] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource
Identifiers £¨URI£©: Generic Syntax and Semantics", RFC 2396,
August 1998. [jg645]
[43] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S.,
Leach, P., Luotonen, A., Sink, E. and L. Stewart, "HTTP
Authentication: Basic and Digest Access Authentication", RFC
2617, June 1999. [jg646]
[44] Luotonen, A., "Tunneling TCP based protocols through Web proxy
servers," Work in Progress. [jg647]
[45] Palme, J. and A. Hopmann, "MIME E-mail Encapsulation of
Aggregate Documents, such as HTML £¨MHTML£©", RFC 2110, March
1997.
[46] Bradner, S., "The Internet Standards Process -- Revision 3", BCP
9, RFC 2026, October 1996.
[47] Masinter, L., "Hyper Text Coffee Pot Control Protocol
£¨HTCPCP/1.0£©", RFC 2324, 1 April 1998.
[48] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions £¨MIME£© Part Five: Conformance Criteria and Examples",
RFC 2049, November 1996.
[49] Troost, R., Dorner, S. and K. Moore, "Communicating Presentation
Information in Internet Messages: The Content-Disposition Header
Field", RFC 2183, August 1997.
18 ×÷ÕßµØÖ·
Roy T. Fielding
Information and Computer Science
University of California, Irvine
Irvine, CA 92697-3425, USA
Fax: +1 £¨949£© 824-1715
EMail: fielding@ics.uci.edu
James Gettys
World Wide Web Consortium
MIT Laboratory for Computer Science
545 Technology Square
Cambridge, MA 02139, USA
Fax: +1 £¨617£© 258 8682
EMail: jg@w3.org
Jeffrey C. Mogul
Western Research Laboratory
Compaq Computer Corporation
250 University Avenue
Palo Alto, California, 94305, USA
EMail: mogul@wrl.dec.com
Henrik Frystyk Nielsen
World Wide Web Consortium
MIT Laboratory for Computer Science
545 Technology Square
Cambridge, MA 02139, USA
Fax: +1 £¨617£© 258 8682
EMail: frystyk@w3.org
Larry Masinter
Xerox Corporation
3333 Coyote Hill Road
Palo Alto, CA 94034, USA
EMail: masinter@parc.xerox.com
Paul J. Leach
Microsoft Corporation
1 Microsoft Way
Redmond, WA 98052, USA
EMail: paulle@microsoft.com
Tim Berners-Lee
Director, World Wide Web Consortium
MIT Laboratory for Computer Science
545 Technology Square
Cambridge, MA 02139, USA
Fax: +1 £¨617£© 258 8682
EMail: timbl@w3.org
19 ¸½Â¼
19.1 »¥ÁªÍøÃ½ÌåÀàÐÍmessage/HTTPºÍapplication/HTTP
ÕâÆªÎĵµ³ýÁ˶¨ÒåHTTP/1.1ÐÒéÍ⣬»¹ÓÃ×÷»¥ÁªÍøÃ½½éÀàÐÍ"message/HTTP"ºÍ"application/HTTP"µÄ¹æ·¶¡£´ËÀàÐÍÓÃÓÚ·â×°Ò»¸öHTTPÇëÇóÏûÏ¢»òÏìÓ¦ÏûÏ¢£¬Õâ¼ÙÉè´ËÀàÐÍ×ñÑMIME¶Ô ËùÓГÏûÏ¢”ÀàÐ͹ØÓÚÐг¤¶ÈºÍ±àµÄÏÞÖÆ¡£application/HTTPÀàÐÍ¿ÉÒÔÓÃÀ´·â×°Ò»¸ö»òÕ߸ü¶àHTTPÇëÇó»òÏìÓ¦ÐÅÏ¢£¨·Ç»ìºÏµÄ£©µÄ´«Êä·¾¶£¨pipeline£©¡£ÏÂÁÐÊÇÔÚIANA[17]×¢²áµÄ¡£
ý½éÀàÐÍÃû³Æ£º message
ý½é´ÎÀàÐÍÃû³Æ£º HTTP
±ØÐë²ÎÊý£º ÎÞ
¿ÉÑ¡²ÎÊý£º °æ±¾£¬ÐÅÏ¢ÀàÐÍ
°æ±¾£º·â×°ÐÅÏ¢µÄHTTP°æ±¾ºÅ£¨ÀýÈ磬"1.1"£©¡£Èç¹û²»´æÔÚ£¬°æ±¾¿ÉÒÔ´ÓÏûÏ¢µÄµÚÒ»ÐÐÈ·¶¨¡£
ÐÅÏ¢ÀàÐÍ£ºÐÅÏ¢ÀàÐÍ--"ÇëÇó"»òÕß"ÏìÓ¦"¡£Èç¹û²»´æÔÚ£¬ÀàÐÍ¿ÉÒÔ´Ó±¨ÎĵĵÚÒ»ÐÐÈ·¶¨¡£
±àÂ뿼ÂÇ£ºÖ»ÓÐ"7bit"£¬"8bit"£¬»òÕß"¶þ½øÖÆ"ÊÇÔÊÐíµÄ¡£
°²È«¿¼ÂÇ£ºÎÞ
ý½éÀàÐÍÃû³Æ£º application
ý½é´ÎÀàÐÍÃû³Æ£º HTTP
±ØÐë²ÎÊý£º ÎÞ
¿ÉÑ¡²ÎÊý£º °æ±¾£¬ÐÅÏ¢ÀàÐÍ
°æ±¾£º·â×°ÐÅÏ¢µÄHTTP°æ±¾ºÅ£¨ÀýÈ磬"1.1"£©¡£Èç¹û²»´æÔÚ£¬°æ±¾¿ÉÒÔ´Ó±¨ÎĵĵÚÒ»ÐÐÈ·¶¨¡£
ÐÅÏ¢ÀàÐÍ£ºÐÅÏ¢ÀàÐÍ--"request"»òÕß"response"¡£Èç¹û²»´æÔÚ£¬ÀàÐÍ¿ÉÒÔ´Ó±¨ÎĵĵÚÒ»ÐÐÈ·¶¨¡£
±àÂ뿼ÂÇ£ºÓÃÕâÖÖÀàÐÍ·â×°µÄHTTPÐÅÏ¢ÊÇ"¶þ½øÖÆ"µÄ¸ñʽ£»µ±Í¨¹ýE-mail´«µÝµÄʱºòÒ»ÖÖºÏÊʵÄÄÚÈÝ´«Êä±àÂëÊDZØÐëµÄ¡£
°²È«¿¼ÂÇ£ºÎÞ
19.2 »¥ÁªÍøÃ½ÌåÀàÐÍmultipart/byteranges
µ±Ò»¸öHTTP206£¨²¿·ÖÄÚÈÝ£©ÏìÓ¦ÐÅÏ¢°üº¬¶à¸ö·¶Î§µÄÄÚÈÝ£¨ÇëÇóÏìÓ¦µÄÄÚÈÝÓжà¸ö·ÇÖØµþµÄ·¶Î§£©£¬ÕâЩÊÇ×÷Ϊһ¸ö¶à²¿·ÖÏûÏ¢Ö÷ÌåÀ´±»´«Ë͵ġ£ÕâÖÖÓÃ;µÄýÌåÀàÐͱ»³Æ×÷"multipart/byteranges"¡£
multipart/byterangesýÌåÀàÐͰüÀ¨Á½¸ö»òÕ߸ü¶àµÄ²¿·Ö£¬Ã¿Ò»¸ö¶¼ÓÐ×Ô¼ºContent-typeºÍContent-RangeÍ·Óò¡£±ØÐèµÄ·Ö½ç²ÎÊý£¨boundary parameter£©Ö¸¶¨·Ö½ç×Ö·û´®£¬´Ë·Ö½ç×Ö·û´®ÓÃÀ´¸ôÀëÿһ²¿·Ö¡£
ý½éÀàÐÍÃû³Æ£º multipart
ý½é´ÎÀàÐÍÃû³Æ£º byteranges
±ØÐë²ÎÊý£º boundary
¿ÉÑ¡²ÎÊý£º ÎÞ
±àÂ뿼ÂÇ£ºÖ»ÓÐ"7bit"£¬"8bit"£¬»òÕß"¶þ½øÖÆ"ÊÇÔÊÐíµÄ¡£
°²È«¿¼ÂÇ£ºÎÞ
ÀýÈ磺
HTTP/1.1 206 Partial Content
Date: Wed, 15 Nov 1995 06:25:24 GMT
Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
Content-type:multipart/byteranges;boundary=THIS_STRING_SEPARATES
--THIS_STRING_SEPARATES
Content-type: application/pdf
Content-range: bytes 500-999/8000
...µÚÒ»²¿·Ö...
--THIS_STRING_SEPARATES
Content-type: application/pdf
Content-range: bytes 7000-7999/8000
...µÚ¶þ²¿·Ö
--THIS_STRING_SEPARATES--
×¢Ò⣺
ÔÚʵÌ壨entity£©ÖУ¬ÔÚµÚÒ»¸ö·Ö½ç×Ö·û´®Ö®Ç°¿ÉÒÔÓжàÓàµÄCRLFs¡£
ËäÈ»RFC 2046 [40]ÔÊÐí·Ö½ç×Ö·û´®¼ÓÒýºÅ£¬µ«ÊÇһЩÏÖÓеÄʵÏֻ᲻ÕýÈ·µÄ´¦Àí·Ö½ç×Ö·û´®
Ðí¶àä¯ÀÀÆ÷ºÍ·þÎñÆ÷Êǰ´ÕÕ×Ö½Ú·¶Î§±ê×¼µÄÔçÆÚ²Ý°¸¹ØÓÚʹÓÃmultipart/x-byterangesýÌåÀàÐÍÀ´½øÐбàÂëµÄµÄ£¬Õâ¸ö²Ý°¸²»×ÜÊÇÍêÈ«ºÍHTTP/1.1ÖÐÃèÊöµÄ°æ±¾¼æÈÝ¡£
19.3 ¿íËɵÄÓ¦ÓóÌÐò £¨Tolerent Applications£©
ËäÈ»ÕâÆªÎĵµÁгöÁËHTTP/1.1ÏûÏ¢Ëù±ØÐëµÄÔªËØ£¬µ«ÊDz¢²»ÊÇËùÓеijÌÐòÔÚʵÏÖµÄʱºò¶¼ÊÇÕýÈ·µÄ¡£Òò´ËÎÒÃǽ¨Ò鵱ƫ²î¿ÉÒÔÃ÷È·½âÊ͵Äʱºò£¬ÔËËã³ÌÐò¶ÔÕâÖÖÆ«²îÓ¦¸ÃÊÇ¿íÈݵġ£
¿Í»§¶ËÓ¦¸Ã¿íËɵĽâÎöStatus-Line£¨×´Ì¬ÐУ©£»·þÎñÆ÷Ò²Ó¦¸Ã¿íËɵĽâÎöRequest-Line£¨ÇëÇóÐУ©¡£ÌرðµÄ£¬ËûÃÇÓ¦¸Ã¿ÉÒÔ½ÓÊÜÍ·ÓòÖ®¼äÈκÎÊýÁ¿µÄSP»òHT×Ö·û£¬¼´Ê¹ÐÒ鹿¶¨Ö»ÓÐÒ»¸öSP¡£
ÏûϢͷÓòµÄÐÐÖÕ½á·ûÊÇCRLF¡£È»¶ø£¬µ±½âÎöÕâÑùµÄÍ·Óòʱ£¬ÎÒÃǽ¨ÒéÓ¦ÓóÌÐòÄÜʶ±ðµ¥Ò»LF×÷ΪÐÐÖÕ½á·û²¢ÄܺöÂÔCR¡£
ʵÌåÖ÷Ì壨entity-body£©µÄ×Ö·û¼¯Ó¦¸Ã±»±ê¼ÇΪӦÓÃÓÚʵÌåÖ÷Ìå×Ö·û±àÂëµÄ×îС¹«·Öĸ£¬²¢ÇÒÆÚÍû²»¶ÔʵÌå½øÐбê¼ÇÒªÓÅÓÚ¶ÔʵÌå±ê¼ÇΪUS-ASCII»òISO-8859-1¡£¼û3.7.1ºÍ3.4.1¡£
¶Ô¹ØÓÚÈÕÆÚ·ÖÎöºÍ±àÂëµÄÒªÇóµÄ¶îÍâ¹æÔòÒÔ¼°ÆäËü¶ÔÈÕÆÚ±àÂëµÄDZÔÚÎÊÌâ°üº¬£º
Ø HTTP/1.1¿Í»§¶ËºÍ»º´æÓ¦¸Ã¼Ù¶¨Ò»¸öËÆºõÊÇ50¶àÄêÒÔºóµÄRFC-850ÈÕÆÚʵ¼ÊÉÏÊǹýÈ¥µÄ£¨ÕâÓÐÖúÓÚ½â¾ö"2000Äê"ÎÊÌ⣩¡£
Ø Ò»¸öHTTP/1.1µÄʵÏÖ¿ÉÒÔÄÚ²¿µØ±íʾһ¸ö±ÈÕýÈ·ÈÕÆÚÖµ¸üÔçµÄÒѽâÎöºóµÄExpiresÈÕÆÚ£¬µ«ÊÇÒ»¶¨²»Òª£¨MUST NOT£©ÄÚ²¿µØ±íʾһ¸ö±ÈÕýÈ·ÈÕÆÚÖµ¸ü³ÙµÄÒѽâÎö¹ýµÄExpiresÈÕÆÚ¡£
Ø ËùÓйýÆÚÈÕÆÚÏà¹ØµÄ¼ÆËã±ØÐëÓÃGMTʱ¼ä¡£±¾µØÊ±ÇøÒ»¶¨²»ÄÜ£¨MUST NOT£©Ó°ÏìÄêÁä»ò¹ýÆÚʱ¼äµÄ¼ÆËã¡£
Ø Èç¹ûÒ»¸öHTTPÍ·Óò²»ÕýÈ·µÄЯ´øÁËÒ»¸ö·ÇGMTʱ¼äÇøµÄÈÕÆÚÖµ£¬ÄÇô±ØÐëÀûÓÃ×î±£ÊØµÄ¿ÉÄÜת»»°Ñ´ËÈÕÆÚֵת»»³ÉGMTʱ¼äÖµ¡£
19.4 HTTPʵÌåºÍRFC 2045ʵÌåÖ®¼äµÄÇø±ð
HTTP/1.1ʹÓÃÁËÐí¶àInternet Mail£¨RFC 822 [9]£©ºÍMultipurpose Internet Mail Extensions£¨MIME [7]£©ÀﶨÒåµÄ½á¹¹£¬È¥ÔÊÐíʵÌåÒÔ¶àÖÖ±íÏÖÐÎʽºÍÀ©Õ¹»úÖÆÈ¥´«Ê䡣Ȼ¶ø£¬RFC2045ÌÖÂÛÓʼþ£¬²¢ÇÒHTTPÓÐÐí¶à²»Í¬ÓÚRFC2045ÀïÃèÊöµÄÌØÕ÷¡£ÕâЩ²»Í¬±»Ð¡ÐĵØÌôÑ¡³öÀ´ÓÅ»¯¶þ½øÖÆÁ¬½ÓµÄÐÔÄÜ£¬ÎªÁËÔÊÐíʹÓÃеÄýÌåÀàÐÍÓиü´óµÄÁé»îÐÔ£¬ÎªÁËʹʱ¼ä±È½Ï±äµÃÈÝÒ×£¬ºÍΪÁ˳ÐÈÏһЩÔçÆÚHTTP·þÎñÆ÷ºÍ¿Í»§¶ËµÄʵЧ¡£
±¾¸½Â¼ÃèÊöÁËHTTPÐÒ鲻ͬÓÚRFC 2045µÄÌØÊâÇøÓò¡£ÔÚÑϸñµÄMIME»·¾³ÖеĴúÀíºÍÍø¹ØÓ¦¸ÃÒâʶµ½ÕâЩ²»Í¬²¢ÇÒÔÚ±ØÒªµÄʱºòÒªÌṩºÏÊʵØ×ª»»¡£´ÓMIME»·¾³µ½HTTPµÄ´úÀí·þÎñÆ÷ºÍÍø¹ØÒ²ÐèÒªÒâʶµ½ÕâЩ²»Í¬ÒòΪһЩת»»¿ÉÄÜÊÇÐèÒªµÄ¡£
19.4.1 MIME°æ±¾£¨MIME-Version£©
HTTP²»ÊÇÒ»¸ö×ñÊØMIMEµÄÐÒ顣Ȼ¶øHTTP/1.1ÏûÏ¢¿ÉÒÔ£¨MAY£©°üº¬Ò»¸öµ¥¶ÀµÄMIME-Version³£ÓÃÍ·ÓòÓÃÀ´Ö¸³öʲôÑùµÄMIMEÐÒé°æ±¾±»ÓÃÓÚÈ¥¹¹ÔìÏûÏ¢¡£ÀûÓÃMIME-VersionÍ·ÓòÖ¸Ã÷ÍêÈ«×ñÑMIMEÐÒéµÄÏûÏ¢£¨ÔÚRFC2045[7]£©¡£´úÀí/Íø¹ØÒª±£Ö¤ÍêÈ«×ñÊØMIMEÐÒéµ±°ÑHTTPÏûÏ¢Êä³öµ½ÑϸñMIME»·¾³µÄʱºò¡£
MIME-Version = "MIME-Version" ":" 1*DIGIT "." 1*DIGIT
ÔÚHTTP/1.1ÓõÄȱʡֵÊÇMIME1.0°æ±¾¡£È»¶ø£¬HTTP/1.1ÏûÏ¢µÄ½âÎöºÍÓïÒåÊÇÓɱ¾Îĵµ¶ø²»ÊÇMIME¹æ·¶¶¨ÒåµÄ¡£
19.4.2ת»»µ½¹æ·¶»¯ÐÎʽ £¨Conversion to Canoical Form£©
RFC 2045 [7]ÐèÒªÒ»¸öInternet mailʵÌåÔÚ±»´«Êä֮ǰҪ±»×ª»»³ÉÒ»¸ö¹æ·¶»¯µÄÐÎʽ£¬ÕâÔÚRFC2049[48]ÀïµÚËÄÕÂÀïÃèÊöµÄ¡£ÕâÆªÎĵµµÄ3.7.1½ÚÃèÊöÁ˵±ÓÃHTTPÐÒé´«ÊäʱÔÊÐíʹÓõĔtext”×ÓýÌåÀàÐ͵ÄÐÎʽ¡£RFC2046ÒªÇóÒÔÀàÐÍΪ“text”µÄÄÚÈÝÒªÓÃCRLF±íʾΪ»»Ðзû£¬ÒÔ¼°ÔÚ»»ÐзûÍâ½ûֹʹÓÃCR»òLF¡£
RFC 2046ÐèÒªÏñÔÚ"text"ÀàÐ͵ÄÄÚÈÝÀïÒ»Ñù£¬ÓÃCRLF±íʾÐмä¸ô·û²¢½ûÖ¹ÔÚÐмä¸ô·ûÐòÁÐÒÔÍâʹÓÃCR»òÕßLF¡£HTTPÔÊÐíCRLF£¬µ¥¸öCR£¬ºÍµ¥¸öLFÀ´±íʾһ¸ö»»ÐзûÔÚÒ»¸öÎı¾ÄÚÈÝÏûÏ¢ÖС£
ÔÚ¿ÉÄܵĵط½£¬´ÓHTTPµ½ÑϸñMIME»·¾³µÄ´úÀí»òÍø¹ØÓ¦¸Ã£¨SHOULD£©°ÑRFC2049ÀïÃèÊöµÄtextýÌåÀàÐÍÀïËùÓл»Ðзûת»»³ÉRFC2049ÀïCRLFµÄ¹æ·¶ÐÎʽ¡£È»¶ø£¬×¢ÒâÕâ¿ÉÄÜÔÚContent-Encoding³öÏÖµÄʱºò£¬ÒÔ¼°HTTPÔÊÐíÀûÓÃһЩûÓÐÀûÓÃ13ºÍ10´ú±íCRºÍLFµÄ×Ö·û¼¯Ê±ºò¶¼»á±äµÃ¸´ÔÓ¡£
ʵÏÖÕßÓ¦¸Ã×¢Òâת»»½«»áÆÆ»µÈκÎÓ¦ÓÃÓÚÔ´ÄÚÈÝ£¨original content£©µÄÃÜÂëУÑéºÍ£¬³ý·ÇÔ´ÄÚÈÝÒѾÊǹ淶»¯ÐÎʽ¡£Òò´Ë£¬¶ÔÈκÎÔÚHTTPÖÐʹÓÃУÑéºÍµÄÄÚÈݱ»½¨ÒéÒª±íʾΪ¹æ·¶»¯ÐÎʽ¡£
19.4.3ÈÕÆÚ¸ñʽµÄת»» £¨Conversion of Date Formate£©
ΪÁ˼ò»¯ÈÕÆÚ±È½ÏµÄ¹ý³Ì£¬HTTP/1.1ʹÓÃÁËÒ»¸öÏÞÖÆµÄÈÕÆÚ¸ñʽ£¨3.3.1½Ú£©¡£ÆäËüÐÒéµÄ´úÀíºÍÍø¹ØÓ¦¸Ã±£Ö¤ÈκÎÏûÏ¢Àï³öÏÖµÄDateÍ·ÓòÓ¦¸Ã×ñÑHTTP/1.1¹æ¶¨µÄ¸ñʽ£¬Èç¹ûÓбØÒªÐèÒªÖØÐ´´ËÈÕÆÚ¡£
19.4.4 Content-EncodingÍ·Óò½éÉÜ £¨Introduction of Content-Encoding£©
RFC 2045²»°üº¬ÈκεȼÛÓÚHTTP/1.1ÀïContent-EncodingÍ·ÓòµÄ¸ÅÄî¡£ÒòΪÕâ¸öÍ·Óò×÷ΪýÌåÀàÐÍ£¨media type£©µÄÐÞÊΣ¬´ÓHTTPÐÒéµ½MIME×ñÊØµÄÐÒéµÄ´úÀíºÍÍø¹ØÔÚת·¢ÏûϢ֮ǰ±ØÐë¼ÈÄܸıäContent-TypeÍ·ÓòµÄÖµ£¬Ò²ÄܽâÂëʵÌåÖ÷Ì壨entity-body£©.¡££¨Ò»Ð©ÎªInternet mailÀàÐ͵ÄContent-TypeµÄʵÑéÐÔµÄÓ¦ÓÃÒѾʹÓÃÁËÒ»¸öýÌåÀàÐͲÎÊý“; conversions=<content-coding>”È¥Ö´ÐеȼÛÓÚContent-EncodingµÄ¹¦ÄÜ¡£È»¶ø£¬´Ë²ÎÊý²¢²»ÊÇRFC2045µÄ²¿·Ö£©
19.4.5ûÓÐContent-Transfer-EncodingÍ·Óò
HTTP²»Ê¹ÓÃRFC 2045ÀïµÄContent-Transfer-Encoding£¨CTE£©Í·Óò¡£´ÓʹÓÃMIMEÐÒéµ½HTTPµÄ´úÀíºÍÍø¹ØÔÚ°ÑÏìÓ¦ÏûÏ¢·¢Ë͸øHTTP¿Í»§¶Ë֮ǰ±ØÐëɾ³ýÈκηǵȼۣ¨non-identity£¬Òë×¢£ºidentity±àÂ룬±íʾûÓнøÐÐÈκαàÂ룩CTE£¨"quoted-printable"»ò"base64"£©±àÂë¡£
´ÓHTTPµ½MIMEÐÒé×ñѵĴúÀíºÍÍø¹ØÒªÈ·±£ÏûÏ¢ÔÚÄǸöÐÒ鰲ȫ´«ÊäÉÏÊÇÓÃÕýÈ·µÄ¸ñʽºÍÕýÈ·µÄ±àÂ룬“°²È«´«Êä”ÊÇͨ¹ýʹÓõÄÐÒéµÄÏÞÖÆ¶ø±»¶¨ÒåµÄ¡£ÕâÑùÒ»¸ö´úÀí»òÍø¹ØÓ¦¸ÃÓúÏÊʵÄContent-Transfer-EncodingÍ·ÓòÀ´±ê¼ÇÊý¾ÝÈç¹ûÕâÑù×ö½«Ìá¸ß°²È«´«ÊäµÄ¿ÉÄÜÐÔ¡£
19.4.6 Transfer-EncodingÍ·ÓòµÄ½éÉÜ
HTTP/1.1½éÉÜÁËTransfer-EncodingÍ·Óò£¨14.41½Ú£©¡£´úÀí/Íø¹ØÔÚת·¢¾ÓÉMIMEÐÒéµÄÏûϢ֮ǰ±ØÐëÒÆ³ýÈκδ«Êä±àÂë¡£
Ò»¸ö½âÂë"chunked"´«Êä´úÂ루3.6½Ú£©µÄ³ÌÐò¿ÉÒÔÓôúÂë±íʾÈçÏ£º
length := 0
read chunk-size, chunk-extension £¨if any£© and CRLF
while £¨chunk-size > 0£© {
read chunk-data and CRLF
append chunk-data to entity-body
length := length + chunk-size
read chunk-size and CRLF
}
read entity-header
while £¨entity-header not empty£© {
append entity-header to existing header fields
read entity-header
}
Content-Length := length
Remove "chunked" from Transfer-Encoding
19.4.7 MHTMLºÍÐ㤶ÈÏÞÖÆ
ºÍMHTMLʵÏÖ¹²Ïí´úÂëµÄHTTPʵÏÖÐèÒªÁ˽âMIMEÐ㤶ÈÏÞÖÆ¡£ÒòΪHTTPûÓÐÕâ¸öÏÞÖÆ£¬HTTP²¢²»ÕÛµþ³¤ÐС£ÓÃHTTP´«ÊäµÄMHTMLÏûÏ¢×ñÊØËùÓÐMHTMLµÄ¹æ¶¨£¬°üÀ¨Ðг¤¶ÈµÄÏÞÖÆºÍÕÛµþ£¬¹æ·¶»¯µÈ£¬ÒòΪHTTP´«ÊäËùÓÐÏûÏ¢Ö÷Ì壨¼û3.7.2£©²¢ÇÒ²»½âÎöÏûÏ¢µÄÄÚÈݺÍÏûÏ¢Öаüº¬ÈκÎMIMEÍ·Óò¡£
19.5 ÆäËüÌØÕ÷
RFC 1945ºÍRFC 2068ÀïһЩÐÒéÔªËØ±»Ò»Ð©ÒѾ´æÔÚµÄHTTPʵÏÖʹÓ㬵«ÊÇÕâЩÐÒéÔªËØ¶ÔÓÚ´ó¶àÊýHTTP/1.1Ó¦ÓóÌÐò¼È²»¼æÈÝÒ²²»ÕýÈ·¡£ÊµÏÖÕß±»½¨ÒéÈ¥Á˽âÕâÐ©ÌØÕ÷£¬µ«ÊDz»ÄÜÒÀÀµÓÚËüÃǵijöÏÖ»ò²»ÒÀÀµÓÚÓëÆäËüHTTP/1.1Ó¦ÓóÌÐòµÄ»¥²Ù×÷ÐÔ¡£ÕâÐ©ÌØÕ÷ÖеÄÒ»Ð©ÌØÕ÷ÃèÊöÁËʵÑéÐÔµÄÌØÕ÷£¬ÒÔ¼°»¹ÓÐÒ»Ð©ÌØÕ÷ÃèÊöÁËûÓÐÔÚ»ù±¾HTTP/1.1¹æ·¶Àï±»ÃèÊöµÄʵÑéÐÔ²¿ÊðÌØÕ÷¡£
һЩÆäËüÍ·Óò£¬ÈçContent-DispositonºÍTitleÍ·Óò£¬ËûÃÇÀ´×ÔÓÚHTTP://www.cnpaf.net/class/smtp' target='_blank'>SMTPºÍMIMEÐÒ飬ËûÃÇͬÑù¾³£±»ÊµÏÖ£¨¼û2076[37]£©.
19.5.1 Content-Disposition
Content-DispositionÏìӦͷÓò±»½¨Òé×÷Ϊһ¸öÕâÑùµÄÓÃ;£¬ÄǾÍÊÇÈç¹ûÓû§ÇëÇóҪʹÄÚÈݱ»±£´æÎªÒ»¸öÎļþ£¬ÄÇô´ËÍ·Óò±»Ô´·þÎñÆ÷ʹÓÃÈ¥½¨ÒéµÄÒ»¸öȱʡµÄÎļþÃû¡£´ËÓÃ;À´×ÔÓÚRFC1806[35]¹ØÓÚ¶ÔContent-DispositionµÄ¶¨Òå¡£
content-disposition = "Content-Disposition" ":"
disposition-type *£¨ ";" disposition-parm £©
disposition-type = "attachment" | disp-extension-token
disposition-parm = filename-parm | disp-extension-parm
filename-parm = "filename" "=" quoted-string
disp-extension-token = token
disp-extension-parm = token "=" £¨ token | quoted-string £©
Ò»¸öÀý×ÓÊÇ£º
Content-Disposition: attachment; filename="fname.ext"
½ÓÊÕÓû§µÄ´úÀí²»Ó¦¸Ã£¨SHOULD NOT£©¹Ø×¢ÈκÎÔÚfilename-parm²ÎÊýÖгöÏÖµÄÎļþ·¾¶ÐÅÏ¢£¬Õâ¸ö²ÎÊý±»ÈÏΪÔÚÕâ´Î½ö½öÊÇÓ¦ÓÃÓÚHTTPʵÏÖ¡£ÎļþÃûÓ¦¸Ã£¨SHOULD£©Ö»±»µ±×÷Ò»¸öÖÕ¶Ë×é¼þ¡£
Èç¹û´ËÍ·ÓòÓÃÓÚÒ»¸öContent-TypeΪapplication/octet-streamÏìÓ¦ÀÄÇôº¬Òå¾ÍÊÇÓû§´úÀí²»Ó¦¸ÃÕ¹ÏÖÏìÓ¦£¬µ«ÊÇËüÓ¦¸ÃÖ±½Ó½øÈëÒ»¸ö‘±£´æÏìӦΪ…’¶Ô»°¿ò¡£
¼û15.5½Ú¹ØÓÚContent-DispositionµÄµÄ°²È«ÎÊÌâ¡£
19.6 ºÍÒÔǰ°æ±¾µÄ¼æÈÝ
ÒªÇóºÍÒÔǰµÄ°æ±¾µÄ¼æÈݳ¬³öÁËÐÒ鹿·¶µÄ·¶Î§¡£È»¶øHTTP/1.1ÓÐÒâÉè¼Æ³ÉºÜÈÝÒ×Ö§³ÖÒÔǰµÄ°æ±¾¡£±ØÐëÖµµÃ×¢ÒâµÄÊÇ£¬ÔÚдÕâ·Ý¹æ·¶µÄʱºò£¬ÎÒÃÇÏ£ÍûÉÌÒµµÄHTTP/1.1·þÎñÆ÷È¥£º
--½ÓÊÜHTTP/0.9£¬1.0ºÍ1.1ÇëÇóµÄÇëÇóÐУ¨Request-Line£©¸ñʽ£»
--Àí½âHTTP/0.9£¬1.0»ò1.1¸ñʽÖеÄÈκÎÓÐЧÇëÇó£»
--Ç¡µ±µØÓÿͻ§¶ËʹÓõÄÖ÷Òª°æ±¾À´ÏìÓ¦¡£
²¢ÇÒÎÒÃÇÏ£ÍûHTTP/1.1µÄ¿Í»§¶Ë£º
--½ÓÊÜHTTP/1.0ºÍ1.1ÏìÓ¦µÄ״̬ÐУ¨Status-Line£©¸ñʽ£»
--¶®µÃHTTP/0.9£¬1.0»ò1.1µÄ¸ñʽµÄÈκÎÓÐЧµÄÏìÓ¦¡£
¶Ô´ó¶àÊýHTTP/1.0µÄʵÏÖ£¬Ã¿Ò»¸öÁ¬½ÓÒªÔÚÇëÇó֮ǰ±»¿Í»§¶Ë½¨Á¢£¬²¢ÇÒÔÚ·¢ËÍÏìÓ¦Ö®ºóÒª±»·þÎñÆ÷¹Ø±Õ¡£Ò»Ð©ÊµÏÖÁËÔÚRFC 2068 [33]µÄ19.7.1½ÚÃèÊöµÄ³Ö¾ÃÁ¬½ÓµÄKeep-Alive°æ±¾¡£
19.6.1¶ÔHTTP/1.0µÄ¸Ä±ä
ÕâÒ»²¿·Ö×ܽáHTTP/1.0ºÍHTTP/1.1Ö®¼äÖ÷ÒªµÄÇø±ð¡£
19.6.1.1 ¶Ô¶àÖ÷»úweb·þÎñÆ÷ºÍ±£ÁôIPµØÖ·¼ò»¯µÄ¸Ä±ä
¿Í»§¶ËºÍ·þÎñÆ÷±ØÐëÖ§³ÖHostÇëÇóÍ·Óò£¬²¢ÇÒÈç¹ûHostÇëÇóÍ·ÓòÔÚHTTP/1.1ÇëÇóÀïȱÉÙ£¬ÄÇô·þÎñÆ÷Ó¦¸Ã±¨¸æÒ»¸ö´íÎ󣬲¢ÇÒ·þÎñÆ÷ÄܽÓÊÜÒ»¸ö¾ø¶ÔURIs£¨5.1.2½Ú£©£¬¶ÔÓÚÕâ¸öÒªÇóÊÇÔڴ˹淶Àï×îÖØÒªµÄ¸Ä±ä¡£ÉÏÃæµÄ¸Ä±ä½«ÔÊÐí»¥ÁªÍø£¬Ò»µ©¾ÉµÄ¿Í»§¶Ë²»ÔÙ³£ÓÃʱ£¬È¥Ö§³ÖÒ»¸öIPµØÖ·µÄ¶à¸öwebÕ¾µã£¬Õâ´ó´ó¼ò»¯ÁË´óÐÍÔËËãµÄweb·þÎñÆ÷£¬ÔÚÄÇÀï·ÖÅä¶à¸öIPµØÖ·¸øÒ»¸öÖ÷»ú£¨host£©»á²úÉúºÜÑÏÖØµÄÎÊÌâ¡£´Ë»¥ÁªÍøÕÕÑùÄָܻ´ÕâÑùÒ»¸öIPµØÖ·£¬´ËIPµØÖ·×÷ÎªÌØÊâÄ¿µÄ±»·ÖÅ䏸±»ÓÃÓÚ¸ù¼¶HTTPURLsµÄÓòÃû¡£¸ø¶¨webµÄÔö³¤ËÙ¶È£¬·þÎñÆ÷µÄ²¿ÊðÊýÁ¿²¿£¬ÄÇôËùÓÐHTTPʵÏÖ£¨°üÀ¨¶ÔÒÑ´æHTTP/1.0Ó¦ÓóÌÐò£©Ó¦¸ÃÕýÈ·µØÂú×ãÏÂÃæÕâЩÐèÇó£º
--¿Í»§¶ËºÍ·þÎñÆ÷¶¼±ØÐ루MUST£©Ö§³ÖHostÇëÇóÍ·Óò¡£
--·¢ËÍHTTP/1.1ÇëÇóµÄ¿Í»§¶Ë±ØÐ루MUST£©·¢ËÍHostÍ·Óò¡£
--Èç¹ûHTTP/1.1ÇëÇó²»°üÀ¨HostÇëÇóÍ·Óò£¬·þÎñÆ÷¾Í±ØÐ루MUST£©±¨¸æ´íÎó400£¨Bad Request£©¡£
--·þÎñÆ÷±ØÐ루MUST£©½ÓÊܾø¶ÔURIs£¨absolute URIs£©¡£
19.6.2ºÍHTTP/1.0³ÖÐøÁ¬½ÓµÄ¼æÈÝ
һЩ¿Í»§¶ËºÍ·þÎñÆ÷¿ÉÄÜÏ£ÍûºÍһЩ¶ÔÒÔǰ³ÖÐøÁ¬½ÓʵÏÖµÄHTTP/1.0¿Í»§¶ËºÍ·þÎñÆ÷¼æÈÝ¡£HTTP/1.0³Ö¾ÃÁ¬½ÓÐèÒªÏÔʾµØÐÉÌ£¬ÒòΪËüÃDz»ÊÇȱʡµÄÐÐΪ¡£³Ö¾ÃÁ¬½ÓµÄHTTP/1.0ʵÑéÐÔµÄʵÏÖÓдíÎ󣬲¢ÇÒHTTP/1.1ÀïµÄÐµĹ¦Äܱ»Éè¼Æ³ÉÈ¥½ÃÕýÕâЩÎÊÌâ¡£´ËÎÊÌâÊÇһЩÒѾ´æÔÚµÄ1.0¿Í»§¶Ë¿ÉÄܻᷢËÍKeep-AliveÍ·Óò¸ø²»Àí½âÁ¬½ÓµÄ´úÀí·þÎñÆ÷£¬È»ºó´úÀí·þÎñÆ÷»á°Ñ´ËKeep-Aliveת·¢¸øÏÂÒ»¸öÈëÁ÷£¨inbound£©·þÎñÆ÷¡£ËùÒÔHTTP/1.0¿Í»§¶Ë±ØÐë½ûÖ¹ÀûÓÃKeep-Aliveµ±ºÍ´úÀí»á»°µÄʱºò¡£
È»¶ø£¬ºÍ´úÀí½øÐлỰ×îÖØÒªÊÇÀûÓó־ÃÁ¬½Ó£¬ËùÒÔÄǸö½ûÖ¹ºÜÏÔÈ»²»Äܱ»½ÓÊÜ¡£Òò´Ë£¬ÎÒÃÇÐèҪһЩÆäËüµÄ»úÖÆÈ¥Ö¸Ã÷ÐèÒªÒ»¸ö³Ö¾ÃÁ¬½Ó£¬²¢ÇÒËü±ØÐëÄܰ²È«µÄʹÓÃÉõÖÁµ±ºÍºöÂÔÁ¬½ÓµÄÀÏ´úÀí¡£³Ö¾ÃÁ¬½ÓȱʡÊÇΪHTTP/1.1ÏûÏ¢µÄ£»ÎªÁËÉùÃ÷·Ç³Ö¾ÃÁ¬½Ó£¨¼û14.10½Ú£©£¬ÎÒÃǽéÉÜÒ»¸öеĹؼü×Ö£¨Connection£ºclose£©¡£
³Ö¾ÃÁ¬½ÓµÄÔ´HTTP/1.0µÄÐÎʽ£¨the Connection: Keep-Alive and Keep-Alive Í·Óò£©ÔÚRFC2068Àï˵Ã÷
19.6.3¶ÔRFC 2068µÄ¸Ä±ä
ÕâÆª¹æ·¶ÒѾ±»×ÐϸµÄÉó²éÀ´¾ÀÕý¹Ø¼ü×ÖµÄÓ÷¨ºÍÏû³ýËüÃÇµÄÆçÒ壻RFC 2068ÔÚ×ñÊØRFC 2119 [34] ÖÆ¶¨µÄж¨·½ÃæÓкܶàÎÊÌâ¡£
³ÎÇåÄĸö´íÎó´úÂ뽫»áʹÈëÁ÷·þÎñÆ÷ʧÁ飨ÀýÈçHTTP://www.cnpaf.net/class/dns' target='_blank'>DNSʧÁ飩¡££¨10.5.5½Ú£©
CREATEÓÐÒ»¸öÌØµãµ±Ò»¸ö×ÊÔ´µÚÒ»´Î±»´´½¨µÄʱºò±ØÐëÐèÒªÒ»¸öEtag¡££¨10.2.2½Ú£©
Content-BaseÍ·Óò´Ó´Ë¹æ·¶Àïɾ³ýÁË£ºËüÎÞ·¨¹ã·ºµÄʵÏÖ£¬²¢ÇÒÔÚûÓн¡×³µÄÀ©Õ¹»úÖÆµÄÇé¿öÏ£¬Ã»Óмòµ¥µÄ£¬°²È«µÄ·½Ê½È¥½éÉÜËü¡£²¢ÇÒ£¬ËüÒÔÒ»ÖÖÏàËÆµÄ¶ø²»ÊÇÏàͬµÄ·½Ê½ÔÚMHTML[45]ÀﱻʹÓá£
ÂÔ…..
20 Ë÷Òý £¨Index£©
21 È«²¿°æÈ¨ÉùÃ÷
ÂÔ…..
ÈçÐèת½ØÇë×¢Ã÷³ö´¦£ºÀ´Ô´ÖйúÐÒé·ÖÎöÍø