HTTP³¬Îı¾´«ÊäÐÒé-HTTP/1.1ÖÐÎİæ
Network Working Group(ÍøÂ繤×÷×é)
R. Fielding
Request for Comments: 2616
UC Irvine
Obsoletes(¹ýʱÆúÓã©: 2068
J. Gettys
Category: Standards Track £¨Àà±ð:±ê×¼×é
£©
Compaq/W3C
J. Mogul
Compaq
H. Frystyk
W3C/MIT
L. Masinter
Xerox
P.
Leach
Microsoft
T. Berners-Lee
W3C/MIT
June
1999
³¬Îı¾´«ÊäÐÒé-HTTP/1.1
˵Ã÷
±¾Îĵµ¹æ¶¨ÁË»¥ÁªÍøÉçÇøµÄ±ê×¼×éÐÒ飬²¢ÐèÒªÌÖÂۺͽ¨ÒéÒÔ±ã¸ü¼ÓÍêÉÆ¡£Çë²Î¿¼
¡°»¥ÁªÍø¹Ù·½ÐÒé±ê×¼¡±£¨STD 1£©À´Á˽ⱾÐÒéµÄ±ê×¼»¯×´Ì¬¡£±¾ÐÒé²»ÏÞÁ÷´«·¢²¼¡£
°æÈ¨ÉùÃ÷
Copyright (C) The Internet Society (1999).
All Rights Reserved.
¡¡Copyright
www.cnpaf.net (2007).
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Ò²ÊÇÓÃÓÚÓû§´úÀíÖ®¼ä¼°´úÀí/Íø¹Øµ½ÆäËûÍøÂçϵͳµÄͨÓÃͨÐÅÐÒ飬ÕâÑùµÄÍøÂçϵͳ¿ÉÄÜÓÉSMTP[16],NNTP[13],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)
×÷ΪÇëÇó»òÓ¦´ðµÄÓÐЧ¸ººÉ¶ø´«ÊäµÄÐÅÏ¢.Ò»¸öʵÌå°üº¬±¨Í·ÐÎʽµÄά»¤ÐÅÏ¢ºÍÏûÏ¢ÌåÐÎʽµÄÄÚÈÝ,ÓɵÚ7½ÚÏêÊö.
±íʾ·½·¨(Representation)
Ò»¸öÓ¦´ð°üº¬µÄʵÌåÊÇÓÉÄÚÈÝÐÉ̾ö¶¨µÄ,ÈçµÚ12ÕÂËùÊö.Ò»¸öÌØ¶¨µÄÓ¦´ð״̬Ëù¶ÔÓ¦µÄ±íʾ·½·¨¿ÉÄÜÓжà¸ö.
ÄÚÈÝÐÉÌ(Content Negotiation)
ΪÇëÇó·þÎñʱѡÔñÊʵ±±íʾ·½·¨µÄ»úÖÆ£¨mechanism),ÈçµÚ12½ÚËùÊö.ÈκÎÓ¦´ðÀïʵÌåµÄ±íʾ·½·¨¶¼ÊÇ¿ÉÐÉ̵Ä(°üÀ¨³ö´íÓ¦´ð).
±äÁ¿£¨Variant)
ÔÚÈκθø¶¨Ê±¿Ì,ÓëÒ»¸ö×ÊÔ´¶ÔÓ¦µÄ±íʾ·½·¨¿ÉÒÔÓÐÒ»¸ö»ò¸ü¶à.ÿ¸ö±íʾ·½·¨³Æ×÷Ò»¸ö±äÁ¿.ʹÓñäÁ¿Õâ¸öÊõÓï²¢²»±ØÈ»Òâζ×Å×ÊÔ´ÊÇÓÉÄÚÈÝÐÉ̾ö¶¨µÄ.
¿Í»§»ú£¨Client£©
Ϊ·¢ËÍÇëÇó½¨Á¢Á¬½ÓµÄ³ÌÐò.
Óû§´úÀí(User agent)
³õʼ»¯ÇëÇóµÄ¿Í»§¶Ë³ÌÐò.³£¼ûµÄÈçä¯ÀÀÆ÷,±à¼Æ÷,Ö©Öë(ÍøÂç´©Ô½»úÆ÷ÈË),»òÆäËûµÄÖÕ¶ËÓû§¹¤¾ß.
·þÎñÆ÷(Server)
ͬÒâÁ¬½ÓÒÔ±ãͨ¹ý·¢»ØÓ¦´ðΪÇëÇóÌṩ·þÎñµÄÓ¦ÓóÌÐò.Èκθø¶¨µÄ³ÌÐò¶¼ÓпÉÒÔ¼È×ö¿Í»§¶ËÓÖ×ö·þÎñÆ÷;ÎÒÃÇʹÓÃÕâЩÊõÓï½öÖ¸ÌØ¶¨Á¬½ÓÖгÌÐòÍê³ÉµÄÈÎÎñ,¶ø²»ÊÇָͨ³£ÒâÒåÉϳÌÐòµÄÐÔÄÜ.ͬÑù,ÈκηþÎñÆ÷¶¼¿ÉÒÔ»ùÓÚÿ¸öÇëÇóµÄÐÔÖʰçÑÝÔ·þÎñÆ÷,´úÀí,Íø¹Ü,»òÕßËíµÀµÈÖî½Çɫ֮һ¡£
Ô·þÎñÆ÷£¨Origin server)
¸ø¶¨µÄ×ÊԴפÁô»ò´´½¨µÄµØ·½.
´úÀí·þÎñÆ÷£¨ Proxy£©
Ò»¸ö¼È×ö·þÎñÆ÷ÓÖ×ö¿Í»§¶ËµÄÖнé³ÌÐò.,ÆäÓÃ;ÊÇ´ú±íÆäËû¿Í»§·¢ËÍÇëÇó.ÇëÇóÔÚÄÚ²¿µÃµ½·þÎñ,»òÕß¾¹ýÒ»¶¨µÄ·ÒëתÖÁÆäËû·þÎñÆ÷.Ò»¸ö´úÀí·þÎñÆ÷±ØÐëÄÜͬʱÂÄÐб¾ËµÃ÷Öпͻ§¶ËºÍ·þÎñÆ÷ÒªÇó.¡°Í¸Ã÷´úÀí¡±£¨transparent proxy£©ÊÇÒ»ÖÖ³ýÁ˱ØÐèµÄÑéÖ¤ºÍ¼ø¶¨Íâ²»ÐÞ¸ÄÇëÇó»òÏàÓ¦µÄ´úÀí.¡°·Ç͸Ã÷´úÀí¡±£¨non-transparent proxy£©ÊÇÒ»ÖÖÐÞ¸ÄÇëÇó»òÓ¦´ðÒÔ±ãΪÓû§´úÀíÌṩ¸½¼Ó·þÎñµÄ´úÀí,¸½¼Ó·þÎñ°üÀ¨Àà×¢ÊÍ·þÎñ,ýÌåÀàÐÍת»»,ÐÒé¼ò»¯,»òÕßÄäÃûÂ˳ýµÈ.³ý·Ç¾Ã÷È·Ö¸³ö,HTTP´úÀíÒªÇó¶ÔÁ½ÖÖ´úÀí¶¼ÊÊÓÃ.
Íø¹Ø£¨gateway£©
ΪÆäËû·þÎñÆ÷³äµ±ÖнéµÄ·þÎñÆ÷.Óë´úÀí·þÎñÆ÷²»Í¬,Íø¹Ø½ÓÊÕÇëÇó,·Â·ðËü¾ÍÊDZ»ÇëÇó×ÊÔ´ËùÔÚµÄÔ·þÎñÆ÷;Ìá³öÇëÇóµÄ¿Í»§¿ÉÄܾõ²ì²»µ½ËüÕýÔÚÍ¬Íø¹ØÍ¨ÐÅ.
Ò»¸öÔÚÁ½¸öÁ¬½ÓÖ®¼ä³äµ±Ã¤Ä¿Öм̣¨blind relay)µÄÖмä³ÌÐò.Ò»µ©ÓÐЧ,ËíµÀ±ã²»ÔÙ±»ÈÏΪÊÇHTTPͨÐŵÄÓû§,ËäÈ»ËíµÀ¿ÉÄÜÒѾ±»HTTPÇëÇó³õʼ»¯ÁË.µ±Á½¶ËµÄÖмÌÁ¬½Ó¶¼¹Ø±ÕµÄʱºò,ËíµÀ²»ÔÙ´æÔÚ.
¸ßËÙ»º´æ£¨Cache£©
Ò»¸ö³ÌÐòÓ¦´ðÐÅÏ¢µÄ±¾µØ´æ´¢ºÍ¿ØÖÆ´ËÐÅÏ¢´æ´¢¡¢¼ìË÷ºÍɾ³ýµÄ×Óϵͳ,Ò»¸ö¸ßËÙ»º³å´æ´¢Æ÷´æ´¢Ó¦´ðΪµÄÊǼõÉÙ¶Ô½«À´Í¬ÑùÇëÇóµÄÓ¦´ðʱ¼äºÍÍøÂç´ø¿íÏûºÄ,ÈÎÒ»¿Í»§»ò·þÎñÆ÷¶¼¿ÉÄܰüº¬Ò»¸ö¸ßËÙ»º´æ,µ«¸ßËÙ»º´æ²»ÄÜÓ¦ÓÃÓÚÒ»¸ö³äµ±ËíµÀµÄ·þÎñÆ÷.
¿É»º´æ£¨Cacheable£©
Èç¹ûÒ»¸ö¸ßËÙ»º´æÔÊÐí´æ´¢Ó¦´ðÐÅÏ¢µÄÒ»·Ý¿½±´ÔËÓÃÓÚÓ¦´ðºó¼ÌÇëÇóµÄ¿½±´,Ò»¸öÓ¦´ð¾ÍÊǿɻº´æµÄ.ÓÃÀ´È·¶¨HTTPÓ¦´ðµÄ»º´æÄÜÁ¦£¨cacheability£©µÄ¹æÔòÔÚ13½ÚÖÐÓж¨Òå.¼´Ê¹Ò»¸ö×ÊÔ´Êǿɻº´æµÄ,Ò²¿ÉÄܶÔÒ»¸ö¸ßËÙ»º´æÄÜ·ñ½«»º´æ¿½±´ÓÃÓÚÄ³ÌØ¶¨ÇëÇó´æÔÚ¸½¼ÓµÄÔ¼Êø.
Ö±½Ó£¨first-hand£©
Èç¹ûÒ»¸öÓ¦´ðÖ±½Óµ½À´²¢ÇÒûÓÐÔµÓÚÔ·þÎñÆ÷,»òÈô¸É´úÀí·þÎñÆ÷µÄ²»±ØÒªµÄÑÓʱ,ÄÇôÕâ¸öÓ¦´ð¾ÍÊÇÖ±½ÓµÄ.Èç¹ûËüµÄÓÐЧÐÔÒѾ±»Ô·þÎñÆ÷Ö±½ÓÈÏÖ¤,ÄÇôÕâ¸öÓ¦´ðҲͬÑùÊǵÚÒ»ÊÖµÄ.
Ã÷È·ÖÕֹʱ¼ä£¨explicit expiration time£©
Ô·þÎñÆ÷Ô¤ËãÒ»¸öʵÌåÔÚÎÞÐè½øÒ»²½È·ÈϵÄÇé¿öϲ»ÔÙ±»¸ßËÙ»º´æ·µ»ØµÄʱ¼ä.
̽Ë÷ÖÕֹʱ¼ä£¨heuristic expiration time£©
µ±Ã»ÓÐÍâÔÚµÄÖÕֹʱ¼ä¿ÉÀûÓÃʱ, ÓɸßËÙ»º´æËùÖ¸¶¨µÄÖÕֹʱ¼ä.
ÄêÁ䣨Age£©
Ò»¸öÓ¦´ðµÄÄêÁäÊÇ´ÓËü±»·¢ËÍ,»ò±»Ô·þÎñÆ÷³É¹¦È·Èϵ½ÏÖÔÚµÄʱ¼ä.
±£ÏÊÊÙÃü£¨Freshness lifetime£©
Ò»¸öÓ¦´ðÉú³ÉºÍ¹ýÆÚÖ®¼äµÄʱ¼ä³¤¶È.
±£ÏÊ£¨Fresh£©
Èç¹ûÒ»¸öÓ¦´ðµÄÄêÁ仹ûÓг¬¹ý±£ÏÊÊÙÃü,Ëü¾ÍÊDZ£ÏʵÄ.
³Â¾É£¨Stale£©
Ò»¸öÓ¦´ðµÄÄêÁäÒѾ³¬¹ýÁËËüµÄ±£ÏÊÊÙÃü,¾ÍÊdz¾ɵÄ.
ÓïÒå͸Ã÷£¨semantically transparent£©
µ±ËüµÄʹÓóýÁ˸ÄÉÆÐÔÄÜÍâ¼ÈδӰÏìÇëÇó¿Í»§»úҲδӰÏìÔ·þÎñÆ÷ʱ, ¸ßËÙ»º´æ¶ÔÓÚÄ³ÌØ¶¨µÄÓ¦´ð¾ÍÊǹ¤×÷ÓÚÓïÒå͸Ã÷·½Ê½ÁË.µ±¸ßËÙ»º´æÓïÒå͸Ã÷ʱ,¿Í»§Ç¡ºÃÊÕµ½ÓëÔ·þÎñÆ÷Ö±½Ó´¦ÀíÇëÇóºóµÃµ½µÄÓ¦´ð£¨³ýÁËÖð¶Îת½ÓµÄ±¨Í·²¿·Ö£©ÍêÈ«ÏàͬµÄÓ¦´ð¡£
ÓÐЧÐÔÅбðÆ÷£¨Validator£©
Ò»¸öÓÃÀ´²éÕÒÒ»¸ö¸ßËÙ»º´æ¼Ç¼ÊÇ·ñÊÇÒ»¸öʵÌåµÄµÈЧ¿½±´µÄÐÒéÔªËØ(ÀýÈç,Ò»¸öʵÌå±ê¼Ç£¨entity
tag£©»ò×îÖÕ¸ü¸Äʱ¼ä£¨Last-Modified time)).
ÉÏÓÎ/ÏÂÓΣ¨upstream/downstream£©
ÉÏÓκÍÏÂÓÎÃèÊöÁËÏûÏ¢µÄÁ÷¶¯:ËùÓÐÏûÏ¢¶¼´ÓÉÏÓÎÁ÷µ½ÏÂÓÎ.
ÏòÄÚ/ÏòÍ⣨inbound/outbound£©
ÏòÄÚºÍÏòÍâÖ¸µÄÊÇÏûÏ¢µÄÇëÇóºÍÓ¦´ð·¾¶:"ÏòÄÚ"¼´"ÒÆÏòÔ·þÎñÆ÷","ÏòÍâ"¼´"ÒÆÏòÓû§´úÀí".
¡¡Copyright
www.cnpaf.net (2007).
All Rights Reserved.
1¡£4 ×ÜÌå²Ù×÷
HTTPÐÒéÊÇÒ»ÖÖÇëÇó/Ó¦´ðÐÒé¡£ ÓëÖ÷»ú½¨Á¢Á¬½Óºó£¬¿Í»§ÒÔÇëÇó·½·¨£¬URIºÍÐÒé°æ±¾µÄÐÎʽÏò·þÎñÆ÷·¢ËÍÇëÇ󣬼ÌÒÔÀàMIMEÐÅÏ¢£¬ÆäÖаüÀ¨ÇëÇóÐ޸ģ¬¿Í»§ÐÅÏ¢ºÍ¿ÉÄܵÄÕýÎÄÄÚÈÝ¡£
·þÎñÆ÷ÓðüÀ¨ÏûÏ¢ÐÒé°æ±¾ºÍ³É¹¦»ò´íÎó´úÂëµÄ״̬½øÐÐÓ¦´ð£¬¼ÌÒÔ°üÀ¨·þÎñÆ÷ÐÅÏ¢£¬ÊµÌåά»¤ÐÅÏ¢ºÍ¿ÉÄܵÄʵÌåÄÚÈݵÄÀàMIMEÏûÏ¢¡£HTTPºÍMIMEÖ®¼äµÄ¹ØÏµÈ總¼19.4½ÚËù²ûÊö¡£
´ó²¿·ÖµÄHTTPͨÐÅÓÉÓû§´úÀíÒý·¢£¬ÓÉÓ¦Óõ½Ò»Ð©Ô·þÎñÆ÷ÉÏ×ÊÔ´µÄÇëÇ󹹳ɡ£×î¼òµ¥µÄÇéÐΣ¬¿ÉÒÔ¾Óû§´úÀí£¨UA£©ºÍÔ·þÎñÆ÷£¨O£©Ö®¼äµÄµ¥Ò»Á¬½Ó£¨v£©Íê³É¡£ÇëÇóÁ´------------------------>Óû§´úÀí(UA)-------------------µ¥Ò»Á¬½Ó£¨v)-------------------Ô·þÎñÆ÷£¨O£© <-----------------------Ó¦´ðÁ´
µ±Ò»¸ö»òÒ»¸öÒÔÉϵÄÖнéÔÚÇëÇó/Ó¦´ðÁ´ÖгöÏÖµÄʱºò£¬»á³öÏÖ¸ü¸´ÔÓµÄÇéÐΡ£³£¼ûµÄÖнéÐÎʽÓÐÈýÖÖ£º´úÀí£¬Íø¹ØºÍËíµÀ¡£´úÀíÊÇÒ»ÖÖתË͹¤¾ß£¬Ëü½ÓÊÕ¾ø¶ÔÐÎʽµÄURIÇëÇó£¬ÖØÐ´È«²¿»ò²¿·ÖÏûÏ¢£¬È»ºó°ÑÖØÐ¸ñʽ»¯ºóµÄÇëÇó·¢Ë͵½URIÈ·¶¨µÄ·þÎñÆ÷ÉÏ¡£Íø¹ØÊÇÒ»ÖÖ½ÓÊÕ¹¤¾ß£¬Ëü³äµ±ÆäËû·þÎñÆ÷µÄÉϲ㣬±ØÒªÊ±½«ÇëÇó·ÒëΪϲã·þÎñÆ÷µÄÐÒé¡£ËíµÀ²»¸Ä±äÏûÏ¢¶ø³äµ±Á½¸öÁ¬½ÓÖ®¼äµÄÖм̵㣻ËüÓÃÓÚͨÐÅÐèÒª´©¹ýÖн飨Èç·À»ðǽ£©£¬ÉõÖÁÖн鲻ÄÜÀí½âÐÅÏ¢ÄÚÈݵÄʱºò¡£
ÇëÇóÁ´-------------------------------------->UA-----v-----A-----v-----B-----v-----C-----v-----O
<-------------------------------------Ó¦´ðÁ´
ÉÏͼÏÔʾÁËÓû§´úÀíºÍÔ·þÎñÆ÷Ö®¼äµÄÈý¸öÖн飨A£¬BºÍC)¡£ÓÎÀúÕûÌõÁ´µÄÇëÇó»òÓ¦´ðÏûÏ¢Ðèͨ¹ýËĸö¶ÀÁ¢µÄÁ¬½Ó¡£Õâ¸öÌØÐÔºÜÖØÒª£¬ÒòΪijЩHTTPͨÐÅÑ¡ÏîÖ»ÄÜÓ¦ÓÃÓÚµ½×î½üµÄ·ÇËíµÀÁÚ¾Ó£¬Á´µÄÖÕµãµÄÁ¬½Ó£¬»òÕßÑØ×ÅÁ´µÄËùÓÐÁ¬½Ó¡£Í¼±í¾¡¹ÜÊÇÏßÐԵģ¬Ã¿²¿·Ö¿ÉÄܶ¼ÔÚæÓÚ¶à·ͬʱͨÐÅ¡£ÀýÈ磬B¿ÉÒÔ½ÓÊÕÀ´×Ô²»Í¬ÓÚAµÄÐí¶à¿Í»§µÄÇëÇ󣬲¢ÇÒ£¯»òÕßתË͵½²»Í¬ÓÚCµÄ·þÎñÆ÷£¬Óë´Ëͬʱ£¬Ëü»¹ÔÚ´¦ÀíAµÄÇëÇó¡£
ÈκηÇËíµÀµÄͨÐųÉÔ±¶¼¿ÉÒÔʹÓÃÄÚ²¿µÄ¸ßËÙ»º´æÀ´´¦ÀíÇëÇ󡣸ßËÙ»º´æµÄ×÷ÓÃÊÇÈç¹ûÑØ×ÅÁ´µÄÒ»¸ö³ÉÔ±¶ÔÇëÇó²ÉÓÃÁ˸ßËÙ»º³åµÄÓ¦´ð£¬ÇëÇó/Ó¦´ðÁ´¾Í»á´ó´óËõ¶Ì¡£ÒÔÏÂͼ½â×÷Ϊ½á¹û²úÉúµÄÁ´£¬¼Ù¶¨BÓµÓÐÀ´×ÔO£¨Í¨¹ýC£©µÄÒ»¸ö´ÓǰӦ´ðµÄ±¸·Ý£¬ÇëÇóÉÐδ±»UA»òA»º´æ¡£
ÇëÇóÁ´---------->UA-----v----------A-----v-----B-----C----O
<---------Ó¦´ðÁ´
²¢²»ÊÇËùÓеÄÓ¦´ð¶¼ÄÜÓÐЧµØ»º´æ£¬Ò»Ð©ÇëÇó¿ÉÄܺ¬ÓÐÐÞ¸ÄÁ¿£¬¶Ô»º´æ¶¯×÷ÓÐÌØÊâµÄÒªÇó¡£»º´æ¶¯×÷ºÍ»º´æÓ¦´ðµÄHTTPÒªÇó½«ÔÚµÚ13½Ú¶¨Òå¡£
ʵ¼ÊÉÏ£¬Ä¿Ç°ÍòÎ¬ÍøÉÏÓжàÖֽṹºÍÅäÖõĸßËÙ»º´æºÍ´úÀí±»ÊµÑé»òʹÓá£ÕâЩϵͳ°üÀ¨½ÚʡԽÑó´ø¿íµÄÈ«¹ú´úÀí²ã£¬¹ã²¥»ò¶àµãͨÐÅ»º´æ½Ó¿Ú£¬ ͨ¹ýCD-ROM·ÖÅä×Ó»º´æÊý¾ÝµÄ»ú¹¹£¬µÈµÈ¡£HTTPϵͳӦÓÃÔÚ¿íÆµ´øÁ¬½ÓµÄÆóÒµ¾ÖÓòÍøÖУ¬Í¨¹ýPDAsµÄµÍºÄÎÞÏßÁ¬½ÓºÍ¶ÏÐøÁ¬½ÓµÄ·ÃÎÊ¡£HTTP1.1µÄÄ¿±êÊÇÖ§³Ö¸÷ÖÖ¸÷ÑùµÄÓ¦ÓÃÅäÖã¬Òý½øÐÒé½á¹¹Âú×ãÄÇЩÐèÒª½Ï¸ß¿É¿¿ÐÔ£¬¿ÉÒÔÅųý¹ÊÕÏ»òÖÁÉÙָʾ¹ÊÕϵÄÍøÂçÓ¦ÓõÄÒªÇó¡£
HTTPͨÐÅÔÚͨ³£·¢ÉúÔÚTCP/£É£ÐÁ¬½ÓÉÏ¡£Ä¬È϶˿ÚÊÇTCP 80,²»¹ýÆäËü¶Ë¿ÚÒ²¿ÉÒÔʹÓá£ÔÚ»¥ÁªÍø»òÆäËûÍøÂçÉÏ£¬Õâ²¢²»·Á°HTTPÓ¦ÓÃÔÚÆäËûÐÒéµÄ¶¥¶Ë¡£http½ö½öÆÚÍû¿É¿¿µÄ´«Ê䣻ÈκÎÌṩÕâÖÖ±£Ö¤µÄÐÒé¶¼¿ÉÒÔʹÓã»ÐÒé´«ÊäÊý¾Ýµ¥ÔªµÄHTTP/1.1ÇëÇóºÍÓ¦´ð½á¹¹µÄÓ³ÏóÒѾ³¬³öÁ˱¾ËµÃ÷ÊéµÄ·¶Î§¡£
ÔÚhttp/1.0ÖУ¬´ó²¿·ÖµÄʵÏÖΪÿ¸öÇëÇó/Ó¦´ð½»»»Ê¹ÓÃÁËÐÂÁ¬½Ó¡£¶øhttp/1.1ÖУ¬Ò»¸öÁ¬½Ó¿ÉÒÔÓÃÓÚÒ»¸ö»ò¸ü¶àÇëÇó/Ó¦´ð½»»»£¬ËäÈ»Á¬½Ó¿ÉÄÜ»áÒòΪ¸÷ÖÖÔÒòÖжϣ¨¼ûµÚ8.1½Ú£©¡£
2 ·ûºÅ¹ßÀýºÍÒ»°ãÓï·¨
2£®1 À©³äBNF
±¾Îĵµ¹æ¶¨µÄËùÓлúÖÆ¶¼ÓÃÁ½ÖÖ·½·¨ÃèÊö£ºÉ¢ÎÄÌ壨prose)ºÍÀàËÆÓÚRFC
822µÄÀ©³äBackus-Naur Form(BNF)¡£ÒªÀí½â±¾ËµÃ÷Ê飬ʹÓÃÕßÐèÊìϤ·ûºÅ±íʾ·¨¡£À©³äBNF°üÀ¨ÏÂÁнṹ£º
Ãû×Ö=¶¨Òå
Ò»Ìõ¹æÔòµÄÃû×Ö½ö½öÊÇÃû×Ö±¾Éí£¨Ã»ÓÐÈκÎ"<"ºÍ">"£©,¸úµÈÓÚºÅ"="ºóÃæµÄ¶¨ÒåÊÇ·ÖÀëµÄ¡£½öµ±Á¬ÐøÏߵĿոñÓÃÀ´±íʾһÌõ³¤ÓÚÒ»ÐеĹæÔòʱ¿Õ°×²ÅÊÇÖØÒªµÄ¡£Ä³Ð©»ù±¾¹æÔòʹÓôóд×Öĸ£¬ÈçSP£¬LWS£¬HT£¬CRLF£¬DIGIT£¬ALPHA£¬µÈµÈ¡£ÎÞÂÛºÎʱ£¬Ö»ÒªËüÃǵĴæÔÚÓÐÀûÓÚʶ±ð¹æÔòÃû×Ö£¬¾Í¿ÉÒÔÔÚ¶¨ÒåµÄ·¶Î§ÄÚʹÓýÇÀ¨ºÅ¡£
¡°ÎÄ×Ö¡±
ÎÄ×ÖÔÎÄʹÓÃÒýºÅ¡£³ýÌØÊâÇé¿ö£¬ÔÎĶÔÍâ½ç²»Ãô¸Ð¡£
¹æÔò1 | ¹æÔò2
ÓÉÊúÏß("|"£©·Ö¿ªµÄÔªËØÊÇ¿ÉÑ¡µÄ£¬ÀýÈ磬"yes
| no"±íʾyes»òno¶¼ÊǿɽÓÊܵġ£
£¨¹æÔò1 ¹æÔò2£©
ΧÔÚÀ¨ºÅÀïµÄ¶à¸öÔªËØÊÓ×÷Ò»¸öÔªËØ¡£ÕâÑù¡°(elem (foo | bar) elem)¡±ÔÊÐí±ê¼ÇÐòÁС°elem foo elem¡±ºÍelem bar elem¡±¡£
*¹æÔò
Ç°ÃæµÄ×Ö·û"*"±íÊ¾ÖØ¸´¡£ÍêÕûµÄÐÎʽÊÇ"*ÔªËØ",±íÊ¾ÔªËØÖÁÉÙ³öÏִΣ¬ÖÁ¶à³öÏִΡ£Ä¬ÈÏÖµÊÇ0ºÍÎÞÇî´ó£¬ËùÒÔ"*(ÔªËØ)"ÔÊÐíÈκÎÊýÖµ£¬°üÀ¨Á㣻"1*ÔªËØ"ÖÁÉÙÐèÒªÒ»´Î£»"1*2element"ÔÊÐíÒ»´Î»òÁ½´Î¡£
[¹æÔò]
·½À¨ºÅÀïÊÇÈÎÑ¡ÔªËØ£»"[foo bar]"Ï൱ÓÚ"*1(foo
bar)".
N ¹æÔò
ÌØÊâµÄÖØ¸´£º¡°(ÔªËØ)¡±Ï൱ÓÚ¡°*(ÔªËØ)¡±£» Ò²¾ÍÊÇ˵£¬(ÔªËØ)ÕýºÃ³öÏÖÁ˴Ρ£ÕâÑù2DIGITÊÇÒ»¸öÁ½Î»Êý×Ö£¬3ALPHAÊÇÒ»¸öÓÉÈý¸ö×Ö·û×é³ÉµÄ×Ö·û´®¡£
#¹æÔò
ÀàËÆÓÚ"*",½á¹¹"#"ÊÇÓÃÀ´¶¨ÒåһϵÁÐÔªËØµÄ¡£ÍêÕûµÄÐÎʽÊÇ"#ÔªËØ,±íʾÖÁÉÙ¸öÔªËØ£¬ÖÁ¶à¸öÔªËØ£¬ÔªËØÖ®¼ä±»Ò»¸ö»ò¶à¸ö¶ººÅ(",")ÒÔ¼°¿ÉÑ¡µÄÏßÐÔ°×É«¿Õ¼ä(LWS)¸ô¿ªÁË¡£Õâ¾ÍʹµÃÁбíµÄÒ»°ãÐÎʽ±äµÃ·Ç³£ÈÝÒ×£»Ïñ
( *LWS element) *( *LWS ","*LWS element ))
¾Í¿ÉÒÔ±íʾΪ
1#element
ÎÞÂÛÔÚÄÄÀïʹÓÃÕâ¸ö½á¹¹£¬¿ÕÔªËØ¶¼ÊÇÔªÐíµÄ£¬µ«ÊDz»¼ÆÈëÔªËØ³öÏֵĴÎÊý¡£»»¾ä»°Ëµ£¬¡°(ÔªËØ), , (ÔªËØ) "ÊÇÔÊÐíµÄ£¬µ«Êǽö½öÊÓΪÁ½¸öÔªËØ¡£Òò´Ë£¬ÔÚÖÁÉÙÐèÒªÒ»¸öÔªËØµÄµØ·½£¬±ØÐë´æÔÚÖÁÉÙÒ»¸ö·Ç¿ÕÔªËØ¡£Ä¬ÈÏÖµÊÇ0ºÍÎÞÇî´ó£¬ÕâÑù£¬¡°#element¡±ÔÊÐíÈκÎÊý×Ö£¬°üÀ¨Á㣻¡°1#element¡±ÖÁÉÙÐèÒª1¸öÔªËØ£»¡°1#2element¡±ÔÊÐí1¸ö»ò2¸öÔªËØ¡£
£»×¢ÊÍ
Ó÷ֺÅÒýµ¼µÄ×¢ÊÍ£¬´Ó¹æÔòÕýÎĵÄÓÒ±ßÒ»¶Î¾àÀ뿪ʼֱµ½ÐÐβ¡£ÕâÊÇ×ö×¢Ê͵ļòµ¥·½·¨£¬×¢ÊÍÓë˵Ã÷ÊÇͬÑùÓÐÓõġ£
Òþº¬ *LWS
±¾ËµÃ÷ÊéËùÃèÊöµÄÓï·¨ÊÇ»ùÓÚ×ֵġ£³ý·ÇÌØ±ð×¢Ã÷£¬ÏßÐԿհ׿ɳöÏÖÔÚÈκÎÁ½¸öÏàÁÚ×ÖÖ®¼ä£¨±ê¼Ç»òÒýÓÃ×Ö·û´®£©£¬ÒÔ¼°ÏàÁÚ×ֺͼä¸ô·ûÖ®¼ä£¬²¢²»¸Ä±äÒ»¸öÓòµÄº¬Òå¡£ÈκÎÁ½¸ö±ê¼ÇÖ®¼ä£¨ÏÂÃæ»á¶Ô"token(±ê¼Ç)"½øÐж¨Ò壩±ØÐëÓÐÖÁÉÙÒ»¸ö·Ö¸î·û£¬·ñÔò½«»á±»Àí½âΪµ¥Ò»±ê¼Ç¡£
2£®2»ù±¾¹æÔò
ÏÂÃæµÄ¹æÔòÃèÊöÁË»ù±¾µÄ½âÎö½á¹¹£¬¹á´©ÓÚ±¾ËµÃ÷ÊéµÄÈ«ÎÄ¡£US-ASCII(ÃÀ¹úÐÅÏ¢½»»»±ê×¼Âë)×Ö·û¹æ¶¨ÊÇÓÉANSI X3.4-1986[21]¶¨ÒåµÄ¡£
OCTET
= <ÈÎÒâ°Ë±ÈÌØµÄÊý¾ÝÐòÁÐ>
CHAR
= <ÈÎÒâASCII×Ö·û£¨°Ë½øÖÆ 0-127£©>
UPALPHA =
<ÈÎÒâ´óд×Öĸ"A"..."Z">
LOALPHA =
<ÈÎÒâСд×Öĸ"a"..."z">
ALPHA
= UPALPHA | LOALPHA
DIGIT
= <ÈÎÒâÊý×Ö0£¬1£¬...9>
CTL
= <ÈÎÒâ¿ØÖÆ×Ö·û(octets 0 - 31)¼°É¾³ý¼üDEL£¨127£©>
CR
=
LF
=
SP
=
HT
=
<">
=
HTTP/1.1½«CR LFµÄ˳Ðò¶¨ÒåΪÈκÎÐÒéÔªËØµÄÐÐβ±êÖ¾£¬³ýÁ˱¨ÎÄÒÔÍ⣨¿íËÉÓ¦Óüû¸½Â¼19.3£©.±¨ÎÄÄÚ²¿µÄÐÐβ±êÖ¾ÊÇÓÉËüµÄ¹ØÁªÃ½ÌåÀàÐͶ¨ÒåµÄ£¬Èç3.7½ÚËùÊö¡£
CRLF
= CR LF
Èç¹ûÑÓ³¤ÏßÓɿոñ»òË®Æ½ÖÆ±í¿ªÊ¼£¬HTTP/1.1 µÄ±¨Í·ÓòÖµ¿ÉÒÔÕÛµþµ½µ½¸´ºÏÏßÉÏ¡£ËùÓеÄ
ÏßÐÔ¿Õ°×£¬°üÀ¨ÕÛµþ£¬¾ßÓÐͬSPÒ»ÑùµÄÓïÒå¡£½ÓÊÕÕßÔÚ½âÊÍÓòÖµ»ò½«ÏûϢתË͵½ÏÂÓÎʱ¿ÉÒÔÓõ¥¸öSPÌæ´úÈκÎÏßÐԿհס£
LWS
= [CRLF] 1*( SP | HT )
Îı¾¹æÔò½ö½öÊÊÓÃÓÚÃèÊöÓòµÄÄÚÈݺͲ»»á±»ÏûÏ¢Óï·¨·ÖÎö³ÌÐò½âÊ͵ÄÖµ¡£*TESTµÄ×Ö¿ÉÒÔ
°üº¬ISO-8859-1[22]ÀïµÄ×Ö·û£¬Ò²¿ÉÒÔ°üº¬×Ö·û¹æ¶¨ÀïµÄ×Ö·û[14]¡£
TEXT
= <³ýCTLsÒÔÍâµÄÈÎÒâOCTET£¬µ«°üÀ¨LWS>
Ò»¸öCRLF½ö½öÔÚ×÷Ϊ±¨Í·ÓòÑÓÐøµÄÒ»²¿·Öʱ²ÅÔÚTEXT¶¨ÒåÀïÔÊÐíʹÓá£
Ê®Áù½øÖÆÊý×Ö×Ö·ûÓÃÔÚÊý¸öÐÒéÔªËØÀï¡£
HEX
= "A" | "B" | "C" | "D" | "E"
| "F"
| "a" | "b" | "c" | "d" |
"e" | "f" | DIGIT
Ðí¶àHTTP/1.1µÄ±¨Í·ÓòÖµÊÇÓÉLWS»òÌØÊâ×Ö·û·Ö¸ôµÄ×Ö¹¹³ÉµÄ¡£ÕâÐ©ÌØÊâ×Ö·û±ØÐë°üº¬ÔÚÒýÓÃ×Ö·û´®À·½¿ÉÓÃÔÚ²ÎÊýÖµ£¨Èç3.6½Ú¶¨Ò壩Àï¡£
token £¨±ê¼Ç£© =
1*<³ýCTLsÓë·Ö¸î·ûÒÔÍâµÄÈÎÒâ CHAR >
separators£¨·Ö¸î·û£© = "(" |
")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" |
<">
| "/" | "[" | "]" | "?" |
"="
|
"{" | "}" | SP | HT
ÓÃÔ²À¨ºÅÀ¨ÆðÀ´µÄ×¢ÊÍ¿ÉÒÔ°üº¬ÔÚһЩHTTP±¨Í·ÓòÀï¡£Ö»ÓÐ×÷ΪÓòÖµ¶¨ÒåµÄÒ»²¿·ÖʱעÊͲÅÊÇÔÊÐíµÄ¡£ÔÚÆäËûÓòÀԲÀ¨ºÅÊÓ×÷ÓòÖµµÄÒ»²¿·Ö¡£
comment £¨×¢ÊÍ£©=
"(" *( ctext | quoted-pair | comment ) ")"
ctext
= <³ý"(" and ")"ÒÔÍâµÄÈÎÒâTEXT >
Ò»¸öÎı¾×Ö·ûÈôÔÚË«ÒýºÅÀÔòµ±×÷Ò»¸ö×Ö¡£
quoted-string = ( <"> *(qdtext |
quoted-pair ) <"> )
qdtext
= <³ý<">ÒÔÍâµÄÈÎÒâTEXT >
·´Ð±Ïß("\")¿ÉÒÔÓÃ×÷µ¥Ò»×Ö·ûÒýÓýṹ£¬µ«½öÔÚÒýÓÃ×Ö·û´®»ò×¢ÊÍÀï¡£
quoted-pair =
"\" CHAR
3 ÐÒé²ÎÊý
3.1 HTTP°æ±¾
¡¡Copyright
www.cnpaf.net (2007).
All Rights Reserved.
HTTPʹÓÃ"<Ö÷Òª>.<´ÎÒª>"µÄ±àºÅ·½°¸±íʾÐÒé°æ±¾¡£ÐÒéµÄ°æ±¾·½ÕëÊÇÏ£ÍûÔÊÐí·¢ËÍÕß±íʾÏûÏ¢µÄ¸ñʽºÍÐÔÄÜÒÔ±ãÀí½â¸üÉîÒ»²ãµÄHTTPͨÐÅ£¬¶ø²»½ö½öÊǵ±Ç°Í¨ÐÅ»ñµÃµÄÌØÕ÷¡£ÏûÏ¢¹¹¼þµÄÔö¼Ó²»Ó°ÏìͨÐŶ¯×÷£¬»ò½ö½öÔö¼ÓÁËÀ©Õ¹ÓòÖµ£¬°æ±¾ºÅ²¢Ã»ÓÐÒò´Ë±ä»¯¡£ÐÒéµÄ¸Ä±äÔö¼ÓÁËÒ»Ð©ÌØÕ÷£¬Ã»ÓиıäÒ»°ãµÄÏûÏ¢½âÎö¹æÔò£¬µ«ÊÇÔö¼ÓÁËÏûÏ¢µÄÓïÒå»òÕß°µº¬ÁË·¢ËÍÕßÐÂÔöµÄÐÔÄÜ£¬Õâʱ<´ÎÒª>Êý×Ö±ãÒªÔö´ó¡£µ±ÐÒéµÄÏûÏ¢¸ñʽ¸Ä±äʱ£¬<Ö÷Òª>Êý×ÖÔö´ó¡£
HTTPÏûÏ¢µÄ°æ±¾ÔÚÏûÏ¢µÄµÚÒ»ÐÐHTTP-°æ±¾ÓòÀï±íʾ¡£
HTTP-Version =
"HTTP" "/" 1*DIGIT "." 1*DIGIT
×¢ÒâÖ÷ÒªºÍ´ÎÒªÊý×Ö±ØÐë¿´×÷ÊÇÁ½¸ö·ÖÀëµÄÕûÊý£¬¶þÕß¶¼¿ÉÒÔÔö¼Óµ½±Èµ¥Î»Êý»¹´ó¡£ÕâÑù£¬HTTP/2.4µÄ°æ±¾±ÈHTTP/2.3µÍ£¬ÒÀ´ÎHTTP/2.3µÄ°æ±¾±ÈHTTP/12.3µÍ¡£Ê×λµÄÁã±Ø¶¨±»½ÓÊÕÕߺöÊÓ£¬Ò»¶¨²»Òª·¢ËÍ¡£
Ò»¸ö·¢ËͰüº¬HTTP°æ±¾"HTTP/1.1"µÄÇëÇó»òÓ¦´ðÏûÏ¢µÄÓ¦Ó㬱ØÐëÖÁÉÙÓÐÌõ¼þµÄ·þ´Ó±¾ËµÃ÷Êé¡£ÖÁÉÙÓÐÌõ¼þ·þ´Ó±¾ËµÃ÷ÊéµÄÓ¦ÓÃÓ¦¸ÃÔÚÏûÏ¢ÀïʹÓÃ"HTTP/1.1"µÄHTTP-°æ±¾£¬ÈκÎÓë HTTP/1.0²»¼æÈݵÄÏûÏ¢Ôò±ØÐëÕâÑù×ö¡£¹ØÓÚºÎʱ·¢ËÍÌØÊâµÄHTTP-°æ±¾Öµ£¬¸ü¶à×ÊÁÏÇë²Î¿´
RFC 2145[36].
Ò»ÏîÓ¦ÓõÄHTTP°æ±¾ÊÇÓ¦ÓÃÖÁÉÙÓÐÌõ¼þ·þ´ÓµÄ×î¸ßHTTP°æ±¾.
´úÀíºÍÍø¹Ø×ªË͵ÄÏûÏ¢µÄÐÒé°æ±¾ÓëÓ¦Óð汾²»Í¬Ê±£¬ÐèҪСÐÄ¡£¼ÈÈ»ÐÒé°æ±¾±íʾ·¢ËÍÕßµÄÐÒéÐÔÄÜ£¬´úÀí/Íø¹ØÒ»¶¨²»ÄÜ·¢Ëͱêʾ°æ±¾¸ßÓÚËü±¾ÉíµÄʵ¼Ê°æ±¾µÄÏûÏ¢¡£Èç¹ûÊÕµ½¸ü¸ß°æ±¾µÄÇëÇ󣬴úÀí/Íø¹Ø±ØÐë½µµÍÇëÇóµÄ°æ±¾£¬»òÕß·¢³ö³ö´íÓ¦´ð£¬»òÕßÇл»µ½ËíµÀ¶¯×÷¡£
ÓÉÓÚ×ÔRFC 2068[33]·¢²¼ºó·¢ÏÖµÄHTTP/1.0´úÀíÐͬ¹¤×÷ÎÊÌ⣬¸ßËÙ»º´æ´úÀí±ØÐë£¬Íø¹Ø¿ÉÒÔ£¬ËíµÀ±ØÐë²»½«ÇëÇóÌáÉýµ½ËüÃÇÖ§³ÖµÄ×î¸ß°æ±¾¡£´úÀí/Íø¹ØµÄÓ¦´ðµÄÖ÷Òª°æ±¾ºÅ±ØÐëͬÇëÇóÏàͬ¡£
×¢£ºHTTP°æ±¾µÄת»»¿ÉÄÜ»á°üº¬Ïà¹Ø°æ±¾±ØÐè»ò½ûÖ¹µÄÍ·ÓòÐ޸ġ£
3.2 ͳһ×ÊÔ´±êʶ·û£¨URI£©
URIsµÄÐí¶àÃû×ÖÒÑΪÈËËùÖª£ºWWWµØÖ·,ͨÓÃÎļþ±êʶ·û£¬Í¨ÓÃ×ÊÔ´±êʶ·û[3]£¬ÒÔ¼°×îºóͳһ×ÊÔ´¶¨Î»Æ÷(URL)[4]ºÍͳһ×ÊÔ´Ãû³Æ(URN)[20]µÄ½áºÏ¡£Ö»ÒªÓëHTTPÏà¹Ø£¬Í³Ò»×ÊÔ´¶¨Î»Æ÷Ö»ÊǸñʽ»¯µÄ×Ö·û´®£¬Ëüͨ¹ýÃû³Æ£¬µØÖ·£¬»òÈκαðµÄÌØÕ÷È·¶¨ÁË×ÊÔ´µÄλÖá£
3.2.1 Ò»°ãÓï·¨
¸ù¾ÝʹÓÃʱµÄÉÏÏÂÎÄ£¬HTTPÀïµÄURI¿ÉÒÔ±íʾ³É¾ø¶ÔÐÎʽ»ò»ùÓÚÒÑÖªµÄURIµÄÏà¶ÔÐÎʽ¡£Á½ÖÖÐÎʽµÄÇø±ðÊǸù¾ÝÕâÑùµÄÊÂʵ£º¾ø¶ÔURI×ÜÊÇÒÔÒ»¸öÕªÒªÃû×Ö×÷Ϊ¿ªÍ·£¬ÆäºóÊÇÒ»¸öðºÅ¡£¹ØÓÚURL¸üÏ꾡µÄÐÅÏ¢Çë²Î¿´"ͳһ×ÊÔ´±êʶ·û(URI):Ò»°ãÓï·¨ºÍÓïÒå",RFC 2396 [42](´úÌæÁËRFCs 1738 [4]ºÍRFC 1808 [11]).±¾ËµÃ÷Êé²ÉÓÃÄÇ·Ý˵Ã÷ÊéÀï¹ØÓÚ"URI-Ë÷Òý","¾ø¶ÔURI","Ïà¶ÔURI","¶Ë¿Ú","Ö÷»ú","¾ø¶Ô·¾¶"ºÍ"ȨÁ¦"µÄ¶¨Òå.
HTTPÐÒé²»¶ÔURIµÄ³¤¶È×÷ÊÂÏȵÄÏÞÖÆ.·þÎñÆ÷±ØÐëÄܹ»´¦ÀíËüÃÇ·þÎñµÄÈκÎ×ÊÔ´µÄURI,²¢ÇÒÓ¦¸ÃÄܹ»´¦ÀíÎÞÏÞ³¤¶ÈµÄURI,Èç¹ûËüÃÇÌṩ¿ÉÒÔ²úÉúÕâÖÖURIµÄ»ùÓÚGETµÄÐÎʽ.
×¢:·þÎñÆ÷ÔÚÒÀÀµ³¤ÓÚ255×Ö½ÚµÄURIʱӦ½÷É÷,ÒòΪһЩ¾ÉµÄ¿Í»§»ò´úÀíʵÏÖ¿ÉÄܲ»Ö§³ÖÕâЩ³¤¶È.
3.2.2 http URL
http·½°¸Í¨¹ýHTTPÐÒ鶨³öÍøÂç×ÊÔ´µÄλÖÃ.±¾½Ú¶¨ÒåÁËÕâÖÖ·½°¸-http URLÌØÊâµÄÓï·¨ºÍÓïÒå.
http_URL = "http:" "//" host [ ":" port ]
[ abs_path [ "?" query ]]
Èç¹û¶Ë¿ÚΪ¿Õ»òδ¸ø³ö,¾Í¼Ù¶¨Îª80.ÓïÒå¼´:ÒÑʶ±ðµÄ×ÊÔ´·ÅÔÚ·þÎñÆ÷ÉÏ,ÔÚÄÇ̨Ö÷»úµÄÄǸö¶Ë¿ÚÉϼàÌýTCPÁ¬½Ó,¶Ô×ÊÔ´µÄÇëÇóµÄURIΪ¾ø¶Ô·¾¶(5.1.2½Ú). ÎÞÂÛʲô¿ÉÄܵÄʱºò,URLÀïʹÓÃIPµØÖ·¶¼ÊÇÓ¦¸Ã±ÜÃâµÄ(²Î¿´RFC
1900 [24]).Èç¹û¾ø¶ÔµØÖ·Ã»ÓгöÏÖÔÚURLÀï,ËüÓÃ×÷¶Ô×ÊÔ´µÄÇëÇóµÄURIʱ±ØÐë×÷Ϊ"/"¸ø³ö.Èç¹û´úÀíÊÕµ½Ò»¸ö²»Êdzä·Ö×ʸñÓòÃûµÄÖ÷»úÃû,Ò»¶¨²»ÄܸıäÖ÷»úÃû.
3.2.3 URI ±È½Ï
µ±±È½ÏÁ½¸öURIÊÇ·ñÆ¥Åäʱ,¿Í»§Ó¦¸Ã¶ÔÕû¸öURI½øÐÐÇø·Ö´óСд,ÒÔ°Ë×Ö½ÚΪµ¥ÔªµÄ±È½Ï.ÒÔÏÂÇé¿öÀýÍâ:
-Ò»¸öΪ¿Õ»òδ¸ø¶¨µÄ¶Ë¿ÚµÈͬÓÚÄǸöURIË÷ÒýÀïµÄĬÈ϶˿Ú;
-Ö÷»úÃûµÄ±È½Ï±ØÐëÊDz»Çø·Ö´óСдµÄ;
-·½°¸ÃûµÄ±È½Ï±ØÐëÊDz»Çø·Ö´óСдµÄ;
-Ò»¸ö¿Õ¾ø¶Ô·¾¶µÈͬÓÚ¾ø¶Ô·¾¶"/".
Characters other than those in the "reserved" and
"unsafe" sets are equivalent to their ""%" HEX HEX"
encoding.
³ýÁË"±£Áô"»ò"ΣÏÕ"¼¯ÀïµÄ×Ö·û(²Î¼ûRFC 2396 [42]) ,×Ö·ûµÈͬÓÚËüÃǵÄ""%"
HEX HEX"±àÂë.
ÀýÈç,ÒÔÏÂÈý¸öURIÊǵÈͬµÄ:
http://abc.com:80/~smith/home.html
http://ABC.com/~smith/home.html
http://ABC.com:/~smith/home.html
3.3 ÈÕÆÚ/ʱ¼ä¸ñʽ
3.3.1 ÍêÕûÈÕÆÚ
ÀúÊ·ÉϵÄ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¿Í»§ºÍ·þÎñÆ÷±ØÐë½ÓÊÜËùÓÐÈýÖÖ¸ñʽ(ΪÁËͬHTTP/1.0¼æÈÝ),ËäÈ»ËüÃDZØÐëÖ»²úÉúRFC 1123¸ñʽÒÔÔÚÍ·ÓòÀï±íʾHTTPÈÕÆÚÖµ.
×¢:¹ÄÀøÈÕÆÚÖµµÄ½ÓÊÕÕßÔÚ½ÓÊÜ¿ÉÄÜÓÉ·ÇHTTPÓ¦Ó÷¢À´µÄÈÕÆÚֵʱҪ¼á¶¨,ÕâÖÖ·ÇHTTPÓ¦ÓÃÓÐʱÊÇͨ¹ý´úÀí/Íø¹Øµ½SMTP»òNNTP¼ìË÷»òÕÅÌùÏûÏ¢.
ËùÓеÄHTTPÈÕÆÚ/ʱ¼äÓ¡¼Ç¶¼±ØÐëºÁÎÞÀýÍâµÄÒÔ¸ñÁÖÍþÖÎÆ½¾ùʱ¼ä(GMT)±íʾ.ΪÁËHTTP,GMTÍêÈ«µÈͬÓÚUTC(е÷ÊÀ½çʱ¼ä).ÕâÔÚǰÁ½ÖÖÐÎʽÀïÓÃÈý¸ö×ÖĸµÄÊ±ÇøËõд-GMTµÄÔ̺¬À´±íʾ,²¢ÇÒ¶ÁÈ¡ASCʱ¼ä¸ñʽʱ±ØÐëÏȱ»¼Ù¶¨.HTTPÈÕÆÚÇø·Ö´óСд,³ýÁËÔÚÓï·¨ÖÐ×÷ΪSPÌØ±ð°üÀ¨µÄLWSÍâ,Ò»¶¨²»ÄܰüÀ¨¶îÍâµÄLWS.
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¶ÔÈÕÆÚ/ʱ¼äÓ¡¼Ç¸ñʽµÄÇëÇó½ö½öÓ¦ÓÃÔÚÐÒéÁ÷Àï.¿Í»§ºÍ·þÎñÆ÷²»±ØÎªÁËÓû§¼ò±¨,ÇëÇó¼Ç¼¼°ÆäËû¶øÊ¹ÓÃÕâЩ¸ñʽ.
3.3.2 DeltaÃë
һЩHTTPÍ·ÓòÊÕµ½ÏûÏ¢ºó,ÔÊÐíÒÔÊ®½øÖÆÕûÊýÃë±íʾµÄʱ¼äÖµ.
delta-seconds = 1*DIGIT
3.4 ×Ö·û¼¯
HTTPʹÓõĹØÓÚÊõÓï"×Ö·û¼¯"µÄ¶¨ÒåºÍMIMEÖÐËùÃèÊöµÄÒ»Ñù.
±¾ÎĵµÖеÄÊõÓï"×Ö·û¼¯"Ö¸Ò»ÖÖÓÃÒ»¸ö»ò¸ü¶à±í¸ñ½«Ò»¸ö°Ë×Ö½ÚÐòÁÐת»»³ÉÒ»¸ö×Ö·ûÐòÁеķ½·¨.×¢ÒâÁíÒ»·½ÏòµÄÎÞÌõ¼þת»»ÊDz»ÐèÒªµÄ,ÔÚÕâÖÖת»»Àï,²¢²»ÊÇËùÓеÄ×Ö·û¶¼ÄÜÔÚÒ»¸ö¸ø¶¨×Ö·û¼¯ÀïµÃµ½,²¢ÇÒ×Ö·û¼¯¿ÉÄÜÌṩ¶à¸ö°Ë½øÖÆÐòÁбíʾһ¸öÌØ¶¨×Ö·û.Õâ¸ö¶¨Ò彫ÔÊÐí¸÷ÖÖ×Ö·û±àÂ뷽ʽ,´Ó¼òµ¥µÄµ¥±í¸ñÓ³ÉäÈçUS-ASCIIµ½¸´Ôӵıí¸ñ½»»»·½·¨ÈçISO-2022µÄ¼¼ÊõÀïËùʹÓõÄ.È»¶ø,ÓëMIME×Ö·û¼¯Ãû×ÖÏà¹ØÁªµÄ¶¨Ò屨Ðë³ä·Ö˵Ã÷´Ó°Ë×ֽڱ任µ½×Ö·ûËùʵÏÖµÄÓ³Éä.ÌØ±ðµÄ,ʹÓÃÍⲿÂÖÀªÐÅÏ¢À´¾ö¶¨¾«È·Ó³ÉäÊDz»ÔÊÐíµÄ.
×¢:ÕâÀïʹÓõÄÊõÓï"×Ö·û¼¯"¸üÒ»°ãµÄ±»³Æ×÷Ò»ÖÖ"×Ö·û±àÂë".²»¹ý¼ÈÈ»HTTPºÍMIMEʹÓÃͬÑùµÄ×¢²á±í,¹²ÓÃÊõÓïÊǺÜÖØÒªµÄ.
HTTP×Ö·û¼¯Óò»Çø·Ö´óСдµÄ±ê¼Ç±íʾ.ÍêÈ«±ê¼Ç¼¯ºÏÓÉIANA×Ö·û¼¯×¢²á±í[19]¶¨Òå.
charset =
token
¾¡¹ÜHTTPÔÊÐíÓÃÈÎÒâ±ê¼Ç×÷Ϊ×Ö·û¼¯µÄÖµ,ÈκÎÔÚIANA×Ö·û¼¯×¢²á±íÀïÓÐÔ¤ÏÈÈ·¶¨ÖµµÄ±ê¼Ç±ØÐë±íʾ¸Ã×¢²á±í¶¨ÒåµÄ×Ö·û¼¯.¶ÔÄÇЩIANA¶¨ÒåµÄ×Ö·û¼¯,Ó¦ÓÃÓ¦¸ÃÏÞÖÆÊ¹ÓÃ×Ö·û¼¯.
ʵÏÖÕßÓ¦¸Ã×¢ÒâIETF×Ö·û¼¯µÄÒªÇó[38][41].
3.4.1 ʧ×Ù×Ö·û¼¯
һЩHTTP/1.0Èí¼þ½«Ã»ÓÐ×Ö·û¼¯²ÎÊýµÄÄÚÈÝÀàÐÍÍ·´íÎóµÄÀí½âΪ"½ÓÊÕÕßÓ¦¸Ã²Â²Â."Èô·¢ËÍÕßÏ£Íû±ÜÃâÕâÖÖÇé¿ö,¿ÉÒÔ°üº¬Ò»¸ö×Ö·û¼¯²ÎÊý,¼´Ê¹×Ö·û¼¯ÊÇISO-8859-1;µ±ÖªµÀ²»»áʹ½ÓÊÕÕß»ìÏýʱ,Ò²Ó¦¸ÃÕâÑù×ö.
²»ÐÒµÄÊÇ,һЩ¾ÉµÄHTTP/1.0²»ÄÜÊʵ±´¦ÀíÏêϸµÄ×Ö·û¼¯²ÎÊý.HTTP/1.1½ÓÊÕÕß±ØÐëÖØÊÓ·¢ËÍÕßÌṩµÄ×Ö·û¼¯±ê×¢;µ±×î³õÏÔʾÎĵµÊ±£¬ÄÇЩÌṩ"²Â"×Ö·û¼¯·þÎñµÄÓû§´úÀí±ØÐëʹÓÃÄÚÈÝÀàÐÍÓòÖеÄ×Ö·û¼¯£¬Èç¹ûËüÃÇÖ§³ÖÄǸö×Ö·û¼¯£¬¶ø²»ÊǽÓÊÕÕßµÄÊ×Ñ¡Ïî¡£²Î¿´3.7.1½Ú¡£
3.5 ÄÚÈݱàÂë
ÄÚÈݱàÂëÖµ±íʾһÖÖÒѾ»ò¿ÉÒÔÓ¦ÓÃÓÚʵÌåµÄ±àÂë±ä»»¡£ÄÚÈݱàÂëÖ÷ÒªÓÃÀ´ÔÊÐíÎĵµÑ¹Ëõ£¬»»¾ä»°Ëµ£¬ÓÐЧµÄ±ä»»¶ø²»ËðʧËüµÄ»ù±¾Ã½ÌåÀàÐ͵ÄÌØÐÔ£¬Ò²²»¶ªÊ§ÐÅÏ¢¡£¾³£µØ£¬ÊµÌåÒÔ±àÂëÐÎʽ´¢´æ,Ö±½Ó´«ËÍ,Ö»ÄÜÓɽÓÊÕÕßÒëÂë.
content-coding = token
ËùÓÐÄÚÈݱàÂëÖµ¶¼ÊDz»Çø·Ö´óСдµÄ.HTTP/1.1ÔÚ½ÓÊÕÒëÂë(14.3½Ú)ºÍÄÚÈÝÒëÂë(14.11½Ú)µÄÍ·ÓòÀïʹÓÃÄÚÈݱàÂëÖµ.¾¡¹Ü¸ÃÖµÃèÊöÁËÄÚÈݱàÂë,¸üÖØÒªµÄÊÇËüÖ¸³öÐèҪʲô±àÂë»úÖÆ
À´³ýÈ¥±àÂë.
»¥ÁªÍø¸³Öµ»ú¹¹(IANA)³äµ±ÄÚÈݱàÂëÖµ±ê¼ÇµÄ×¢²á´¦.×î³õ,×¢²á±í°üº¬ÏÂÁбê¼Ç:
gzip£¨Ñ¹Ëõ³ÌÐò£©
Ò»ÖÖÓÉÎļþѹËõ³ÌÐò"gzip"(GNU zip)---ÈçRFC 1952ËùÃèÊö---Éú³ÉµÄ±àÂë¸ñʽ.ÕâÖÖ¸ñʽÊÇÒ»ÖÖ32λCRC Lempel-Ziv±àÂë(LZ77). [ÒëÕß×¢]CRC:Ñ»·ÈßÓàУÑé
compress£¨Ñ¹Ëõ£©
ÓÉͨÓÃUNIXÎļþѹËõ³ÌÐò"compress"Éú³ÉµÄ±àÂë¸ñʽ.ÕâÖÖ¸ñʽÊÇÒ»ÖÖ¾ßÓпÉÊÊÓ¦ÐÔµÄLempel-Ziv-Welch±àÂë.
¶ÔδÀ´µÄ±àÂëÀ´Ëµ,ÓóÌÐòÃûʶ±ð±àÂë¸ñʽÊDz»¿ÉÈ¡,ÁîÈËÆøÄÙµÄ.ÔÚÕâÀïËûÃǵÄÓô¦ÊÇ×÷ΪÀúʷʵ¼ùµÄ´ú±í¶ø²»ÊǺõķ½°¸.ΪÁËͬÒÔǰµÄHTTPʵÏÖÏà¼æÈÝ,Ó¦ÓÃÓ¦¸Ã½«"x-gzip"ºÍ"x-compress"·Ö±ðµÈͬÓÚ"gzip"ºÍ"compress".
deflate£¨ËõС£©©¡
RFC 1950 [31]¶¨ÒåµÄ"zlib"¸ñʽÓëRFC 1951 [29]ÃèÊöµÄ"deflate"ѹËõ»úÖÆµÄ×éºÏ.
Identity£¨±êʶ£©
ȱʡ(±êʶ)±àÂë;ÎÞÂÛÈçºÎ,²»½øÐÐת»¯µÄÓ¦ÓÃ.ÕâÖÖÄÚÈÝÒëÂë½ö±»ÓÃÓÚ½ÓÊÜÒëÂ뱨ͷ,²¢ÇÒ²»Äܱ»ÓÃÔÚÄÚÈݱàÂ뱨ͷ.
еÄÄÚÈÝÒëÂëÖµµÄ±ê¼ÇÓ¦¸Ã×¢²á;ΪÁËÔÊÐí¿Í»§ºÍ·þÎñÆ÷¼äµÄ»¥ÓÃÐÔ,ÄÚÈÝÒëÂëÔËËãµÄ¹æ·¶ÐèҪʵÏÖÒ»¸ö¿É±»¹«¿ªÀûÓò¢ÄܶÀÁ¢ÊµÏÖµÄÐÂÖµ,²¢ÇÒÓëÕâ½ÚÖ