±à¼ÍƼö: |
ÎÄÕ½²ÊöHTTP
ÄÚÈÝÐÉÌ£¬ÄÚÈÝÐÉ̵ÄÖÖÀ࣬Accept-Charset£¬Content-Type,Ï£Íû¶ÔÄúÓÐËù°ïÖú
±¾ÎÄÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûÈí¼þDelores±à¼ÍƼö |
|
HTTP ÄÚÈÝÐÉÌ
ʲôÊÇÄÚÈÝÐÉÌ
ÔÚ HTTP ÖУ¬ÄÚÈÝÐÉÌÊÇÒ»ÖÖÓÃÓÚÔÚͬһ URL ÉÏÌṩ×ÊÔ´µÄ²»Í¬±íʾÐÎʽµÄ»úÖÆ¡£ÄÚÈÝÐÉÌ»úÖÆÊÇÖ¸¿Í»§¶ËºÍ·þÎñÆ÷¶Ë¾ÍÏìÓ¦µÄ×ÊÔ´ÄÚÈݽøÐн»É棬ȻºóÌṩ¸ø¿Í»§¶Ë×îΪÊʺϵÄ×ÊÔ´¡£ÄÚÈÝÐÉÌ»áÒÔÏìÓ¦×ÊÔ´µÄÓïÑÔ¡¢×Ö·û¼¯¡¢±àÂ뷽ʽµÈ×÷ΪÅжϵıê×¼¡£

ÄÚÈÝÐÉ̵ÄÖÖÀà
ÄÚÈÝÐÉÌÖ÷ÒªÓÐÒÔÏÂ3ÖÖÀàÐÍ£º
·þÎñÆ÷Çý¶¯ÐÉÌ£¨Server-driven Negotiation£©
ÕâÖÖÐÉÌ·½Ê½ÊÇÓÉ·þÎñÆ÷¶Ë½øÐÐÄÚÈÝÐÉÌ¡£·þÎñÆ÷¶Ë»á¸ù¾ÝÇëÇóÊײ¿×ֶνøÐÐ×Ô¶¯´¦Àí
¿Í»§¶ËÇý¶¯ÐÉÌ£¨Agent-driven Negotiation£©
ÕâÖÖÐÉÌ·½Ê½ÊÇÓɿͻ§¶ËÀ´½øÐÐÄÚÈÝÐÉÌ¡£
͸Ã÷ÐÉÌ£¨Transparent Negotiation£©
ÊÇ·þÎñÆ÷Çý¶¯ºÍ¿Í»§¶ËÇý¶¯µÄ½áºÏÌ壬ÊÇÓÉ·þÎñÆ÷¶ËºÍ¿Í»§¶Ë¸÷×Ô½øÐÐÄÚÈÝÐÉ̵ÄÒ»ÖÖ·½·¨¡£
ÄÚÈÝÐÉ̵ķÖÀàÓкܶàÖÖ£¬Ö÷ÒªµÄ¼¸ÖÖÀàÐÍÊÇ Accept¡¢Accept-Charset¡¢Accept-Encoding¡¢Accept-Language¡¢Content-Language¡£
Ò»°ãÀ´Ëµ£¬¿Í»§¶ËÓà Accept Í·¸æËß·þÎñÆ÷Ï£Íû½ÓÊÕʲôÑùµÄÊý¾Ý£¬¶ø·þÎñÆ÷Óà Content Í·¸æË߿ͻ§¶Ëʵ¼Ê·¢ËÍÁËʲôÑùµÄÊý¾Ý¡£
ΪʲôÐèÒªÄÚÈÝÐÉÌ
ÎÒÃÇΪʲôÐèÒªÄÚÈÝÐÉÌÄØ£¿ÔڻشðÕâ¸öÎÊÌâǰÎÒÃÇÏÈÀ´¿´Ò»Ï TCP ºÍ HTTP µÄ²»Í¬¡£
ÔÚ TCP / IP ÐÒéÕ»À´«ÊäÊý¾Ý»ù±¾É϶¼ÊÇ header+body µÄ¸ñʽ¡£µ« TCP¡¢UDP ÒòΪÊÇ´«Êä²ãµÄÐÒ飬ËüÃDz»»á¹ØÐÄ body Êý¾ÝÊÇʲô£¬Ö»Òª°ÑÊý¾Ý·¢Ë͵½¶Ô·½¾ÍËãÊÇÍê³ÉÁËÈÎÎñ¡£
¶ø HTTP ÐÒéÔò²»Í¬£¬ËüÊÇÓ¦ÓòãµÄÐÒ飬Êý¾Ýµ½´ïÖ®ºóÐèÒª¸æËßÓ¦ÓóÌÐòÕâÊÇʲôÊý¾Ý¡£µ±È»²»¸æËßÓ¦ÓÃÕâÊÇÄÄÖÖÀàÐ͵ÄÊý¾Ý£¬Ó¦ÓÃÒ²¿ÉÒÔͨ¹ý²»¶Ï³¢ÊÔÀ´Åжϣ¬µ«ÕâÖÖ·½Ê½ÎÞÒÉÊ®·ÖµÍЧ£¬¶øÇÒÓкܴó¼¸ÂÊ»á¼ì²é²»³öÀ´ÎļþÀàÐÍ¡£
ËùÒÔ¼øÓÚ´Ë£¬ä¯ÀÀÆ÷ºÍ·þÎñÆ÷ÐèÒª¾ÍÊý¾ÝµÄ´«Êä´ï³ÉÒ»Ö£¬ä¯ÀÀÆ÷ÐèÒª¸æËß·þÎñÆ÷×Ô¼ºÏ£ÍûÄܹ»½ÓÊÕʲôÑùµÄÊý¾Ý£¬ÐèҪʲôÑùµÄѹËõ¸ñʽ£¬Ê²Ã´ÓïÑÔ£¬ÄÄÖÖ×Ö·û¼¯µÈ£»¶ø·þÎñÆ÷ÐèÒª¸æË߿ͻ§¶Ë×Ô¼ºÄܹ»ÌṩµÄ·þÎñÊÇʲô¡£
ËùÒÔÎÒÃǾÍÒý³öÁËÄÚÈÝÐÉ̵ļ¸ÖÖ¸ÅÄÏÂÃæÒÀ´ÎÀ´½øÐÐ̽ÌÖ
ÄÚÈÝÐÉ̱êÍ·
Accept
½ÓÊÜÇëÇó HTTP ±êÍ·»áͨ¸æ¿Í»§¶Ë×Ô¼ºÄܹ»½ÓÊÜµÄ MIME ÀàÐÍ
ÄÇôʲôÊÇ MIME ÀàÐÍÄØ£¿ÔڻشðÕâ¸öÎÊÌâǰÄãÓ¦¸ÃÏÈÁ˽âÒ»ÏÂʲôÊÇ MIME
MIME: MIME (Multipurpose Internet Mail Extensions) ÊÇÃèÊöÏûÏ¢ÄÚÈÝÀàÐ͵ÄÒòÌØÍø±ê×¼¡£MIME ÏûÏ¢Äܰüº¬Îı¾¡¢Í¼Ïñ¡¢ÒôƵ¡¢ÊÓÆµÒÔ¼°ÆäËûÓ¦ÓóÌÐòרÓõÄÊý¾Ý¡£
Ò²¾ÍÊÇ˵£¬MIME ÀàÐÍÆäʵ¾ÍÊÇһϵÁÐÏûÏ¢ÄÚÈÝÀàÐ͵ļ¯ºÏ¡£ÄÇô MIME ÀàÐͶ¼ÓÐÄÄÐ©ÄØ£¿
Îı¾Îļþ£º text/html¡¢text/plain¡¢text/css¡¢application/xhtml+xml¡¢application/xml
ͼƬÎļþ£º image/jpeg¡¢image/gif¡¢image/png
ÊÓÆµÎļþ£º video/mpeg¡¢video/quicktime
Ó¦ÓóÌÐò¶þ½øÖÆÎļþ£º application/octet-stream¡¢application/zip
±ÈÈ磬Èç¹ûä¯ÀÀÆ÷²»Ö§³Ö PNG ͼƬµÄÏÔʾ£¬ÄÇ Accept ¾Í²»Ö¸¶¨image/png£¬¶øÖ¸¶¨¿É´¦ÀíµÄ image/gif ºÍ image/jpeg µÈͼƬÀàÐÍ¡£
Ò»°ã MIME ÀàÐÍÒ²»áºÍ q Õâ¸öÊôÐÔÒ»ÆðʹÓã¬q ÊÇʲô£¿q ±íʾµÄÊÇÈ¨ÖØ£¬À´¿´Ò»¸öÀý×Ó
Accept: text/html,application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8 |
ÕâÊÇʲôÒâË¼ÄØ£¿ÈôÏëÒª¸øÏÔʾµÄýÌåÀàÐÍÔö¼ÓÓÅÏȼ¶£¬ÔòʹÓà q= À´¶îÍâ±íÊ¾È¨ÖØÖµ£¬Ã»ÓÐÏÔÊ¾È¨ÖØµÄʱºòĬÈÏÖµÊÇ1.0 £¬ÎÒ¸øÄãÁиö±í¸ñÄã¾ÍÃ÷°×ÁË

Ò²¾ÍÊÇ˵£¬ÕâÊÇÒ»¸ö·ÅÖÃ˳Ðò£¬È¨ÖظߵÄÔÚǰ£¬µÍµÄÔÚºó£¬application/xml;q=0.9 ÊDz»¿É·Ö¸îµÄÕûÌå¡£
Accept-Charset
Accept-charset ÊôÐԹ涨·þÎñÆ÷´¦Àí±íµ¥Êý¾ÝËù½ÓÊܵÄ×Ö·û±àÂ룻Accept-charset ÊôÐÔÔÊÐíÄãÖ¸¶¨Ò»ÏµÁÐ×Ö·û¼¯£¬·þÎñÆ÷±ØÐëÖ§³ÖÕâЩ×Ö·û¼¯£¬´Ó¶øµÃÒÔÕýÈ·½âÊÍ±íµ¥ÖеÄÊý¾Ý¡£
Accept-Charset ûÓжÔÓ¦µÄ±êÍ·£¬·þÎñÆ÷»á°ÑÕâ¸öÖµ·ÅÔÚ Content-TypeÖÐÓà charset=xxxÀ´±íʾ
ÀýÈ磬ä¯ÀÀÆ÷ÇëÇó GBK »ò UTF-8 µÄ×Ö·û¼¯£¬È»ºó·þÎñÆ÷·µ»ØµÄÊÇ UTF-8 ±àÂ룬¾ÍÊÇÏÂÃæÕâÑù
Accept-Charset:
gbk, utf-8
Content-Type: text/html; charset=utf-8 |
Accept-Language
Êײ¿×Ö¶Î Accept-Language ÓÃÀ´¸æÖª·þÎñÆ÷Óû§´úÀíÄܹ»´¦ÀíµÄ×ÔÈ»ÓïÑÔ¼¯£¨Ö¸ÖÐÎÄ»òÓ¢Îĵȣ©£¬ÒÔ¼°×ÔÈ»ÓïÑÔ¼¯µÄÏà¶ÔÓÅÏȼ¶¡£¿ÉÒ»´ÎÖ¸¶¨¶àÖÖ×ÔÈ»ÓïÑÔ¼¯¡£ºÍ Accept Êײ¿×Ö¶ÎÒ»Ñù£¬°´È¨ÖØÖµ q= À´±íʾÏà¶ÔÓÅÏȼ¶¡£
Accept-Language:
en-US,en;q=0.5 |
Accept-Encoding
±íʾ HTTP ±êÍ·»á±êÃ÷¿Í»§¶ËÏ£Íû·þÎñ¶Ë·µ»ØµÄÄÚÈݱàÂ룬Õâͨ³£ÊÇÒ»ÖÖѹËõËã·¨¡£Accept-Encoding Ò²ÊÇÊôÓÚÄÚÈÝÐÉÌ µÄÒ»²¿·Ö£¬Ê¹Óò¢Í¨¹ý¿Í»§¶ËÑ¡Ôñ Content-Encoding ÄÚÈݽøÐзµ»Ø¡£
¼´Ê¹¿Í»§¶ËºÍ·þÎñÆ÷¶¼Äܹ»Ö§³ÖÏàͬµÄѹËõËã·¨£¬·þÎñÆ÷Ò²¿ÉÄÜÑ¡Ôñ²»Ñ¹Ëõ²¢·µ»Ø£¬ÕâÖÖÇé¿ö¿ÉÄÜÊÇÓÉÓÚÕâÁ½ÖÖÇé¿öÔì³ÉµÄ:
Òª·¢Ë͵ÄÊý¾ÝÒѾ±»Ñ¹ËõÁËÒ»´Î£¬µÚ¶þ´ÎѹËõ²¢²»»áµ¼Ö·¢Ë͵ÄÊý¾Ý¸üС
·þÎñÆ÷¹ýÔØ£¬ÎÞ·¨³ÐÊÜѹËõ´øÀ´µÄÐÔÄÜ¿ªÏú£¬Í¨³££¬Èç¹û·þÎñÆ÷ʹÓà CPU ³¬¹ý 80% £¬Microsoft Ôò½¨Ò鲻ҪʹÓÃѹËõ
ÏÂÃæÊÇ Accept-Encoding µÄʹÓ÷½Ê½
Accept-Encoding:
gzip
Accept-Encoding: compress
Accept-Encoding: deflate
Accept-Encoding: br
Accept-Encoding: identity
Accept-Encoding: *
Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5 |
ÉÏÃæµÄ¼¸ÖÖ±íÊö·½Ê½¾ÍÒѾ°Ñ Accept-Encoding µÄÊôÐÔÁÐÈ«ÁË
gzip: ÓÉÎļþѹËõ³ÌÐò gzip Éú³ÉµÄ±àÂë¸ñʽ£¬Ê¹Óà Lempel-Ziv±àÂ루LZ77£©ºÍ32λCRCµÄѹËõ¸ñʽ
compress: ʹÓÃLempel-Ziv-Welch£¨LZW£©Ëã·¨µÄѹËõ¸ñʽ
deflate: ʹÓà zlib ½á¹¹ºÍ deflate ѹËõËã·¨µÄѹËõ¸ñʽ
br: ʹÓà Brotli Ëã·¨µÄѹËõ¸ñʽ
²»Ö´ÐÐѹËõ»ò²»»á±ä»¯µÄĬÈϱàÂë¸ñʽ
* : Æ¥Åä±êÍ·ÖÐδÁгöµÄÈκÎÄÚÈݱàÂ룬Èç¹ûûÓÐÁгö Accept-Encoding £¬Õâ¾ÍÊÇĬÈÏÖµ£¬²¢²»Òâζ×ÅÖ§
³ÖÈκÎËã·¨£¬Ö»ÊDZíʾûÓÐÆ«ºÃ
;q= ²ÉÓÃÈ¨ÖØ q ÖµÀ´±íʾÏà¶ÔÓÅÏȼ¶£¬ÕâµãÓëÊײ¿×Ö¶Î Accept Ïàͬ¡£
Content-Type
Content-Type ʵÌå±êÍ·ÓÃÓÚָʾ×ÊÔ´µÄ MIME ÀàÐÍ¡£×÷ΪÏìÓ¦£¬Content-Type ±êÍ·¸æË߿ͻ§¶Ë·µ»ØµÄÄÚÈݵÄÄÚÈÝÀàÐÍʵ¼ÊÉÏÊÇʲô¡£Content-type ÓÐÁ½ÖÖÖµ : MIME ÀàÐͺÍ×Ö·û¼¯±àÂ룬ÀýÈç
Content-Type:
text/html; charset=UTF-8 |
ÔÚijЩÇé¿öÏ£¬ä¯ÀÀÆ÷½«Ö´ÐÐ MIME Ðá̽£¬²¢ÇÒ²»Ò»¶¨×ñѴ˱êÍ·µÄÖµ£»Îª·ÀÖ¹´ËÐÐΪ£¬¿ÉÒÔ½«±êÍ· X-Content-Type-Options ÉèÖÃΪ nosniff¡£
Content-Encoding
Content-Encoding ʵÌå±êÍ·ÓÃÓÚѹËõýÌåÀàÐÍ£¬ËüÈÿͻ§¶ËÖªµÀÈçºÎ½øÐнâÂë²Ù×÷£¬´Ó¶øÊ¹¿Í»§¶Ë»ñµÃ Content-Type ±êÍ·ÒýÓÃµÄ MIME ÀàÐÍ¡£±íʾÈçÏÂ
Content-Encoding:
gzip
Content-Encoding: compress
Content-Encoding: deflate
Content-Encoding: identity
Content-Encoding: br
Content-Encoding: gzip, identity
Content-Encoding: deflate, gzip |
Content-Language
Content-Language ʵÌå±êÍ·ÓÃÓÚÃèÊöÃæÏòÊÜÖÚµÄÓïÑÔ£¬ÒÔ±ãʹÓû§¸ù¾ÝÓû§×Ô¼ºµÄÊ×Ñ¡ÓïÑÔ½øÐÐÇø·Ö¡£ÀýÈç
Content-Language:
de-DE
Content-Language: en-US
Content-Language: de-DE, en-CA |
ÏÂÃæ¸ù¾ÝÄÚÈÝÐÉ̶ÔÓ¦µÄÇëÇó/ÏìÓ¦±êÍ·£¬ÎÒÁÐÁËÒ»ÕÅͼ¹©Äã²Î¿¼£¬×¢ÒâÆäÖÐ Accept-Charset ûÓжÔÓ¦µÄ Content-Charset £¬¶øÊÇͨ¹ý Content-Type À´±íʾ¡£

HTTP ÈÏÖ¤
HTTP ÌṩÁËÓÃÓÚ·ÃÎÊ¿ØÖƺÍÉí·ÝÈÏÖ¤µÄ¹¦ÄÜ£¬ÏÂÃæ¾Í¶Ô HTTP µÄȨÏÞºÍÈÏÖ¤¹¦ÄܽøÐнéÉÜ
ͨÓà HTTP ÈÏÖ¤¿ò¼Ü
RFC 7235 ¶¨ÒåÁË HTTP Éí·ÝÈÏÖ¤¿ò¼Ü£¬·þÎñÆ÷¿ÉÒÔ¸ù¾ÝÆäÎĵµµÄ¶¨ÒåÀ´¼ì²é¿Í»§¶ËÇëÇ󡣿ͻ§¶ËÒ²¿ÉÒÔ¸ù¾ÝÆäÎĵµ¶¨ÒåÀ´ÌṩÉí·ÝÑéÖ¤ÐÅÏ¢¡£
ÇëÇó/ÏìÓ¦µÄ¹¤×÷Á÷³ÌÈçÏ£º·þÎñÆ÷ÒÔ401(δÊÚȨ) µÄ״̬ÏìÓ¦¿Í»§¶Ë¸æË߿ͻ§¶Ë·þÎñÆ÷ÐèÒªÈÏÖ¤ÐÅÏ¢£¬¿Í»§¶ËÌṩÖÁÉÙÒ»¸ö www-Authenticate µÄÏìÓ¦±êÍ·½øÐÐÊÚȨÐÅÏ¢µÄÈÏÖ¤¡£ÏëҪͨ¹ý·þÎñÆ÷½øÐÐÉí·ÝÈÏÖ¤µÄ¿Í»§¶Ë¿ÉÒÔÔÚÇëÇó±êÍ·×Ö¶ÎÖÐÌí¼ÓÈÏÖ¤±êÍ·½øÐÐÉí·ÝÈÏÖ¤£¬Ò»°ãµÄÈÏÖ¤¹ý³ÌÈçÏÂ

Ê×Ïȿͻ§¶Ë·¢ÆðÒ»¸ö HTTP ÇëÇ󣬲»´øÓÐÈκÎÈÏÖ¤±êÍ·£¬·þÎñÆ÷¶Ô´Ë HTTP ÇëÇó×÷³öÏìÓ¦£¬·¢ÏÖ´Ë HTTP ÐÅϢδ´øÓÐÈÏ֤ƾ¾Ý£¬·þÎñÆ÷ͨ¹ý www-Authenticate±êÍ··µ»Ø 401 ¸æË߿ͻ§¶Ë´ËÇëÇóδͨ¹ýÈÏÖ¤¡£È»ºó¿Í»§¶Ë½øÐÐÓû§ÈÏÖ¤£¬ÈÏÖ¤Íê±ÏºóÖØÐ·¢Æð HTTP ÇëÇó£¬Õâ´Î HTTP ÇëÇó´øÓÐÓû§ÈÏ֤ƾ¾Ý£¨×¢Ò⣬Õû¸öÉí·ÝÈÏÖ¤µÄ¹ý³Ì±ØÐëͨ¹ý HTTPS Á¬½Ó±£Ö¤°²È«£©£¬µ½´ï·þÎñÆ÷ºó·þÎñÆ÷»á¼ì²éÈÏÖ¤ÐÅÏ¢£¬Èç¹û²»·ûºÏ·þÎñÆ÷ÈÏÖ¤ÐÅÏ¢£¬»á·µ»Ø 403 Forbidden ±íʾÓû§ÈÏ֤ʧ°Ü£¬Èç¹ûÂú×ãÈÏÖ¤ÐÅÏ¢£¬Ôò·µ»Ø 200 OK¡£
ÎÒÃÇÖªµÀ£¬¿Í»§¶ËºÍ·þÎñÆ÷Ö®¼äµÄ HTTP Á¬½Ó¿ÉÒÔ±»´úÀí»º´æÖØÐ·¢ËÍ£¬ËùÒÔÈÏÖ¤ÐÅÏ¢Ò²ÊÊÓÃÓÚ´úÀí·þÎñÆ÷¡£
´úÀíÈÏÖ¤
ÓÉÓÚ×ÊÔ´ÈÏÖ¤ºÍ´úÀíÈÏÖ¤¿ÉÒÔ¹²´æ£¬Òò´ËÐèÒª²»Í¬µÄÍ·ºÍ״̬Â룬ÔÚ´úÀíµÄÇé¿öÏ£¬»á·µ»Ø×´Ì¬Âë 407(ÐèÒª´úÀíÈÏÖ¤)£¬ Proxy-Authenticate ÏìӦͷ°üº¬ÖÁÉÙÒ»¸öÊÊÓÃÓÚ´úÀíµÄÇé¿ö£¬Proxy-AuthorizationÇëÇóÍ·ÓÃÓÚ½«Ö¤ÊéÌṩ¸ø´úÀí·þÎñÆ÷¡£ÏÂÃæ·Ö±ðÀ´ÈÏʶһÏÂÕâÁ½¸ö±êÍ·
Proxy-Authenticate
HTTP Proxy-Authenticate ÏìÓ¦±êÍ·¶¨ÒåÁËÉí·ÝÑéÖ¤·½·¨£¬Ó¦Ê¹ÓøÃÉí·ÝÑéÖ¤·½·¨À´·ÃÎÊ´úÀí·þÎñÆ÷ºóÃæµÄ×ÊÔ´¡£Ëü½«ÇëÇóÈÏÖ¤µ½´úÀí·þÎñÆ÷£¬´Ó¶øÔÊÐíËü½øÒ»²½·¢ËÍÇëÇó¡£ÀýÈç
Proxy-Authenticate:
Basic
Proxy-Authenticate: Basic realm="Access to
the internal site" |
Proxy-Authorization
Õâ¸ö HTTP ÇëÇó±êÍ·ºÍÉÏÃæµÄ Proxy-Authenticate Æ´½ÓºÜÏàËÆ£¬µ«ÊǸÅÄͬ£¬Õâ¸ö±êÍ·ÓÃÓÚÏò´úÀí·þÎñÆ÷Ìṩƾ¾Ý£¬ÀýÈç
Proxy-Authorization:
Basic YWxhZGRpbjpvcGVuc2VzYW1l |
ÏÂÃæÊÇ´úÀí·þÎñÆ÷µÄÇëÇó/ÏìÓ¦ÈÏÖ¤¹ý³Ì

¸ö¹ý³ÌºÍͨÓõĹý³ÌÀàËÆ£¬ÎÒÃǾͲ»ÔÙÏêϸչ¿ªÃèÊöÁË¡£
½ûÖ¹·ÃÎÊ
Èç¹û´úÀí·þÎñÆ÷ÊÕµ½µÄÓÐЧƾ¾Ý²»×ãÒÔ»ñÈ¡¶Ô¸ø¶¨×ÊÔ´µÄ·ÃÎÊȨÏÞ£¬Ôò·þÎñÆ÷ӦʹÓÃ403 Forbidden״̬´úÂë½øÐÐÏìÓ¦¡£Óë 401 Unauthorized ºÍ 407 Proxy Authorization Required ²»Í¬£¬¸ÃÓû§ÎÞ·¨½øÐÐÉí·ÝÑéÖ¤¡£
WWW-Authenticate ºÍ Proxy-Authenticate Í·
WWW-Authenticate ºÍ Proxy-Authenticate ÏìӦͷ¶¨ÒåÁË»ñµÃ¶Ô×ÊÔ´·ÃÎÊȨÏÞµÄÉí·ÝÑéÖ¤·½·¨¡£ËûÃÇÐèÒªÖ¸¶¨Ê¹ÓÃÄÄÖÖÉí·ÝÑéÖ¤·½°¸£¬ÒÔ±ãÏ£ÍûÊÚȨµÄ¿Í»§¶ËÖªµÀÈçºÎÌṩƾ¾Ý¡£ËüÃǵÄÒ»°ã±íʾÐÎʽÈçÏÂ
WWW-Authenticate: < type > realm=< realm >
Proxy-Authenticate: < type > realm=< realm >
ÎÒÏëÄã´ÓÉÏÃæ¿´µ½ÕâÀïÒ»¶¨»áºÃÆæ < type > ºÍ realmÊÇʲô¶«Î÷£¬ÏÖÔÚ¾ÍÀ´½âÊÍÏ¡£
< type > ÊÇÈÏÖ¤ÐÒ飬Basic ÊÇÏÂÃæÐÒéÖÐ×îÆÕ±éʹÓõÄ
RFC 7617 Öж¨ÒåÁËBasic HTT PÉí·ÝÑéÖ¤·½°¸£¬¸Ã·½°¸½«Æ¾¾Ý×÷ΪÓû§ID /ÃÜÂë¶Ô´«Ê䣬²¢Ê¹Óà base64 ½øÐбàÂë¡£
ÆäËûµÄÈÏÖ¤ÐÒéÖ÷ÒªÓÐ

realm ÓÃÓÚÃèÊö±£»¤Çø»òָʾ±£»¤·¶Î§£¬Õâ¿ÉÄÜÊÇÖîÈç Access to the staging site(·ÃÎʵǽվµã) »òÕßÀàËÆµÄ£¬ÕâÑùÓû§¾Í¿ÉÒÔÖªµÀËûÃÇÒª·ÃÎÊÄĸöÇøÓò¡£
Authorization ºÍ Proxy-Authorization ±êÍ·
Authorization ºÍ Proxy-Authorization ÇëÇó±êÍ·°üº¬ÓÃÓÚͨ¹ý´úÀí·þÎñÆ÷¶ÔÓû§´úÀí½øÐÐÉí·ÝÑéÖ¤µÄƾ¾Ý¡£ÔÚ´Ë£¬ÔÙ´ÎÐèÒªÀàÐÍ£¬ÆäºóÊÇÆ¾¾Ý£¬È¡¾öÓÚʹÓÃÄÄÖÖÉí·ÝÑéÖ¤·½°¸£¬¿ÉÒÔ¶ÔÆ¾¾Ý½øÐбàÂë»ò¼ÓÃÜ¡£Ò»°ã±íʾÈçÏÂ
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
Proxy-Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
HTTP »º´æ
ͨ¹ý°ÑÇëÇó/ÏìÓ¦»º´æÆðÀ´ÓÐÖúÓÚÌáÉýϵͳµÄÐÔÄÜ£¬Web »º´æ¼õÉÙÁËÑÓ³ÙºÍÍøÂç´«ÊäÁ¿£¬Òò´Ë¼õÉÙ×ÊÔ´»ñÈ¡ËøÐèÒªµÄʱ¼ä¡£ÓÉÓÚÁ´Â·Âþ³¤£¬ÍøÂçʱÑÓ²»¿É¿Ø£¬ä¯ÀÀÆ÷ʹÓà HTTP »ñÈ¡×ÊÔ´µÄ³É±¾½Ï¸ß¡£ËùÒÔ£¬·Ç³£ÓбØÒª°ÑÊý¾Ý»º´æÆðÀ´£¬Ï´ÎÔÙÇëÇóµÄʱºò¾¡¿ÉÄܵظ´Óᣵ± Web »º´æÔÚÆä´æ´¢ÖоßÓÐÇëÇóµÄ×ÊԴʱ£¬Ëü½«À¹½Ø¸ÃÇëÇó²¢Ö±½Ó·µ»Ø×ÊÔ´£¬¶ø²»Êǵ½´ïÔ´·þÎñÆ÷ÖØÐÂÏÂÔØ²¢»ñÈ¡¡£ÕâÑù×ö¿ÉÒÔʵÏÖÁ½¸öСĿ±ê
¼õÇá·þÎñÆ÷¸ºÔØ
ÌáÉýϵͳÐÔÄÜ
ÏÂÃæÎÒÃǾÍÒ»ÆðÀ´Ì½ÌÖһϠHTTP »º´æ¶¼ÓÐÄÄЩ
²»Í¬ÀàÐ͵Ļº´æ
HTTP »º´æÓм¸ÖÖ²»Í¬µÄÀàÐÍ£¬ÕâЩ¿ÉÒÔ·ÖΪÁ½¸öÖ÷ÒªÀà±ð£ºË½Óлº´æ ºÍ ¹²Ïí»º´æ¡£
¹²Ïí»º´æ£º¹²Ïí»º´æÊÇÒ»ÖÖ»º´æ£¬Ëü¿ÉÒÔ´æ´¢¶à¸öÓû§Öظ´Ê¹ÓõÄÇëÇó/ÏìÓ¦¡£
˽Óлº´æ£ºË½Óлº´æÒ²³ÆÎª×¨Óûº´æ£¬ËüÖ»ÊÊÓÃÓÚµ¥¸öÓû§¡£
²»»º´æ¹ýÆÚ×ÊÔ´£ºËùÓеÄÇëÇó¶¼»áÖ±½Óµ½´ï·þÎñÆ÷£¬ÓÉ·þÎñÆ÷À´ÏÂÔØ×ÊÔ´²¢·µ»Ø¡£
ÎÒÃÇÖ÷Ҫ̽ÌÖä¯ÀÀÆ÷»º´æºÍ´úÀí»º´æ£¬µ«ÕæÊµÇé¿ö²»Ö»ÓÐÕâÁ½ÖÖ»º´æ£¬»¹ÓÐÍø¹Ø»º´æ£¬CDN£¬·´Ïò´úÀí»º´æºÍ¸ºÔØÆ½ºâÆ÷£¬°ÑËüÃDz¿ÊðÔÚ Web ·þÎñÆ÷ÉÏ£¬¿ÉÒÔÌá¸ßÍøÕ¾ºÍ Web Ó¦ÓóÌÐòµÄ¿É¿¿ÐÔ£¬ÐÔÄܺͿÉÉìËõÐÔ¡£
²»»º´æ¹ýÆÚ×ÊÔ´
²»»º´æ¹ýÆÚ×ÊÔ´¼´ä¯ÀÀÆ÷ºÍ´úÀí²»»á»º´æ¹ýÆÚ×ÊÔ´£¬¿Í»§¶Ë·¢ÆðµÄÇëÇó»áÖ±½Óµ½´ï·þÎñÆ÷£¬¿ÉÒÔʹÓà no-cache ±êÍ·´ú±í²»»º´æ¹ýÆÚ×ÊÔ´¡£

no-cache ÊôÓÚ Cache-Control ͨÓñêÍ·£¬ÆäÒ»°ãµÄ±íʾ·½·¨ÈçÏÂ
Ò²¿ÉÒÔʹÓà max-age = 0 À´ÊµÏÖ²»»º´æµÄЧ¹û¡£
˽Óлº´æ
˽Óлº´æÖ»ÓÃÀ´»º´æµ¥¸öÓû§£¬Äã¿ÉÄÜÔÚä¯ÀÀÆ÷ÉèÖÃÖп´µ½ÁË »º´æ£¬ä¯ÀÀÆ÷»º´æ°üº¬·þÎñÆ÷ͨ¹ý HTTP ÏÂÔØÏÂÀ´µÄËùÓÐÎĵµ¡£Õâ¸ö¸ßËÙ»º´æÓÃÓÚʹ·ÃÎʵÄÎĵµ¿ÉÒÔ½øÐÐǰ½ø/ºóÍË£¬±£´æ²Ù×÷¶øÎÞÐèÖØÐ·¢ËÍÇëÇóµ½Ô´·þÎñÆ÷¡£ 
¿ÉÒÔʹÓà private À´ÊµÏÖ˽Óлº´æ£¬ÕâÓë public µÄÓ÷¨Ïà·´£¬»º´æ·þÎñÆ÷Ö»¶ÔÌØ¶¨µÄ¿Í»§¶Ë½øÐлº´æ£¬ÆäËû¿Í»§¶Ë·¢Ë͹ýÀ´µÄÇëÇ󣬻º´æ·þÎñÆ÷Ôò²»»á·µ»Ø»º´æ¡£ËüµÄÒ»°ã±íʾ·½·¨ÈçÏÂ
¹²Ïí»º´æ
¹²Ïí»º´æÊÇÒ»ÖÖÓÃÓÚ´æ´¢ÒªÓɶà¸öÓû§ÖØÓõÄÏìÓ¦»º´æ¡£¹²Ïí»º´æÒ»°ãʹÓà public À´±íʾ£¬public ÊôÐÔÖ»³öÏÖÔÚ¿Í»§¶ËÏìÓ¦ÖУ¬±íʾÏìÓ¦¿ÉÒÔ±»Èκλº´æËù»º´æ¡£Ò»°ã±íʾ·½·¨ÈçÏÂ

»º´æ¿ØÖÆ
HTTP/1.1 ÖÐµÄ Cache-Control ³£¹æ±êÍ·×Ö¶ÎÓÃÓÚÖ´Ðлº´æ¿ØÖÆ£¬Ê¹Óô˱êÍ·¿Éͨ¹ýÆäÌṩµÄ¸÷ÖÖÖ¸ÁîÀ´¶¨Ò建´æ²ßÂÔ¡£ÏÂÃæÎÒÃÇÒÀ´Î½éÉÜÒ»ÏÂÕâЩÊôÐÔ
²»»º´æ
no-store ²ÅÊÇÕæÕýÒâÒåÉϵIJ»»º´æ£¬Ã¿´Î·þÎñÆ÷½ÓÊܵ½¿Í»§¶ËµÄÇëÇóºó£¬¶¼»á·µ»Ø×îеÄ×ÊÔ´¸ø¿Í»§¶Ë¡£
»º´æµ«ÐèÒªÑéÖ¤
ͬÉÏÃæµÄ ²»»º´æ¹ýÆÚ×ÊÔ´
˽Óк͹²Ïí»º´æ
ͬÉÏ
»º´æ¹ýÆÚ
»º´æÖÐÒ»¸öºÜÖØÒªµÄÖ¸Áî¾ÍÊÇmax-age£¬ÕâÊÇ×ÊÔ´±»ÊÓΪÐÂÏʵÄ×ʱ¼ä £¬Óë Expires Ïà·´£¬´ËÖ¸ÁîÊÇÏà¶ÔÓÚÇëÇóʱ¼äµÄ¡£¶ÔÓÚÓ¦ÓóÌÐòÖв»»á¸ü¸ÄµÄÎļþ£¬Í¨³£¿ÉÒÔÌí¼ÓÖ÷¶¯»º´æ¡£ÏÂÃæÊÇ mag-age µÄ±íʾ
Cache-Control:
max-age=31536000 |
»º´æÑéÖ¤
must-revalidate ±íʾ»º´æ±ØÐëÔÚʹÓÃ֮ǰÑéÖ¤¹ýʱ×ÊÔ´µÄ״̬£¬²¢ÇÒ²»Ó¦Ê¹ÓùýÆÚµÄ×ÊÔ´¡£
Cache-Control:
must-revalidate |
ÏÂÃæÊÇÒ»¸ö»º´æÑé֤ͼ

ʲôÊÇÐÂÏʵÄÊý¾Ý
Ò»µ©×ÊÔ´´æ´¢ÔÚ»º´æÖУ¬ÀíÂÛÉϾͿÉÒÔÓÀÔ¶±»»º´æÊ¹Óᣵ«ÊDz»¹ÜÊÇä¯ÀÀÆ÷»º´æ»¹ÊÇ´úÀí»º´æ£¬Æä´æ´¢¿Õ¼äÊÇÓÐÏ޵ģ¬ËùÒÔ»º´æ»á¶¨ÆÚ½øÐÐÇå³ý£¬Õâ¸ö¹ý³Ì½Ð×ö »º´æ»ØÊÕ(cache eviction) £¨×ÔÒ룩¡£ÁíÒ»·½Ã棬·þÎñÆ÷ÉϵĻº´æÒ²»á¶¨ÆÚ½øÐиüУ¬HTTP ×÷ΪӦÓòãµÄÐÒ飬ËüÊÇÒ»ÖÖ¿Í»§-·þÎñÆ÷ģʽ£¬HTTP ÊÇÎÞ״̬µÄÐÒ飬Òò´Ëµ±×ÊÔ´·¢Éú¸ü¸Äʱ£¬·þÎñÆ÷ÎÞ·¨Í¨Öª»º´æºÍ¿Í»§¶Ë¡£Òò´Ë·þÎñÆ÷±ØÐëͨ¹ýijÖÖ·½Ê½¸æÖª¿Í»§¶Ë»º´æÒѾ±»¸üС£·þÎñÆ÷»áÌṩ¹ýÆÚʱ¼äÕâ¸ö¸ÅÄ¸æÖª¿Í»§¶ËÔڴ˵½ÆÚʱ¼ä֮ǰ£¬×ÊÔ´ÊÇÐÂÏʵģ¬Ò²¾ÍÊÇδ¸ü¸Ä¹ýµÄ¡£Ôڴ˵½ÆÚʱ¼äµÄ·¶Î§Ö®Í⣬×ÊÔ´Òѹýʱ¡£¹ýÆÚËã·¨(Eviction algorithms) ͨ³£»á½«ÐÂ×ÊÔ´ÓÅÏÈÓڳ¾É×ÊԴʹÓá£
ÕâÀïÐèҪעÒâһϣ¬¹ýÆÚµÄ×ÊÔ´²¢²»»á±»»ØÊÕ»òºöÂÔ£¬µ±¸ßËÙ»º´æ½ÓÊÕµ½¹ýÆÚ×ÊԴʱ£¬Ëü»áʹÓà If-None-Match ת·¢´ËÇëÇó£¬ÒÔ¼ì²éËüÊÇ·ñÈÔÈ»ÓÐЧ¡£Èç¹ûÓÐЧ£¬·þÎñÆ÷»á·µ»Ø 304 Not ModifiedÏìӦͷ²¢ÇÒûÓÐÈκÎÏìÓ¦Ì壬´Ó¶ø½ÚÊ¡ÁËһЩ´ø¿í¡£
ÏÂÃæÊÇʹÓù²Ïí»º´æ´úÀíµÄ¹ý³Ì

Õâ¸öͼӦ¸Ã±È½ÏºÃÀí½â£¬Ö»ËµÒ»Ï Age µÄ×÷Óã¬Age ÊÇ HTTP ÏìÓ¦±êÍ·¸æË߿ͻ§¶ËÔ´·þÎñÆ÷ÔÚ¶à¾Ã֮ǰ´´½¨ÁËÏìÓ¦£¬ËüµÄµ¥Î»ÎªÃ룬Age ±êͷͨ³£½Ó½üÓÚ0£¬Èç¹ûÊÇ0Ôò¿ÉÄÜÊÇ´ÓÔ´·þÎñÆ÷»ñÈ¡µÄ£¬Èç¹û²»ÊDZíʾ¿ÉÄÜÊÇÓÉ´úÀí·þÎñÆ÷´´½¨£¬ÄÇô Age µÄÖµ±íʾµÄÊÇ»º´æºóµÄÏìÓ¦Ôٴη¢ÆðÈÏÖ¤µ½ÈÏÖ¤Íê³ÉµÄʱ¼äÖµ¡£
»º´æµÄÓÐЧÐÔÊÇÓɶà¸ö±êÍ·À´¹²Í¬¾ö¶¨µÄ£¬¶ø²¢·Çijһ¸ö±êÍ·À´¾ö¶¨¡£Èç¹ûÖ¸¶¨ÁË Cache-control:max-age=N £¬ÄÇô»º´æ»á±£´æ N Ãë¡£Èç¹ûÕâ¸öͨÓñêÍ·²»´æÔڵϰ£¬Ôò»á¼ì²éÊÇ·ñ´æÔÚ Expires ±êÍ·¡£Èç¹û Exprires ±êÍ·´æÔÚ£¬ÄÇôËüµÄÖµ¼õÈ¥ Date ±êÍ·µÄÖµ¾Í¿ÉÒÔÈ·¶¨ÆäÓÐЧÐÔ¡£×îºó£¬Èç¹ûmax-age ºÍ expires ¶¼²»´æÔÚ£¬¾ÍȥѰÕÒ Last-Modified ±êÍ·£¬Èç¹û´æÔڴ˱êÍ·£¬Ôò¸ßËÙ»º´æµÄÓÐЧÐÔµÈÓÚ Date ±êÍ·µÄÖµ¼õÈ¥ Last-modified ±êÍ·µÄÖµ³ýÒÔ10¡£
»º´æÑéÖ¤
µ±µ½´ï»º´æ×ÊÔ´µÄÓÐЧÆÚʱ£¬½«¶ÔÆä½øÐÐÑéÖ¤»òÔٴλñÈ¡¡£½öµ±·þÎñÆ÷ÌṩÁËÇ¿ÑéÖ¤Æ÷»òÈõÑéÖ¤Æ÷ʱ£¬²Å¿ÉÒÔ½øÐÐÑéÖ¤¡£
µ±Óû§°´ÏÂÖØÐ¼ÓÔØ°´Å¥Ê±£¬½«´¥·¢ÖØÐÂÑéÖ¤¡£Èç¹û»º´æµÄÏìÓ¦°üº¬ Cache-control£ºmust-revalidate±êÍ·£¬ÔòÔÚÕý³£ä¯ÀÀÏÂÒ²»á´¥·¢¸Ãʼþ¡£ÁíÒ»¸öÒòËØÊÇ ¸ß¼¶ -> »º´æÊ×Ñ¡Ïî Ãæ°åÖеĻº´æÑéÖ¤Ê×Ñ¡Ïî¡£ÓÐÒ»¸öÑ¡Ïî¿ÉÔÚÿ´Î¼ÓÔØÎĵµÊ±Ç¿ÖƽøÐÐÑéÖ¤¡£
Etag
ÎÒÃÇÉÏÃæÌáµ½ÁËÇ¿ÑéÖ¤Æ÷ºÍÈõÑéÖ¤Æ÷£¬ÊµÏÖÑéÖ¤Æ÷¹¦ÄܵıêÍ·Õýʽ Etag µÄ×÷Óã¬ÕâÒâζ×Å HTTP Óû§´úÀí£¨ÀýÈçä¯ÀÀÆ÷£©²»ÖªµÀ¸Ã×Ö·û´®±íʾʲô£¬²¢ÇÒÎÞ·¨Ô¤²âÆäÖµ¡£Èç¹û Etag ±êÍ·ÊÇ×ÊÔ´ÏìÓ¦µÄÒ»²¿·Ö£¬Ôò¿Í»§¶Ë¿ÉÒÔÔÚδÀ´ÇëÇóµÄ±êÍ·Öз¢³ö If-None-Match£¬ÒÔÑéÖ¤»º´æµÄ×ÊÔ´¡£
Last-ModifiedÏìÓ¦±êÍ·¿ÉÒÔÓÃ×÷ÈõÑéÖ¤Æ÷£¬ÒòΪËüÖ»ÓÐ1Ãë¿ÉÒÔ·Ö±æµÄʱ¼ä¡£Èç¹ûÏìÓ¦ÖдæÔÚ Last-Modified±êÍ·£¬Ôò¿Í»§¶Ë¿ÉÒÔ·¢³ö If-Modified-SinceÇëÇó±êÍ·À´ÑéÖ¤»º´æ×ÊÔ´¡££¨¹ØÓÚ Etag ¸ü¶àÎÒÃÇ»áÔÚÌõ¼þÇëÇó½éÉÜ£©
±ÜÃâÅöײ
ͨ¹ýʹÓà Etag ºÍ If-Match ±êÍ·£¬Äã¿ÉÒÔ¼ì²â±ÜÃâÅöײ¡£
ÀýÈ磬Ôڱ༠MDN ʱ£¬½«¶Ôµ±Ç° Wiki ÄÚÈݽøÐйþÏ£´¦Àí²¢½«Æä·ÅÈëÏìÓ¦ÖÐµÄ Etag ÖÐ
Etag: "33a64df551425fcc55e4d 42a148795d9f25f89d4" |
µ±½«¸ü¸Ä±£´æµ½ Wiki Ò³Ãæ£¨·¢²¼Êý¾Ý£©Ê±£¬POST ÇëÇ󽫰üº¬ If-Match ±êÍ·£¬ÆäÖаüº¬ Etag ÖµÒÔ¼ì²éÓÐЧÐÔ¡£
If-Match: "33a64df551425fcc55e4 d42a148795d9f25f89d4" |
Èç¹û¹þÏ£Öµ²»Æ¥Å䣬Ôò±íʾÎĵµÒÑÔÚÖÐ¼ä½øÐÐÁ˱༣¬²¢·µ»Ø 412 Precondition Failed ´íÎó¡£
»º´æÎ´Õ¼ÓÃ×ÊÔ´
Etag ±êÍ·µÄÁíÒ»¸öµäÐÍÓ÷¨ÊÇ»º´æÎ´¸ü¸ÄµÄ×ÊÔ´£¬Èç¹ûÓû§ÔٴηÃÎʸø¶¨µÄ URL£¨ÒÑÉèÖÃEtag£©£¬²¢ÇҸà URL¹ýʱ£¬Ôò¿Í»§¶Ë½«ÔÚ If-None-Match ±êÍ·×Ö¶ÎÖз¢ËÍÆä Etag µÄÖµ
If-None-Match:
"33a64df551425fc c55e4d42a148795d9f25f89d4" |
·þÎñÆ÷½«¿Í»§¶ËµÄ Etag£¨Í¨¹ý If-None-Match ·¢ËÍ£©Óë Etag ½øÐбȽϣ¬ÒÔ»ñÈ¡Æäµ±Ç°×ÊÔ´°æ±¾£¬Èç¹ûÁ½¸öÖµ¶¼Æ¥Å䣨¼´×ÊԴδ¸ü¸Ä£©£¬Ôò·þÎñÆ÷»á·¢»Ø 304 Not Modified״̬£¬Ã»ÓÐÖ÷Ì壬Ëü¸æË߿ͻ§¶ËÏìÓ¦µÄ»º´æÈÔÈ»¿ÉÒÔʹÓá£
HTTP CROS ¿çÓò
CROS µÄÈ«³ÆÊÇ Cross-Origin Resource Sharing(CROS)£¬ÖÐÎÄÒëΪ ¿çÓò×ÊÔ´¹²Ïí£¬ËüÊÇÒ»ÖÖ»úÖÆ¡£ÊÇÒ»ÖÖʲô»úÖÆÄØ£¿ËüÊÇÒ»ÖÖÈÃÔËÐÐÔÚÒ»¸öÓò(origin)É쵀 Web Ó¦Óñ»×¼Ðí·ÃÎÊÀ´×Ô²»Í¬Ô´·þÎñÆ÷ÉÏÖ¸¶¨×ÊÔ´µÄ»úÖÆ¡£Ôڸ㶮Õâ¸ö»úÖÆÇ°£¬ÄãÐèÒªÏßÁ˽âʲôÊÇ Óò(origin)
Origin
Web ¸ÅÄîÖÐÓò(Origin) µÄÄÚÈÝÓÉscheme(protocol) - ÐÒ飬host(domain) - Ö÷»úºÍÓÃÓÚ·ÃÎÊËüµÄ URL port - ¶Ë¿Ú¶¨Òå¡£½ö½öµ± scheme ¡¢host¡¢port ¶¼Æ¥Åäʱ£¬Á½¸ö¶ÔÏó²ÅÓÐÏàͬµÄÀ´Ô´¡£ÕâÖÖÐÒéÏàͬ£¬ÓòÃûÏàͬ£¬¶Ë¿ÚÏàͬµÄ°²È«²ßÂÔÒ²±»³ÆÎª ͬԴ²ßÂÔ£¨Same Origin Policy)¡£Ä³Ð©²Ù×÷½öÏÞÓÚ¾ßÓÐÏàͬÀ´Ô´µÄÄÚÈÝ£¬¿ÉÒÔʹÓà CORS È¡Ïû´ËÏÞÖÆ¡£
¿çÓòµÄÌØµã
ÏÂÃæÊÇ¿çÓòÎÊÌâµÄÀý×Ó£¬¿´¿´ÄãÊÇ·ñÇå³þʲôÊÇ¿çÓòÁË
(1) http://example.com/app1/index.html
(2) http://example.com/app2/index.html |
ÉÏÃæÕâÁ½¸ö URL ÊÇ·ñ¾ßÓпçÓòÎÊÌâÄØ£¿
ÉÏÃæÁ½¸ö URL ÊDz»¾ßÓпçÓòÎÊÌâµÄ£¬ÒòΪÕâÁ½¸ö URL ¾ßÓÐÏàͬµÄÐÒé(scheme)ºÍÖ÷»ú(host)
ÄÇôÏÂÃæÕâÁ½¸öÊÇ·ñ¾ßÓпçÓòÎÊÌâÄØ£¿
http://Example.com:80
http://example.com |
ÕâÁ½¸ö URL Ò²²»¾ßÓпçÓòÎÊÌ⣬Ϊʲô²»¾ßÓУ¬¶Ë¿Ú²»Ò»Ñù°¡¡£ÆäʵËüÃÇÁ½¸ö¶Ë¿ÚÊÇÒ»ÑùµÄ¡£
»òÐíÄã»áÈÏΪÕâÁ½¸ö URL ÊDz»Ò»ÑùµÄ£¬·ÅÐÄ£¬¹ØÓÚÒ»Ñù²»Ò»ÑùµÄÂÛ¾ÝÎÒ¸øÄãÅ׳öÀ´ÁË
ÐÒéºÍÓòÃû²¿·ÖÊDz»Çø·Ö´óСдµÄ£¬µ«ÊÇ·¾¶²¿·ÖÔò¸ù¾Ý·þÎñÆ÷ƽ̨¶ø¶¨¡£Windows ºÍ Mac OS X ϵͳÊDz»Çø·Ö´óСдµÄ£¬¶ø²ÉÓÃUNIXºÍLinuxϵµÄ·þÎñÆ÷ϵͳÊÇÇø·Ö´óСдµÄ£¬
Ò²¾ÍÊÇ˵ÉÏÃæµÄ Example.com ºÍ example.com ÆäʵÊÇÒ»¸öÍøÖ·£¬²¢ÇÒÓÉÓÚÁ½¸öµØÖ·¾ßÓÐÏàͬµÄ scheme ºÍ host £¬Ä¬ÈÏÇé¿öÏ·þÎñÆ÷ͨ¹ý¶Ë¿Ú80´«µÝ HTTP ÄÚÈÝ£¬ËùÒÔÉÏÃæÕâÁ½¸öµØÖ·Ò²ÊÇÏàͬµÄ¡£
ÏÂÃæÕâÁ½¸ö URL µØÖ·ÊÇ·ñ¾ßÓпçÓòÎÊÌ⣿
http://example.com/app1
https://example.com/app2 |
ÕâÁ½¸ö URL µÄ scheme ²»Í¬£¬ËùÒÔÕâÁ½¸ö URL ¾ßÓпçÓòÎÊÌâ
ÔÙ¿´ÏÂÃæÕâÈý¸ö URL ÊÇ·ñ¾ßÓпçÓòÎÊÌâ
http://example.com
http://www.example.com
http://myapp.example.com |
ÕâÈý¸ö URL Ò²ÊǾßÓпçÓòÎÊÌâµÄ£¬ÒòΪËüÃÇÁ¥ÊôÓÚ²»Í¨·þÎñÆ÷µÄÖ÷»ú host¡£
ÏÂÃæÕâÁ½¸ö URL ÊÇ·ñ¾ßÓпçÓòÎÊÌâ
http://example.com
http://example.com:8080 |
ÕâÁ½¸ö URL Ò²ÊǾßÓпçÓòÎÊÌ⣬ÒòΪÕâÁ½¸ö URL µÄĬÈ϶˿ڲ»Ò»Ñù¡£
ͬԴ²ßÂÔ
´¦ÓÚ°²È«µÄÒòËØ£¬ä¯ÀÀÆ÷ÏÞÖÆÁ˴ӽű¾·¢Æð¿çÓòµÄ HTTP ÇëÇó¡£ XMLHttpRequest ºÍÆäËû Fetch ½Ó¿Ú »á×ñÑ Í¬Ô´²ßÂÔ(same-origin policy)¡£Ò²¾ÍÊÇ˵ʹÓÃÕâЩ API µÄÓ¦ÓóÌÐòÏëÒªÇëÇóÏàͬµÄ×ÊÔ´£¬ÄÇôËûÃÇÓ¦¸Ã¾ßÓÐÏàͬµÄÀ´Ô´£¬³ý·ÇÀ´×ÔÆäËûÀ´Ô´µÄÏìÓ¦°üÀ¨ÕýÈ·µÄ CORS ±êÍ·Ò²¿ÉÒÔ¡£
ͬԴ²ßÂÔÊÇÒ»ÖÖºÜÖØÒªµÄ°²È«²ßÂÔ£¬ËüÏÞÖÆÁË´ÓÒ»¸öÀ´Ô´¼ÓÔØµÄÎĵµ»ò½Å±¾ÈçºÎÓëÁíÒ»¸öÀ´Ô´µÄ×ÊÔ´½øÐн»»¥¡£ ËüÓÐÖúÓÚ¸ôÀëDZÔڵĶñÒâÎĵµ£¬¼õÉÙ¿ÉÄܵĹ¥»÷ý½é¡£
ÎÒÃÇÉÏÃæÌáµ½£¬Èç¹ûÁ½¸ö URL ¾ßÓÐÏàͬµÄÐÒé¡¢Ö÷»úºÍ¶Ë¿ÚºÅ£¨Èç¹ûÖ¸¶¨£©µÄ»°£¬ÄÇôÁ½¸ö URL ¾ßÓÐÏàͬµÄÀ´Ô´¡£ÏÂÃæÓÐһЩʵÀý£¬ÄãÅжÏÒ»ÏÂÊDz»ÊǾßÓÐÏàͬµÄÀ´Ô´

ÏÖÔÚÎÒ´øÄãÈÏʶÁËÁ½±é²»Í¬µÄÔ´£¬ÏÖÔÚÄãÓ¦¸ÃÖªµÀÈçºÎÇø·ÖÁ½¸ö URL ÊÇ·ñÊôÓÚͬһÀ´Ô´Á˰ɣ¡
ºÃ£¬ÄãÏÖÔÚÖªµÀÁËʲôÊÇ¿çÓòÎÊÌ⣬ÏÖÔÚÎÒÒªÎÊÄ㣬ÄÄЩÇëÇó»á²úÉú¿çÓòÇëÇóÄØ£¿ÕâÊÇÎÒÃÇÏÂÃæÒªÌÖÂÛµÄÎÊÌâ
¿çÓòÇëÇó
¿çÓòÇëÇó¿ÉÄÜ»á´ÓÏÂÃæÕ⼸ÖÖÇëÇóÖз¢³ö£º
µ÷ÓÃ XMLHttpRequest »òÕß Fetch api¡£
XMLHttpRequest ÊÇʲô£¿£¨ÎÒÊǺó¶Ë³ÌÐòÔ±£¬Ç°¶Ë²»Ì«¶®£¬¼òµ¥½âÊÍÏ£¬Èç¹û½âÊ͵IJ»ºÃ£¬»¹Çëǰ¶Ë´óÀÐÃDz»ÒªÅÖ×áÎÒ£©
ËùÓеÄÏÖ´úä¯ÀÀÆ÷¶¼ÓÐÒ»¸öÄÚÖÃµÄ XMLHttpReqeust ¶ÔÏó£¬Õâ¸ö¶ÔÏó¿ÉÒÔÓÃÓÚ´Ó·þÎñÆ÷ÇëÇóÊý¾Ý¡£
XMLHttpReqeust ¶ÔÓÚ¿ª·¢ÈËÔ±À´ËµºÜÖØÒª£¬XMLHttpReqeust ¶ÔÏó¿ÉÒÔÓÃÀ´×öÏÂÃæÕâЩÊÂÇé
¸üÐÂÍøÒ³ÎÞÐèÖØÐÂË¢ÐÂÒ³Ãæ
Ò³Ãæ¼ÓÔØºó´Ó·þÎñÆ÷ÇëÇóÊý¾Ý
Ò³Ãæ¼ÓÔØºó´Ó·þÎñ¶Ë»ñÈ¡Êý¾Ý
ÔÚºǫ́½«Êý¾Ý·¢Ë͵½·þÎñÆ÷
ʹÓà XMLHttpRequest(XHR) ¶ÔÏóÓë·þÎñÆ÷½øÐн»»¥£¬Äã¿ÉÒÔ´Ó URL ¼ìË÷Êý¾Ý´Ó¶ø²»±ØË¢ÐÂÕû¸öÒ³Ãæ£¬ÕâÊ¹ÍøÒ³¿ÉÒÔ¸üÐÂÒ³ÃæµÄÒ»²¿·Ö£¬¶ø²»»áÖжÏÓû§µÄ²Ù×÷¡£XMLHttpRequest ÔÚ AJAX Òì²½±à³ÌÖÐʹÓúܹ㷺¡£
ÔÙÀ´ËµÒ»Ï Fetch API ÊÇʲô£¬Fetch ÌṩÁËÇëÇóºÍÏìÓ¦¶ÔÏó£¨ÒÔ¼°ÆäËûÍøÂçÇëÇ󣩵ÄͨÓö¨Òå¡£Ëü»¹ÌṩÁËÏà¹Ø¸ÅÄîµÄ¶¨Ò壬ÀýÈç CORS ºÍ HTTP Origin Í·ÓïÒ壬²¢ÔÚÆäËûµØ·½È¡´úÁËËüÃǸ÷×Ե͍Òå¡£
Web ×ÖÌ壨ÓÃÓÚ CSS ÖÐ@ font-faceÖеĿçÓò×ÖÌåʹÓã©£¬ÒÔ±ã·þÎñÆ÷¿ÉÒÔ²¿Êð TrueType ×ÖÌ壬ÕâЩ×ÖÌåÖ»ÄÜÓÉÔÊÐí¿çÕ¾µã¼ÓÔØºÍʹÓõÄÍøÕ¾Ê¹Óá£
WebGL ÎÆÀí
ʹÓà drawImage() »æÖƵ½»²¼ÉϵÄͼÏñ/ÊÓÆµÖ¡
ͼƬµÄ CSS ÐÎ×´
¿çÓò¹¦ÄܸÅÊö
¿çÓò×ÊÔ´¹²Ïí±ê׼ͨ¹ýÌí¼ÓÐ嵀 HTTP ±êÍ·À´¹¤×÷£¬ÕâЩ±êÍ·ÔÊÐí·þÎñÆ÷ÃèÊöÔÊÐíÄÄЩÀ´Ô´´Ó Web ä¯ÀÀÆ÷¶ÁÈ¡ÐÅÏ¢¡£ÁíÍ⣬¶ÔÓÚ¿ÉÄܵ¼Ö·þÎñÆ÷Êý¾Ý²úÉú¸±×÷ÓÃµÄ HTTP ÇëÇó·½·¨£¨ÓÈÆäÊÇ GET »òÕß¾ßÓÐijЩ MIME ÀàÐÍ POST ·½·¨ÒÔÍâ HTTP ·½·¨£©£¬¸Ã¹æ·¶ÒªÇóä¯ÀÀÆ÷Ô¤¼ìÇëÇó£¬Ê¹Óà HTTP OPTIONS ÇëÇó·½·¨´Ó·þÎñÆ÷ÇëÇóÊÜÖ§³ÖµÄ·½·¨£¬È»ºóÔÚ·þÎñÆ÷Åú×¼ºó·¢ËÍʵ¼ÊÇëÇó¡£·þÎñÆ÷»¹¿ÉÒÔ֪ͨ¿Í»§¶ËÊÇ·ñÓ¦ÓëÇëÇóÒ»Æð·¢ËÍÆ¾¾Ý£¨ÀýÈç Cookies ºÍ HTTP Éí·ÝÑéÖ¤£©¡£
×¢Ò⣺CORS ¹ÊÕϻᵼÖ´íÎ󣬵«ÊdzöÓÚ°²È«ÔÒò£¬¸Ã´íÎóµÄÏêϸÐÅÏ¢²»ÊÊÓÃÓÚ JavaScript¡£ ËùÓдúÂë¶¼ÖªµÀ·¢ÉúÁË´íÎó¡£ È·¶¨¾ßÌå³öÎÊÌâµÄΨһ·½·¨ÊDz鿴ä¯ÀÀÆ÷µÄ¿ØÖÆÌ¨ÒÔ»ñÈ¡ÏêϸÐÅÏ¢¡£
·ÃÎÊ¿ØÖÆ
ÏÂÃæÎÒ»áºÍ´ó¼Ò̽ÌÖÈýÖÖ·½°¸£¬ÕâЩ·½°¸¶¼ÑÝʾÁË¿çÓò×ÊÔ´¹²ÏíµÄ¹¤×÷·½Ê½¡£ËùÓÐÕâЩʾÀý¶¼Ê¹ÓÃXMLHttpRequest£¬Ëü¿ÉÒÔÔÚÈκÎÖ§³ÖµÄä¯ÀÀÆ÷Öз¢³ö¿çÕ¾µãÇëÇó¡£
¼òµ¥ÇëÇó
һЩÇëÇ󲻻ᴥ·¢ CORSÔ¤¼ì£¨¹ØÓÚÔ¤¼ìÎÒÃǺóÃæÔÙ½éÉÜ£©¡£¼òµ¥ÇëÇóÊÇÂú×ãÒ»ÏÂËùÓÐÌõ¼þµÄÇëÇó
ÔÊÐíÒÔÏµķ½·¨£ºGET¡¢HEADºÍ POST
³ýÁËÓÉÓû§´úÀí×Ô¶¯ÉèÖõıêÍ·£¨ÀýÈç Connection¡¢User-Agent »òÕßÔÚ Fetch ¹æ·¶Öж¨ÒåΪ½ûÖ¹±êÍ·Ãû³ÆµÄÆäËû±êÍ·£©Í⣬ΨһÔÊÐíÊÖ¶¯ÉèÖõıêÍ·ÊÇÄÇЩ Fetch ¹æ·¶½«Æä¶¨ÒåΪ CORS°²È«ÁгöµÄÇëÇó±êÍ· £¬ËüÃÇÊÇ£º
Accept
Accept-Language
Content-Language
Content-Type£¨ÏÂÃæ»á½éÉÜ£©
DPR
Downlink
Save-Data
Viewport-Width
Width
Content-Type ±êÍ·µÄΨһÔÊÐíµÄÖµÊÇ
application/x-www-form-urlencoded
multipart/form-data
text/plain
ûÓÐÔÚÇëÇóÖÐʹÓõÄÈκΠXMLHttpRequestUpload ¶ÔÏóÉÏ×¢²áʼþÕìÌýÆ÷£»ÕâЩ¿ÉÒÔʹÓÃXMLHttpRequest.upload ÊôÐÔ½øÐзÃÎÊ¡£
ÇëÇóÖÐδʹÓà ReadableStream¶ÔÏó¡£
ÀýÈ磬¼Ù¶¨ web ÄÚÈÝ https://foo.example ÏëÒª»ñÈ¡ https://bar.other ÓòµÄ×ÊÔ´£¬ÄÇô JavaScript ÖеĴúÂë¿ÉÄÜ»áÏñÏÂÃæÕâÑùд
const xhr = new
XMLHttpRequest();
const url = 'https://bar.other/ resources/public-data/';
xhr.open('GET', url);
xhr.onreadystatechange = someHandler;
xhr.send(); |
ÕâʹÓà CORS ±êÍ·À´´¦ÀíÌØÈ¨£¬´Ó¶øÔÚ¿Í»§¶ËºÍ·þÎñÆ÷Ö®¼äÖ´ÐÐijÖÖת»»¡£

ÈÃÎÒÃÇ¿´¿´ÔÚÕâÖÖÇé¿öÏÂä¯ÀÀÆ÷½«·¢Ë͵½·þÎñÆ÷µÄÄÚÈÝ£¬²¢ÈÃÎÒÃÇ¿´¿´·þÎñÆ÷ÈçºÎÏìÓ¦£º
GET /resources/public-data/
HTTP/1.1
Host: bar.other
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac
OS X 10.14; rv:71.0) Gecko/20100101 Firefox/71.0
Accept: text/html,application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Connection: keep-alive
Origin: https://foo.example |
×¢ÒâÇëÇóµÄ±êÍ· Origin £¬Ëü±íÃ÷µ÷ÓÃÀ´×ÔÓÚ https://foo.example¡£ÈÃÎÒÃÇ¿´¿´·þÎñÆ÷ÊÇÈçºÎÏìÓ¦µÄ
HTTP/1.1 200
OK
Date: Mon, 01 Dec 2008 00:23:53 GMT
Server: Apache/2
Access-Control-Allow-Origin: *
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/xml
[¡XML Data¡] |
·þÎñ¶Ë·¢ËÍ Access-Control-Allow-Origin ×÷ΪÏìÓ¦¡£Ê¹Óà Origin ±êÍ·ºÍ Access-Control-Allow-Origin չʾÁË×î¼òµ¥µÄ·ÃÎÊ¿ØÖÆÐÒé¡£ÔÚÕâ¸öÊÂÀýÖУ¬·þÎñ¶ËʹÓà Access-Control-Allow-Origin ×÷ΪÏìÓ¦£¬Ò²¾Í˵Ã÷¸Ã×ÊÔ´¿ÉÒÔ±»ÈκÎÓò·ÃÎÊ¡£
Èç¹ûλÓÚhttps://bar.otherµÄ×ÊÔ´ËùÓÐÕßÏ£Íû½«¶Ô×ÊÔ´µÄ·ÃÎÊÏÞÖÆÎª½öÀ´×Ôhttps://foo.exampleµÄÇëÇó£¬ËûÃÇÓ¦¸Ã·¢ËÍÈçÏÂÏìÓ¦
Access-Control-Allow-Origin:
https://foo.example |
ÏÖÔÚ³ýÁË https://foo.example Ö®ÍâµÄÈκÎÓò¶¼ÎÞ·¨ÒÔ¿çÓò·½Ê½·ÃÎʵ½ https://bar.other µÄ×ÊÔ´¡£
Ô¤¼ìÇëÇó
ºÍÉÏÃæÌ½Ìֵļòµ¥ÇëÇó²»Í¬£¬Ô¤¼ìÇëÇóÊ×ÏÈͨ¹ý OPTIONS ·½·¨ÏòÁíÒ»¸öÓòÉϵÄ×ÊÔ´·¢ËÍ HTTP ÇëÇó£¬ÓÃÀ´È·¶¨Êµ¼ÊÇëÇóÊÇ·ñ¿ÉÒÔ°²È«µÄ·¢ËÍ¡£¿çÕ¾µãÕâÑù±»Ô¤¼ì£¬ÒòΪËüÃÇ¿ÉÄÜ»áÓ°ÏìÓû§Êý¾Ý¡£
ÏÂÃæÊÇÒ»¸öÔ¤¼ìÊÂÀý
const xhr = new
XMLHttpRequest();
xhr.open('POST', 'https://bar.other/resources/post-here/');
xhr.setRequestHeader('X-PINGOTHER', 'pingpong');
xhr.setRequestHeader('Content-Type', 'application/xml');
xhr.onreadystatechange = handler;
xhr.send('<person><name>Arun</name></person>');
|
ÉÏÃæµÄÊÂÀý´´½¨ÁËÒ»¸ö XML ÇëÇóÌåÓÃÀ´ºÍ POST ÇëÇóÒ»Æð·¢ËÍ¡£´ËÍ⣬ÉèÖÃÁ˷DZê×¼ÇëÇóÍ· X-PINGOTHER £¬Õâ¸ö±êÍ·²»ÊÇ HTTP/1.1 µÄÒ»²¿·Ö£¬µ«Í¨³£¶Ô Web ³ÌÐòºÜÓÐÓá£ÓÉÓÚÇëÇóµÄ Content-Type ʹÓà application/xml£¬²¢ÇÒÉèÖÃÁË×Ô¶¨Òå±êÍ·£¬Òò´Ë¸ÃÇëÇó±»Ô¤¼ì¡£ÈçÏÂͼËùʾ

ÈçÏÂËùÊö£¬Êµ¼ÊµÄ POST ÇëÇó²»°üº¬ Access-Control-Request- * ±êÍ·£»Ö»ÓÐ OPTIONS ÇëÇó²ÅÐèÒªËüÃÇ¡£
ÏÂÃæÎÒÃÇÀ´¿´Ò»ÏÂÍêÕûµÄ¿Í»§¶Ë/·þÎñÆ÷½»»¥£¬Ê×ÏÈÊÇÔ¤¼ìÇëÇó/ÏìÓ¦
OPTIONS /resources/post-here/
HTTP/1.1
Host: bar.other
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac
OS X 10.14; rv:71.0) Gecko/20100101 Firefox/71.0
Accept: text/html,application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Connection: keep-alive
Origin: http://foo.example
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type |
HTTP/1.1 204
No Content
Date: Mon, 01 Dec 2008 01:15:39 GMT
Server: Apache/2
Access-Control-Allow-Origin: https://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400
Vary: Accept-Encoding, Origin
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive |
ÉÏÃæµÄ1 -11 Ðдú±íÔ¤¼ìÇëÇó£¬Ô¤¼ìÇëÇóʹÓà OPYIIONS ·½·¨£¬ä¯ÀÀÆ÷¸ù¾ÝÉÏÃæµÄ JavaScript ´úÂë¶ÎËùʹÓõÄÇëÇó²ÎÊýÈ·¶¨ÊÇ·ñÐèÒª·¢ËÍ´ËÇëÇó£¬ÒÔ±ã·þÎñÆ÷¿ÉÒÔÏìÓ¦ÊÇ·ñ¿ÉÒÔʹÓÃʵ¼ÊÇëÇó²ÎÊý·¢ËÍÇëÇó¡£OPTIONS ÊÇÒ»ÖÖ HTTP / 1.1·½·¨£¬ÓÃÓÚÈ·¶¨À´×Ô·þÎñÆ÷µÄ¸ü¶àÐÅÏ¢£¬²¢ÇÒÊÇÒ»ÖÖ°²È«µÄ·½·¨£¬ÕâÒâζ×ÅËü²»ÄÜÓÃÓÚ¸ü¸Ä×ÊÔ´¡£Çë×¢Ò⣬Óë OPTIONS ÇëÇóÒ»Æð£¬»¹·¢ËÍÁËÁíÍâÁ½¸öÇëÇó±êÍ·£¨·Ö±ðÊǵÚ9Ðк͵Ú10ÐУ©
Access-Control-Request-Method:
POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type |
Access-Control-Request-Method ±êÍ·×÷ΪԤ¼ìÇëÇóµÄÒ»²¿·Ö֪ͨ·þÎñÆ÷£¬µ±·¢ËÍʵ¼ÊÇëÇóʱ£¬½«Ê¹ÓÃPOST ÇëÇó·½·¨·¢Ë͸ÃÇëÇó¡£
Access-Control-Request-Headers ±êͷ֪ͨ·þÎñÆ÷£¬µ±·¢ËÍÇëÇóʱ£¬Ëü½«ÓëX-PINGOTHER ºÍ Content-Type ×Ô¶¨Òå±êÍ·Ò»Æð·¢ËÍ¡£·þÎñÆ÷¿ÉÒÔÈ·¶¨ÕâÖÖÇé¿öÏÂÊÇ·ñ½ÓÊÜÇëÇó¡£
ÏÂÃæµÄ 1 - 11ÐÐÊÇ·þÎñÆ÷·¢»ØµÄÏìÓ¦£¬±íʾPOST ÇëÇóºÍ X-PINGOTHER ÊÇ¿ÉÒÔ½ÓÊܵģ¬ÎÒÃÇ×ÅÖØ¿´Ò»ÏÂÏÂÃæÕ⼸ÐÐ
Access-Control-Allow-Origin:
http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400 |
·þÎñÆ÷Íê³ÉÏìÓ¦±íÃ÷Ô´ http://foo.example ÊÇ¿ÉÒÔ½ÓÊÜµÄ URL£¬Äܹ»ÔÊÐí POST¡¢GET¡¢OPTIONS ½øÐÐÇëÇó£¬ÔÊÐí×Ô¶¨Òå±êÍ· X-PINGOTHER, Content-Type¡£×îºó£¬Access-Control-Max-Age ÒÔÃëΪµ¥Î»¸ø³öÒ»¸öÖµ£¬Õâ¸öÖµ±íʾ¶ÔÔ¤¼ìÇëÇóµÄÏìÓ¦¿ÉÒÔ»º´æ¶à³¤Ê±¼ä£¬ÔÚ´ËÆÚ¼äÄÚÎÞÐè·¢ËÍÆäËûÔ¤¼ìÇëÇó¡£
Íê³ÉÔ¤¼ìÇëÇóºó£¬½«·¢ËÍʵ¼ÊÇëÇó£º
POST /resources/post-here/
HTTP/1.1
Host: bar.other
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac
OS X 10.14; rv:71.0) Gecko/20100101 Firefox/71.0
Accept: text/html,application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Connection: keep-alive
X-PINGOTHER: pingpong
Content-Type: text/xml; charset=UTF-8
Referer: https://foo.example/ examples/preflightInvocation.html
Content-Length: 55
Origin: https://foo.example
Pragma: no-cache
Cache-Control: no-cache
<person><name>Arun</name></person> |
HTTP/1.1 200
OK
Date: Mon, 01 Dec 2008 01:15:40 GMT
Server: Apache/2
Access-Control-Allow-Origin: https://foo.example
Vary: Accept-Encoding, Origin
Content-Encoding: gzip
Content-Length: 235
Keep-Alive: timeout=2, max=99
Connection: Keep-Alive
Content-Type: text/plain
[Some GZIP'd payload] |
ÕýʽÏìÓ¦Öкܶà±êÍ·ÎÒÃÇÔÚ֮ǰµÄÎÄÕÂÒѾ̽ÌÖ¹ýÁË£¬±¾Æª²»ÔÙ×öÏêϸµÄ½éÉÜ£¬¶ÁÕß¿ÉÒԲο¼
Ä㻹ÔÚΪ HTTP µÄÕâЩ¸ÅÄîÍ·ÌÛÂð£¿
´øÆ¾Ö¤µÄÇëÇó
XMLHttpRequest »ò Fetch ºÍ CORS ×îÓÐȤµÄ¹¦ÄܾÍÊÇÄܹ»·¢³öÖªµÀ HTTP Cookie ºÍ HTTP Éí·ÝÑéÖ¤µÄ ƾ֤ ÇëÇó¡£Ä¬ÈÏÇé¿öÏ£¬ÔÚ¿çÕ¾µã XMLHttpRequest »ò Fetch µ÷ÓÃÖУ¬ä¯ÀÀÆ÷½«²»·¢ËÍÆ¾¾Ý¡£µ÷Óà XMLHttpRequest¶ÔÏó»ò Request ¹¹Ô캯Êýʱ±ØÐëÉèÖÃÒ»¸öÌØ¶¨µÄ±êÖ¾¡£
ÔÚÏÂÃæÕâ¸öÀý×ÓÖУ¬×î³õ´Ó http://foo.example ¼ÓÔØµÄÄÚÈݶÔÉèÖÃÁË Cookies µÄ http://bar.other ÉϵÄ×ÊÔ´½øÐÐÁ˼òµ¥µÄ GET ÇëÇó£¬ foo.example ÉÏ¿ÉÄܵĴúÂëÈçÏÂ
const invocation
= new XMLHttpRequest();
const url = 'http://bar.other/resources/ credentialed-content/';
function callOtherDomain() {
if (invocation) {
invocation.open('GET', url, true);
invocation.withCredentials = true;
invocation.onreadystatechange = handler;
invocation.send();
}
} |
µÚ7ÐÐÏÔʾ XMLHttpRequest ÉϵıêÖ¾£¬±ØÐëÉèÖøñêÖ¾²ÅÄÜʹÓà Cookie ½øÐе÷Óá£Ä¬ÈÏÇé¿öÏ£¬µ÷ÓÃÊDz»ÔÚʹÓà Cookie µÄÇé¿öϽøÐеġ£ÓÉÓÚÕâÊÇÒ»¸ö¼òµ¥µÄ GET ÇëÇó£¬Òò´Ë²»»á½øÐÐÔ¤¼ì£¬µ«ÊÇä¯ÀÀÆ÷½«¾Ü¾øÈκÎûÓÐ Access-Control-Allow-Credentials µÄÏìÓ¦£º±êͷΪtrue£¬Ö¸µÄÊÇÏìÓ¦²»»á·µ»Ø web Ò³ÃæµÄÄÚÈÝ¡£
ÉÏÃæµÄÇëÇóÓÃÏÂͼ¿ÉÒÔ±íʾ

ÕâÊǿͻ§¶ËºÍ·þÎñÆ÷Ö®¼äµÄʾÀý½»»»£º
GET /resources/access-control-with
-credentials/
HTTP/1.1
Host: bar.other
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac
OS X 10.14; rv:71.0) Gecko/20100101 Firefox/71.0
Accept: text/html,application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Connection: keep-alive
Referer: http://foo.example/ examples/credential.html
Origin: http://foo.example
Cookie: pageAccess=2
|
HTTP/1.1 200
OK
Date: Mon, 01 Dec 2008 01:34:52 GMT
Server: Apache/2
Access-Control-Allow-Origin: https://foo.example
Access-Control-Allow-Credentials: true
Cache-Control: no-cache
Pragma: no-cache
Set-Cookie: pageAccess=3; expires=Wed, 31-Dec-2008
01:34:53 GMT
Vary: Accept-Encoding, Origin
Content-Encoding: gzip
Content-Length: 106
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: text/plain[text/plain payload] |
ÉÏÃæµÚ10Ðаüº¬Ö¸Ïòhttp://bar.other ÉϵÄÄÚÈÝ Cookie£¬µ«ÊÇÈç¹û bar.other ûÓÐÒÔ Access-Control-Allow-Credentials:true ÏìÓ¦£¨ÏÂÃæµÚÎåÐУ©£¬ÏìÓ¦½«±»ºöÂÔ£¬²¢ÇÒ²»ÄÜʹÓÃÍøÕ¾·µ»ØµÄÄÚÈÝ¡£
ÇëÇóƾ֤ºÍͨÅä·û
µ±»ØÓ¦Æ¾Ö¤ÇëÇóʱ£¬·þÎñÆ÷±ØÐëÔÚ Access-Control-Allow-Credentials ÖÐÖ¸¶¨Ò»¸öÀ´Ô´£¬¶ø²»ÄÜÖ±½Óд* ͨÅä·û
ÒòΪÉÏÃæÊ¾Àý´úÂëÖеÄÇëÇó±êÍ·°üº¬ Cookie ±êÍ·£¬Èç¹û Access-Control-Allow-Credentials ÖÐÊÇÖ¸¶¨µÄͨÅä·û * µÄ»°£¬ÇëÇó»áʧ°Ü¡£
×¢ÒâÉÏÃæÊ¾ÀýÖÐµÄ Set-Cookie ÏìÓ¦±êÍ·»¹ÉèÖÃÁËÁíÍâÒ»¸öÖµ£¬Èç¹û·¢Éú¹ÊÕÏ£¬½«Òý·¢Òì³££¨È¡¾öÓÚËùʹÓõÄAPI£©¡£
###HTTP ÏìÓ¦±êÍ·
ÏÂÃæ»áÁгöһЩ·þÎñÆ÷¿çÓò¹²Ïí¹æ·¶¶¨ÒåµÄ HTTP ±êÍ·£¬ÉÏÃæ¼òµ¥¸ÅÊöÁËһϣ¬ÏÖÔÚÒ»ÆðÀ´ÈÏʶһÏ£¬Ö÷Òª»á½éÉÜÏÂÃæÕâЩ
Access-Control-Allow-Origin
Access-Control-Allow-Credentials
Access-Control-Allow-Headers
Access-Control-Allow-Methods
Access-Control-Expose-Headers
Access-Control-Max-Age
Access-Control-Request-Headers
Access-Control-Request-Method
Origin
Access-Control-Allow-Origin
Access-Control-Allow-Origin ÊÇ HTTP ÏìÓ¦±êÍ·£¬Ö¸Ê¾ÏìÓ¦ÊÇ·ñÄܹ»ºÍ¸ø¶¨µÄÔ´¹²Ïí×ÊÔ´¡£Access-Control-Allow-Origin Ö¸¶¨µ¥¸ö×ÊÔ´»á¸æËßä¯ÀÀÆ÷ÔÊÐíÖ¸¶¨À´Ô´·ÃÎÊ×ÊÔ´¡£¶ÔÓÚûÓÐÆ¾¾ÝµÄÇëÇó *ͨÅä·û£¬¸æËßä¯ÀÀÆ÷ÔÊÐíÈκÎÔ´·ÃÎÊ×ÊÔ´¡£
ÀýÈ磬Èç¹ûÒªÔÊÐíÔ´ https://mozilla.org µÄ´úÂë·ÃÎÊ×ÊÔ´£¬¿ÉÒÔʹÓÃÈçϵÄÖ¸¶¨·½Ê½
Access-Control-Allow-Origin:
https://mozilla.org
Vary: Origin |
Èç¹û·þÎñÆ÷Ö¸¶¨µ¥¸öÀ´Ô´¶ø²»ÊÇ*ͨÅä·û£¬Ôò·þÎñÆ÷»¹Ó¦ÔÚ Vary ÏìÓ¦±êÍ·Öаüº¬¸ÃÀ´Ô´¡£
Access-Control-Allow-Credentials
Access-Control-Allow-Credentials ÊÇ HTTP µÄÏìÓ¦±êÍ·£¬Õâ¸ö±êÍ·¸æËßä¯ÀÀÆ÷£¬µ±°üº¬Æ¾Ö¤ÇëÇó£¨Request.credentials£©Ê±ÊÇ·ñ½«ÏìÓ¦¹«¿ª¸øÇ°¶Ë JavaScript ´úÂë¡£
ÕâʱºòÄã»áÎʵ½ Request.credentials ÊÇÊ²Ã´ÍæÒ⣿²»Òª×ż±£¬À´¸øÄ㿴һϣ¬Ê×ÏÈÀ´¿´ Request ÊÇÊ²Ã´ÍæÒâ
ʵ¼ÊÉÏ£¬Request ÊÇ Fetch API µÄÒ»Àà½Ó¿Ú´ú±í×Å×ÊÔ´ÇëÇó¡£Ò»°ã´´½¨ Request ¶ÔÏóÓÐÁ½ÖÖ·½Ê½
ʹÓà Request() ¹¹Ô캯Êý´´½¨Ò»¸ö Request ¶ÔÏó
»¹¿ÉÒÔͨ¹ý FetchEvent.request api ²Ù×÷À´´´½¨
ÔÙÀ´ËµÏ Request.credentials ÊÇʲôÒâ˼£¬Request ½Ó¿ÚµÄƾ¾ÝÖ»¶ÁÊôÐÔָʾÔÚ¿çÓòÇëÇóµÄÇé¿öÏ£¬Óû§´úÀíÊÇ·ñÓ¦´ÓÆäËûÓò·¢ËÍ cookie¡£
µ±·¢Ë͵ÄÊÇÆ¾Ö¤Ä£Ê½µÄÇëÇó°üº¬ £¨Request.credentials£©Ê±£¬Èç¹û Access-Control-Allow-Credentials ֵΪ true£¬ä¯ÀÀÆ÷½«½öÏòǰ¶Ë JavaScript ´úÂ빫¿ªÏìÓ¦¡£
Access-Control-Allow-Credentials:
true |
ƾ֤һ°ã°üÀ¨ cookie¡¢ÈÏ֤ͷºÍ TLS ¿Í»§¶ËÖ¤Êé
µ±ÓÃ×÷¶ÔÔ¤¼ìÇëÇóÏìÓ¦µÄÒ»²¿·Öʱ£¬Õâ±íÃ÷ÊÇ·ñ¿ÉÒÔʹÓÃÆ¾¾Ý·¢³öʵ¼ÊÇëÇó¡£×¢Òâ¼òµ¥µÄ GET ÇëÇó²»»á½øÐÐÔ¤¼ì¡£
Access-Control-Allow-Headers
Access-Control-Allow-Headers ÊÇÒ»¸öÏìÓ¦±êÍ·£¬Õâ¸ö±êÍ·ÓÃÀ´ÏìÓ¦Ô¤¼ìÇëÇó£¬Ëü·¢³öʵ¼ÊÇëÇóʱ¿ÉÒÔʹÓÃÄÄЩHTTP±êÍ·¡£
ʾÀý
×Ô¶¨Òå±êÍ·
ÕâÊÇ Access-Control-Allow-Headers ±êÍ·µÄʾÀý¡£Ëü±íÃ÷³ýÁËÏñ CROS °²È«ÁгöµÄÇëÇó±êÍ·Í⣬¶Ô·þÎñÆ÷µÄ CROS ÇëÇó»¹Ö§³ÖÃûΪ X-Custom-Header µÄ×Ô¶¨Òå±êÍ·¡£
Access-Control-Allow-Headers:
X-Custom-Header |
¶à¸ö±êÍ·
Õâ¸öÀý×ÓչʾÁË Access-Control-Allow-Headers ÈçºÎʹÓöà¸ö±êÍ·
Access-Control-Allow-Headers:
X-Custom-Header, Upgrade-Insecure-Requests |
ÈÆ¹ýÆäËûÏÞÖÆ
¾¡¹ÜʼÖÕÔÊÐíʹÓà CORS °²È«ÁгöµÄÇëÇó±êÍ·£¬²¢ÇÒͨ³£²»ÐèÒªÔÚ Access-Control-Allow-Headers ÖÐÁгöÕâЩ±êÍ·£¬µ«ÊÇÎÞÂÛÈçºÎÁгöËüÃǶ¼½«ÈÆ¿ªÊÊÓÃµÄÆäËûÏÞÖÆ¡£
Access-Control-Allow-Headers:
Accept |
ÕâÀïÄã¿ÉÄÜ»áÓÐÒÉÎÊ£¬ÄÄЩÊÇ CORS ÁгöµÄ°²È«±êÍ·£¿£¨±ðÏÓÀÛ£¬¾ÍÊÇÕâôÂé·³£©
ÓÐÏÂÃæÕâЩ Accep¡¢Accept-Language¡¢Content-Language¡¢Content-Type £¬µ±ÇÒ½öµ±°üº¬ÕâЩ±êͷʱ£¬ÎÞÐèÔÚ CORS ÉÏÏÂÎÄÖз¢ËÍÔ¤¼ìÇëÇó¡£
Access-Control-Allow-Methods
Access-Control-Allow-Methods Ò²ÊÇÏìÓ¦±êÍ·£¬ËüÖ¸¶¨ÁËÄÄЩ·ÃÎÊ×ÊÔ´µÄ·½·¨¿ÉÒÔʹÓÃÔ¤¼ìÇëÇó¡£ÀýÈç
Access-Control-Allow-Methods:
POST, GET, OPTIONS
Access-Control-Allow-Methods: * |
Access-Control-Expose-Headers
Access-Control-Expose-Headers ÏìÓ¦±êÍ·±íÃ÷ÄÄЩ±êÍ·¿ÉÒÔ×÷ΪÏìÓ¦µÄÒ»²¿·Ö¹«¿ª¡£Ä¬ÈÏÇé¿öÏ£¬½ö¹«¿ª6¸öCORS°²È«ÁгöµÄÏìÓ¦±êÍ·£¬·Ö±ðÊÇ
Cache-Control
Content-Language
Content-Type
Expires
Last-Modified
Pragma
Èç¹ûÏ£Íû¿Í»§¶ËÄܹ»·ÃÎÊÆäËû±êÍ·£¬Ôò±ØÐëʹÓà Access-Control-Expose-Headers ±êÍ·ÁгöËüÃÇ¡£ÏÂÃæÊÇʾÀý
Òª¹«¿ª·Ç CORS °²È«ÁгöµÄÇëÇó±êÍ·£¬¿ÉÒÔÏñÈçÏÂÕâÑùÖ¸¶¨
Access-Control-Expose-Headers:
Content-Length |
ÒªÁíÍ⹫¿ª×Ô¶¨Òå±êÍ·£¬ÀýÈç X-Kuma-Revision£¬¿ÉÒÔÖ¸¶¨¶à¸ö±êÍ·£¬²¢ÓöººÅ·Ö¸ô
Access-Control-Expose-Headers:
Content-Length, X-Kuma-Revision |
ÔÚ²»ÊÇÆ¾Ö¤ÇëÇóÖУ¬Ä㻹¿ÉÒÔʹÓÃͨÅä·û
Access-Control-Expose-Headers:
* |
µ«ÊÇ£¬Õâ²»»áͨÅä Authorization ±êÍ·£¬Òò´ËÈç¹ûÐèÒª¹«¿ªËü£¬ÔòÐèÒªÃ÷È·Áгö
Access-Control-Expose-Headers:
*, Authorization |
Access-Control-Max-Age
Access-Control-Max-Age ÏìӦͷ±íʾԤ¼ìÇëÇóµÄ½á¹û¿ÉÒÔ»º´æ¶à³¤Ê±¼ä£¬ÀýÈç
Access-Control-Max-Age:
600 |
±íʾԤ¼ìÇëÇó¿ÉÒÔ»º´æ10·ÖÖÓ
Access-Control-Request-Headers
ä¯ÀÀÆ÷ÔÚ·¢³öÔ¤¼ìÇëÇóʱʹÓà Access-Control-Request-Headers ÇëÇó±êÍ·£¬Ê¹·þÎñÆ÷ÖªµÀÔÚ·¢³öʵ¼ÊÇëÇóʱ¿Í»§¶Ë¿ÉÄÜ·¢Ë굀 HTTP ±êÍ·¡£
Access-Control-Request-Headers:
X-PINGOTHER, Content-Type |
####Access-Control-Request-Method
ͬÑùµÄ£¬Access-Control-Request-Method ÏìÓ¦±êÍ·¸æËß·þÎñÆ÷·¢³öÔ¤¼ìÇëÇóʱ½«Ê¹ÓÃÄÇÖÖ HTTP ·½·¨¡£´Ë±êÍ·ÊDZØÐèµÄ£¬ÒòΪԤ¼ìÇëÇóʼÖÕÊÇ OPTIONS£¬²¢ÇÒʹÓõķ½·¨Óëʵ¼ÊÇëÇó²»Í¬¡£
Access-Control-Request-Method:
POST |
Origin
Origin ÇëÇó±êÍ·±íÃ÷Æ¥ÅäµÄÀ´Ô´£¬Ëü²»°üº¬ÈκÎÐÅÏ¢£¬½ö½ö°üº¬·þÎñÆ÷Ãû³Æ£¬ËüÓë CORS ÇëÇóÒÔ¼° POST ÇëÇóÒ»Æð·¢ËÍ£¬ËüÀàËÆÓÚ Referer ±êÍ·£¬µ«Óë´Ë±êÍ·²»Í¬£¬ËüûÓй«¿ªÕû¸ö·¾¶¡£ÀýÈç
Origin: https://developer.mozilla.org |
HTTP Ìõ¼þÇëÇó
HTTP ¾ßÓÐÌõ¼þÇëÇóµÄ¸ÅÄͨ¹ý±È½Ï×ÊÔ´¸üÐÂÉú³ÉµÄÖµÓëÑéÖ¤Æ÷µÄÖµ½øÐбȽϣ¬À´È·¶¨×ÊÔ´ÊÇ·ñ½øÐйý¸üС£ÕâÑùµÄÇëÇó¶ÔÓÚÑéÖ¤»º´æµÄÄÚÈÝ¡¢Ìõ¼þÇëÇó¡¢ÑéÖ¤×ÊÔ´µÄÍêÕûÐÔÀ´Ëµ·Ç³£ÖØÒª¡£
ÔÔò
HTTP Ìõ¼þÇëÇóÊǸù¾ÝÌØ¶¨±êÍ·µÄÖµÖ´Ðв»Í¬µÄÇëÇó£¬ÕâЩ±êÍ·¶¨ÒåÁËÒ»¸öǰÌáÌõ¼þ£¬Èç¹ûǰÌáÌõ¼þÆ¥Åä»ò²»Æ¥Å䣬ÔòÇëÇóµÄ½á¹û½«ÓÐËù²»Í¬¡£
¶ÔÓÚ °²È« µÄ·½·¨£¬ÏñÊÇ GET¡¢ÓÃÓÚÇëÇóÎĵµµÄ×ÊÔ´£¬½öµ±Ìõ¼þÇëÇóµÄÌõ¼þÂú×ãʱ·¢»ØÎĵµ×ÊÔ´£¬ËùÒÔ£¬ÕâÖÖ·½Ê½¿ÉÒÔ½ÚÔ¼´ø¿í¡£
ʲôÊǰ²È«µÄ·½·¨£¬¶ÔÓÚ HTTP À´Ëµ£¬°²È«µÄ·½·¨ÊDz»»á¸Ä±ä·þÎñÆ÷״̬µÄ·½·¨£¬»»¾ä»°Ëµ£¬Èç¹û·½·¨Ö»ÊÇÖ»¶Á²Ù×÷£¬ÄÇôËü¿Ï¶¨Êǰ²È«µÄ·½·¨£¬±ÈÈç˵ GET ÇëÇó£¬Ëü¿Ï¶¨Êǰ²È«µÄ·½·¨£¬ÒòΪËüÖ»ÊÇÇëÇó×ÊÔ´¡£¼¸ÖÖ³£¼ûµÄ·½·¨¿Ï¶¨Êǰ²È«µÄ£¬ËüÃÇÊÇ GET¡¢HEADºÍ OPTIONS¡£ËùÓа²È«µÄ·½·¨¶¼ÊÇÃݵȵģ¨ÕâËûÂèÃݵÈÓÖÊÇɶÒâ˼£¿£©µ«²»ÊÇËùÓÐÃݵȵķ½·¨¶¼Êǰ²È«µÄ£¬ÀýÈç PUT ºÍ DELETE ¶¼ÊÇÃݵȵ쬵«²»°²È«
ÃݵÈÐÔ£ºÈç¹ûÏàͬµÄ¿Í»§¶Ë·¢ÆðÒ»´Î»òÕß¶à´Î HTTP ÇëÇó»áµÃµ½ÏàͬµÄ½á¹û£¬Ôò˵Ã÷ HTTP ÊÇÃݵȵġ££¨ÎÒÃÇÕâ´Î²»ÉÃݵÈÐÔ£©
¶ÔÓÚ ·Ç°²È« µÄ·½·¨£¬ÏñÊÇ PUT£¬Ö»ÓÐÔʼÎĵµÓë·þÎñÆ÷ÉÏ´æ´¢µÄ×ÊÔ´Ïàͬʱ£¬²Å¿ÉÒÔʹÓÃÌõ¼þÇëÇóÀ´´«ÊäÎĵµ¡££¨PUT ·½·¨Í¨³£ÓÃÀ´´«ÊäÎļþ£¬¾ÍÏñ FTP ÐÒéµÄÎļþÉÏ´«Ò»Ñù£©
ÑéÖ¤
ËùÓеÄÌõ¼þÇëÇ󶼻᳢ÊÔ¼ì²é·þÎñÆ÷ÉÏ´æ´¢µÄ×ÊÔ´ÊÇ·ñÓëij¸öÌØ¶¨°æ±¾µÄ×ÊÔ´ÏàÆ¥Å䡣ΪÁËÂú×ãÕâÖÖÇé¿ö£¬Ìõ¼þÇëÇóÐèҪָʾ×ÊÔ´µÄ°æ±¾¡£ÓÉÓÚÎÞ·¨ºÍÕû¸öÎļþÖð¸ö×Ö·û½øÐбȽϣ¬Òò´ËÐèÒª°ÑÕû¸öÎļþÃè»æ³ÉÒ»¸öÖµ£¬È»ºó°Ñ´ËÖµºÍ·þÎñÆ÷ÉϵÄ×ÊÔ´½øÐбȽϣ¬ÕâÖÖ·½Ê½³ÆÎª±È½ÏÆ÷£¬±È½ÏÆ÷ÓÐÁ½¸öÌõ¼þ
ÎĵµµÄ×îºóÐÞ¸ÄÈÕÆÚ
Ò»¸ö²»Í¸Ã÷µÄ×Ö·û´®£¬ÓÃÓÚΨһ±êʶÿ¸ö°æ±¾£¬³ÆÎªÊµÌå±êÇ©»ò Etag¡£
±È½ÏÁ½¸ö×ÊÔ´ÊÇ·ñʱÏàͬµÄ°æ±¾ÓÐЩ¸´ÔÓ£¬¸ù¾ÝÉÏÏÂÎÄ£¬ÓÐÁ½ÖÖÏàµÈÐÔ¼ì²é
µ±ÆÚÍûµÄÊÇ×Ö½Ú¶Ô×Ö½Ú½øÐбȽÏʱ£¬ÀýÈçÔÚ»Ö¸´ÏÂÔØÊ±£¬Ê¹ÓÃÇ¿ Etag½øÐÐÑéÖ¤
µ±Óû§´úÀíÐèÒª±È½ÏÁ½¸ö×ÊÔ´ÊÇ·ñ¾ßÓÐÏàͬµÄÄÚÈÝʱ£¬Ê¹ÓÃÈô Etag ½øÐÐÑéÖ¤
HTTP ÐÒéĬÈÏʹÓà ǿÑéÖ¤£¬ËüÖ¸¶¨ºÎʱ½øÐÐÈõÑéÖ¤
Ç¿ÑéÖ¤
Ç¿ÑéÖ¤±£Ö¤µÄÊÇ×Ö½Ú ¼¶±ðµÄÑéÖ¤£¬ÑϸñµÄÑéÖ¤·Ç³£Ñϸñ£¬¿ÉÄÜÔÚ·þÎñÆ÷¼¶±ðÄÑÒÔ±£Ö¤£¬µ«ÊÇËüÄܹ»±£Ö¤ÈκÎʱºò¶¼²»»á¶ªÊ§Êý¾Ý£¬µ«ÕâÖÖÑéÖ¤¶ªÊ§ÐÔÄÜ¡£
ҪʹÓà Last-Modified ºÜÄÑʵÏÖÇ¿ÑéÖ¤£¬Í¨³££¬ÕâÊÇͨ¹ýʹÓôøÓÐ×ÊÔ´µÄ MD5 ¹þÏ£ÖµµÄ Etag À´Íê³ÉµÄ¡£
ÈõÑéÖ¤
ÈõÑéÖ¤²»Í¬ÓÚÇ¿ÑéÖ¤£¬ÒòΪÈç¹ûÄÚÈÝÏàµÈ£¬Ëü½«ÈÏΪÎĵµµÄÁ½¸ö°æ±¾Ïàͬ£¬ÀýÈ磬һ¸öÒ³ÃæÓëÁíÒ»¸öÒ³ÃæµÄ²»Í¬Ö®´¦½öÔÚÓÚÒ³½ÅµÄÈÕÆÚ²»Í¬£¬Òò´Ë¸ÃÒ³Ãæ±»ÈÏΪÓëÆäËûÒ³ÃæÏàͬ¡£¶øÊ¹ÓÃÇ¿Ñé֤ʱÔò±»ÈÏΪÕâÁ½¸ö°æ±¾ÊDz»Í¬µÄ¡£¹¹½¨Ò»¸öÈôÑéÖ¤µÄ Etag ϵͳ¿ÉÄÜ»á·Ç³£¸´ÔÓ£¬ÒòΪÕâÐèÒªÁ˽âÿ¸öÒ³ÃæÔªËØµÄÖØÒªÐÔ£¬µ«ÊǶÔÓÚÓÅ»¯»º´æÐÔÄܷdz£ÓÐÓá£
ÏÂÃæ½éÉÜһϠEtag ÈçºÎʵÏÖÇ¿ÈõÑéÖ¤¡£
Etag ÏìӦͷÊÇÌØ¶¨°æ±¾µÄ±êʶ£¬ËüÄܹ»Ê¹»º´æ±äµÃ¸ü¸ßЧ²¢Äܹ»½ÚÊ¡´ø¿í£¬ÒòΪÈç¹û»º´æÄÚÈÝδ·¢Éú±ä¸ü£¬Web ·þÎñÆ÷Ôò²»ÐèÒªÖØÐ·¢ËÍÍêÕûµÄÏìÓ¦¡£³ý´ËÖ®Í⣬Etag Äܹ»·ÀÖ¹×ÊԴͬʱ¸üл¥Ïา¸Ç¡£

Èç¹û¸ø¶¨ URL ÉϵÄ×ÊÔ´·¢Éú±ä¸ü£¬±ØÐëÉú³ÉÒ»¸öÐ嵀 Etag Öµ£¬Í¨¹ý±È½ÏËüÃÇ¿ÉÒÔÈ·¶¨×ÊÔ´µÄÁ½¸ö±íʾÐÎʽÊÇ·ñÏàͬ¡£
Etag ÖµÓÐÁ½ÖÖ£¬Ò»ÖÖÊÇÇ¿ Etag£¬Ò»ÖÖÊÇÈõ Etag£»
Ç¿ Etag Öµ£¬ÎÞÂÛʵÌå·¢Éú¶àôϸ΢µÄ±ä»¯¶¼»á¸Ä±äÆäÖµ£¬Ò»°ãµÄ±íʾÈçÏÂ
Etag: "33a64df551425fcc55e4d 42a148795d9f25f89d4" |
Èõ Etag Öµ£¬Èõ Etag ÖµÖ»ÓÃÓÚÌáʾ×ÊÔ´ÊÇ·ñÏàͬ¡£Ö»ÓÐ×ÊÔ´·¢ÉúÁ˸ù±¾¸Ä±ä£¬²úÉú²îÒìʱ²Å»á¸Ä±ä Etag Öµ¡£Õâʱ£¬»áÔÚ×Ö¶ÎÖµ×ʼ´¦¸½¼Ó W/¡£
ÏÂÃæ¾ÍÀ´¾ßÌå̽ÌÖÒ»ÏÂÌõ¼þÇëÇóµÄ±êÍ·ºÍ Etag µÄ¹ØÏµ
Ìõ¼þÇëÇó
Ìõ¼þÇëÇóÖ÷Òª°üº¬µÄ±êÍ·ÈçÏÂ
If-Match
If-None-Match
If-Modified-Since
If-Unmodified-Since
If-Range
If-Match
¶ÔÓÚ GET ºÍ POST ·½·¨£¬·þÎñÆ÷½öÔÚÓëÁгöµÄ Etag£¨ÏìÓ¦±êÍ·£© ֮һƥÅäʱ²Å·µ»ØÇëÇóµÄ×ÊÔ´¡£ÕâÀïÓÖ¶àÁËÒ»¸öÐÂ´Ê Etag£¬ÎÒÃÇÉÔºóÔÙ˵ Etag µÄÓ÷¨¡£¶ÔÓÚÏñÊÇ PUT ºÍÆäËû·Ç°²È«µÄ·½·¨£¬ÔÚÕâÖÖÇé¿öÏ£¬Ëü½ö½ö½«ÉÏ´«×ÊÔ´¡£
ÏÂÃæÊÇÁ½ÖÖ³£¼ûµÄ°¸Àý
¶ÔÓÚ GET ºÍ POST ·½·¨£¬»á½áºÏʹÓà Range ±êÍ·£¬Ëü¿ÉÒÔÈ·±£Ð·¢ËÍÇëÇóµÄ·¶Î§ÓëÉÏÒ»¸öÇëÇóµÄ×ÊÔ´Ïàͬ£¬Èç¹û²»Æ¥ÅäµÄ»°£¬»á·µ»Ø 416 ÏìÓ¦¡£
¶ÔÓÚÆäËû·½·¨£¬ÌرðÊÇ PUT ·½·¨£¬If-Match ¿ÉÒÔ·ÀÖ¹¶ªÊ§¸üУ¬·þÎñÆ÷»á±È¶Ô If-Match µÄ×Ö¶ÎÖµºÍ×ÊÔ´µÄ Etag Öµ£¬½öµ±Á½ÕßÒ»ÖÂʱ£¬²Å»áÖ´ÐÐÇëÇó¡£·´Ö®£¬Ôò·µ»Ø×´Ì¬Âë 412 Precondition Failed µÄÏìÓ¦¡£ÀýÈç
If-Match: "bfc13a64729c4290ef5b2c 2730249c88ca92d82d"
If-Match: * |
If-None-Match
Ìõ¼þÇëÇó£¬ËüÓë If-Match µÄ×÷ÓÃÏà·´£¬½öµ± If-None-Match µÄ×Ö¶ÎÖµÓë Etag Öµ²»Ò»ÖÂʱ£¬¿É´¦Àí¸ÃÇëÇó¡£¶ÔÓÚGET ºÍ HEAD £¬½öµ±·þÎñÆ÷ûÓÐÓë¸ø¶¨×ÊÔ´Æ¥ÅäµÄ Etag ʱ£¬·þÎñÆ÷½«·µ»Ø 200 OK×÷ΪÏìÓ¦¡£¶ÔÓÚÆäËû·½·¨£¬½öµ±×îÖÕÏÖÓÐ×ÊÔ´µÄ Etag ÓëÁгöµÄÈκÎÖµ¶¼²»Æ¥Åäʱ£¬²Å»á´¦ÀíÇëÇó¡£
µ± GET ºÍ POST ·¢Ë굀 If-None-MatchÓë Etag Æ¥Åäʱ£¬·þÎñÆ÷»á·µ»Ø 304¡£
If-None-Match:
"bfc13a64729c4290e f5b2c2730249c88ca92d82d"
If-None-Match: W/"67ab43", "54ed21",
"7892dd"
If-None-Match: * |
If-Modified-Since
If-Modified-Since ÊÇ HTTP Ìõ¼þÇëÇóµÄÒ»²¿·Ö£¬Ö»ÓÐÔÚ¸ø¶¨ÈÕÆÚÖ®ºó£¬·þÎñ¶ËÐÞ¸ÄÁËÇëÇóËùÐèÒªµÄ×ÊÔ´£¬²Å»á·µ»Ø 200 OK µÄÏìÓ¦¡£Èç¹ûÔÚ¸ø¶¨ÈÕÆÚÖ®ºó£¬·þÎñ¶ËûÓÐÐÞ¸ÄÄÚÈÝ£¬ÏìÓ¦»á·µ»Ø 304 ²¢ÇÒ²»´øÈκÎÏìÓ¦Ìå¡£If-Modified-Since Ö»ÄÜʹÓà GET ºÍ HEAD ÇëÇó¡£
If-Modified-Since Óë If-None-Match ½áºÏʹÓÃʱ£¬Ëü½«±»ºöÂÔ£¬³ý·Ç·þÎñÆ÷²»Ö§³Ö If-None-Match¡£Ò»°ã±íʾÈçÏÂ
If-Modified-Since:
Wed, 21 Oct 2015 07:28:00 GMT |
×¢Ò⣺ÕâÊǸñÁÖÍþÖαê׼ʱ¼ä¡£ HTTP ÈÕÆÚʼÖÕÒÔ¸ñÁÖÄáÖαê׼ʱ¼ä±íʾ£¬¶ø²»ÊDZ¾µØÊ±¼ä¡£
If-Range
If-Range Ò²ÊÇÌõ¼þÇëÇó£¬Èç¹ûÂú×ãÌõ¼þ£¨If-Range µÄÖµºÍ Etag Öµ»òÕ߸üеÄÈÕÆÚʱ¼äÒ»Ö£©£¬Ôò»á·¢³ö·¶Î§ÇëÇ󣬷ñÔò½«»á·µ»ØÈ«²¿×ÊÔ´¡£ËüµÄÒ»°ã±íʾÈçÏÂ
If-Range: Wed,
21 Oct 2015 07:28:00 GMT
If-Range: bfc13a64729c42 90ef5b2c2730249c88ca92d82d |
If-Unmodified-Since
If-Unmodified-Since HTTP ÇëÇó±êÍ·Ò²ÊÇÒ»¸öÌõ¼þÇëÇ󣬷þÎñÆ÷Ö»ÓÐÔÚ¸ø¶¨ÈÕÆÚÖ®ºóûÓÐ¶ÔÆä½øÐÐÐÞ¸Äʱ£¬·þÎñÆ÷²Å·µ»ØÇëÇó×ÊÔ´¡£Èç¹ûÔÚÖ¸¶¨ÈÕÆÚʱ¼äºó·¢ÉúÁ˸üУ¬ÔòÒÔ״̬Âë 412 Precondition Failed ×÷ΪÏìÓ¦·µ»Ø¡£
If-Unmodified-Since:
Wed, 21 Oct 2015 07:28:00 GMT |
Ìõ¼þÇëÇóʾÀý
»º´æ¸üÐÂ
Ìõ¼þÇëÇó×î³£¼ûµÄʾÀý¾ÍÊǸüлº´æ£¬Èç¹û»º´æÊǿջòûÓлº´æ£¬ÔòÒÔ200 OKµÄ״̬·¢ËÍ»ØÇëÇóµÄ×ÊÔ´¡£ÈçÏÂͼËùʾ

¿Í»§¶ËµÚÒ»´Î·¢ËÍÇëÇóûÓУ¬»º´æÎª¿Õ²¢ÇÒûÓÐÌõ¼þÇëÇ󣬷þÎñÆ÷ÔÚÊÕµ½¿Í»§¶ËÇëÇóºó£¬ÉèÖÃÑéÖ¤Æ÷ Last-Modified ºÍ Etag ±êÇ©£¬²¢°ÑÕâÁ½¸ö±êÇ©Ëæ×ÅÏìÓ¦Ò»Æð·¢Ëͻؿͻ§¶Ë¡£
ÏÂÒ»´Î¿Í»§¶ËÔÙ·¢ËÍÏàͬµÄÇëÇóºó£¬»áÖ±½Ó´Ó»º´æÖÐÌáÈ¡£¬Ö»Òª»º´æÃ»ÓйýÆÚ£¬¾Í²»»áÓÐÈκÎеÄÇëÇóµ½´ï·þÎñÆ÷ÖØÐÂÏÂÔØ×ÊÔ´¡£µ«ÊÇ£¬Ò»µ©»º´æ¹ýÆÚ£¬¿Í»§¶Ë²»»áÖ±½ÓʹÓûº´æµÄÖµ£¬¶øÊÇ·¢³öÌõ¼þÇëÇó¡£ ÑéÖ¤Æ÷µÄÖµÓÃ×÷ If-Modified-Since ºÍIf-Match±êÍ·µÄ²ÎÊý¡£
»º´æ¹ýÆÚºó¿Í»§¶ËÖØÐ·¢ÆðÇëÇ󣬷þÎñÆ÷ÊÕµ½ÇëÇóºó·¢ÏÖÈç¹û×ÊԴûÓиü¸Ä£¬·þÎñÆ÷»á·¢»Ø 304 Not ModifiedÏìÓ¦£¬Õâʹ»º´æÔÙ´ÎˢУ¬²¢Èÿͻ§¶ËʹÓûº´æµÄ×ÊÔ´¡£ ¾¡¹ÜÓÐÒ»¸öÏìÓ¦/ÇëÇóÍù·µÏûºÄһЩ×ÊÔ´£¬µ«ÊÇÕâ±ÈÔÙ´Îͨ¹ýÓÐÏß´«ÊäÕû¸ö×ÊÔ´¸üÓÐЧ¡£

Èç¹û×ÊÔ´ÒѾ·¢Éú¸ü¸Ä£¬Ôò·þÎñÆ÷½öʹÓÃа汾µÄ×ÊÔ´·µ»Ø 200 OK ÏìÓ¦£¬¾ÍÏñûÓÐÌõ¼þÇëÇ󣬲¢ÇÒ¿Í»§¶Ë»áÖØÐÂʹÓÃеÄ×ÊÔ´£¬´ÓÕâ¸ö½Ç¶ÈÀ´½²£¬»º´æÊÇÌõ¼þÇëÇóµÄǰÖÃÌõ¼þ

¶ÏµãÐø´«
HTTP ¿ÉÒÔÖ§³ÖÎļþµÄ²¿·ÖÏÂÔØ£¬Í¨¹ý±£ÁôÒÑ»ñµÃµÄÐÅÏ¢£¬´Ë¹¦ÄÜÔÊÐí»Ö¸´ÏÈǰµÄ²Ù×÷£¬´Ó¶ø½ÚÊ¡´ø¿íºÍʱ¼ä¡£

Ö§³Ö¶ÏµãÐø´«µÄ·þÎñÆ÷ͨ¹ý·¢ËÍ Accept-Ranges ±êÍ·¹ã²¥´ËÏûÏ¢£¬Ò»µ©·¢ÉúÕâÖÖÇé¿ö£¬¿Í»§¶Ë¿ÉÒÔͨ¹ý·¢ËÍȱÉÙ·¶Î§µÄ Ranges±êÍ·À´»Ö¸´ÏÂÔØ

ÕâÀïÄã¿ÉÄÜÓÐÒÉÎÊ Ranges ºÍ Content-RangeÊÇʲô£¬À´½âÊÍÒ»ÏÂ
Range
Range HTTP ÇëÇó±êͷָʾ·þÎñÆ÷Ó¦·µ»ØÎĵµÖ¸¶¨²¿·ÖµÄ×ÊÔ´£¬¿ÉÒÔÒ»´ÎÇëÇóÒ»¸ö Range À´·µ»Ø¶à¸ö²¿·Ö£¬·þÎñÆ÷»á½«ÕâЩ×ÊÔ´·µ»Ø¸÷¸öÎĵµÖС£Èç¹û·þÎñÆ÷³É¹¦·µ»Ø£¬ÄÇô½«·µ»Ø 206 ÏìÓ¦£»Èç¹û Range ·¶Î§ÎÞЧ£¬·þÎñÆ÷·µ»Ø416 Range Not Satisfiable´íÎó£»·þÎñÆ÷»¹¿ÉÒÔºöÂÔ Range ±êÍ·£¬²¢ÇÒ·µ»Ø 200 ×÷ΪÏìÓ¦¡£
Range: bytes=200-1000,
2000-6576, 19000- |
»¹ÓÐÒ»ÖÖ±íʾÊÇ
ËüÃÇ·Ö±ð±íʾÇëÇóǰ500¸ö×Ö½ÚºÍ×îºó500¸ö×Ö½Ú£¬Èç¹û·¶Î§Öصþ£¬Ôò·þÎñÆ÷¿ÉÄÜ»á¾Ü¾ø¸ÃÇëÇó¡£
Content-Range
HTTP µÄ Content-Range ÏìÓ¦±êÍ·ÊÇÕë¶Ô·¶Î§ÇëÇó¶øÉ趨µÄ£¬·µ»ØÏìӦʱʹÓÃÊײ¿×Ö¶Î Content-Range£¬Äܹ»¸æÖª¿Í»§¶ËÏìӦʵÌåµÄÄIJ¿·ÖÊÇ·ûºÏ¿Í»§¶ËÇëÇóµÄ£¬×Ö¶ÎÒÔ×Ö½ÚΪµ¥Î»¡£ËüµÄÒ»°ã±íʾÈçÏÂ
Content-Range:
bytes 200-1000/67589 |
É϶δúÂë±íʾ´ÓËùÓÐ 67589 ¸ö×Ö½ÚÖзµ»Ø 200-1000 ¸ö×Ö½ÚµÄÄÚÈÝ
ÄÇôÉÏÃæµÄ Content-RangeÄãÒ²Ó¦¸ÃÖªµÀÊÇʲôÒâ˼ÁË
¶ÏµãÐø´«µÄÔÀí±È½Ï¼òµ¥£¬µ«ÊÇÕâÖÖ·½Ê½´æÔÚDZÔÚµÄÎÊÌ⣺Èç¹ûÔÚÁ½´ÎÏÂÔØ×ÊÔ´µÄÆÚ¼ä½øÐÐÁË×ÊÔ´¸üУ¬ÄÇô»ñµÃµÄ·¶Î§½«¶ÔÓ¦ÓÚ×ÊÔ´µÄÁ½¸ö²»Í¬°æ±¾£¬²¢ÇÒ×îÖÕÎĵµ½«±»ÆÆ»µ¡£
ΪÁË×èÖ¹ÕâÖÖÇé¿öµÄ³öÏÖ£¬¾Í»áʹÓÃÌõ¼þÇëÇó¡£¶ÔÓÚ·¶Î§À´Ëµ£¬ÓÐÁ½ÖÖ·½·¨¿ÉÒÔ×öµ½ÕâÒ»µã¡£Ò»ÖÖ·½·¨ÊÇʹÓà If-Modified-SinceºÍIf-Match£¬Èç¹ûǰÌáÌõ¼þʧ°Ü£¬·þÎñÆ÷½«·µ»Ø´íÎó£»È»ºó¿Í»§¶Ë´ÓÍ·¿ªÊ¼ÖØÐÂÏÂÔØ¡£

¼´Ê¹´Ë·½·¨ÓÐЧ£¬µ±Îĵµ×ÊÔ´·¢Éú¸Ä±äʱ£¬ËüÒ²»áÌí¼Ó¶îÍâµÄ ÏìÓ¦/ÇëÇó ½»»»¡£Õâ»á½µµÍÐÔÄÜ£¬²¢ÇÒ HTTP ¾ßÓÐÌØ¶¨µÄ±êÍ·À´±ÜÃâÕâÖÖÇé¿ö If-Range¡£

¸Ã½â¾ö·½°¸Ð§Âʸü¸ß£¬µ«Áé»îÐÔÉÔ²îһЩ£¬ÒòΪÔÚÕâÖÖÇé¿öÏÂÖ»ÄÜʹÓÃÒ»¸ö Etag¡£
ͨ¹ýÀÖ¹ÛËø±ÜÃⶪʧ¸üÐÂ
Web Ó¦ÓóÌÐòÖÐ×îÆÕ±éµÄ²Ù×÷ÊÇ×ÊÔ´¸üС£ÕâÔÚÈκÎÎļþϵͳ»òÓ¦ÓóÌÐòÖж¼ºÜ³£¼û£¬µ«ÊÇÈκÎÔÊÐí´æ´¢Ô¶³Ì×ÊÔ´µÄÓ¦ÓóÌÐò¶¼ÐèÒªÕâÖÖ»úÖÆ¡£
ʹÓà put ·½·¨£¬Äã¿ÉÒÔʵÏÖÕâÒ»µã£¬¿Í»§¶ËÊ×ÏȶÁÈ¡ÔʼÎļþ¶ÔÆä½øÐÐÐ޸ģ¬È»ºó°ÑËüÃÇ·¢Ë͵½·þÎñÆ÷¡£

ÉÏÃæÕâÖÖÇëÇóÏìÓ¦´æÔÚÎÊÌ⣬һµ©¿¼Âǵ½²¢·¢ÐÔ£¬ÊÂÇé¾Í»á±äµÃ²»×¼È·¡£µ±¿Í»§¶ËÔÚ±¾µØÐÞ¸Ä×ÊÔ´´òËãÖØÐ·¢ËÍ֮ǰ£¬µÚ¶þ¸ö¿Í»§¶Ë¿ÉÒÔ»ñÈ¡ÏàͬµÄ×ÊÔ´²¢¶Ô×ÊÔ´½øÐÐÐ޸IJÙ×÷£¬ÕâÑù¾Í»áÔì³ÉÎÊÌâ¡£µ±ËüÃÇÖØÐ·¢ËÍÇëÇóµ½·þÎñÆ÷ʱ£¬µÚÒ»¸ö¿Í»§¶ËËù×öµÄÐ޸Ľ«±»µÚ¶þ´Î¿Í»§¶ËµÄÐÞ¸ÄËù¸²¸Ç£¬ÒòΪµÚ¶þ´Î¿Í»§¶ËÐ޸IJ¢²»ÖªµÀµÚÒ»´Î¿Í»§¶ËÕýÔÚÐ޸ġ£×ÊÔ´Ìá½»²¢¸üеÄÒ»·½²»»á´«´ï¸øÁíÍâÒ»·½£¬ËùÒÔÒª±£ÁôÄĸö¿Í»§µÄ¸ü¸Ä£¬½«Ëæ×ÅËûÃÇÌá½»µÄËٶȶø±ä»¯£» ÕâÈ¡¾öÓÚ¿Í»§¶Ë£¬·þÎñÆ÷µÄÐÔÄÜ£¬ÉõÖÁÈ¡¾öÓÚÈ˹¤ÔÚ¿Í»§¶Ë±à¼ÎĵµµÄÐÔÄÜ¡£ ÀýÈçÏÂÃæÕâ¸öÁ÷³Ì

Èç¹ûûÓÐÁ½¸öÓû§Í¬Ê±²Ù×÷·þÎñÆ÷£¬Ò²¾Í²»´æÔÚÕâ¸öÎÊÌâ¡£µ«ÊÇ£¬ÏÖʵÇé¿öÊDz»¿ÉÄÜÖ»Óе¥¸öÓû§³öÏֵģ¬ËùÒÔΪÁ˹æ±Ü»òÕß±ÜÃâÕâ¸öÎÊÌ⣬ÎÒÃÇÏ£Íû¿Í»§¶Ë×ÊÔ´ÔÚ¸üÐÂʱ½øÐÐÌáʾ»òÕßÐ޸ı»¾Ü¾øÊ±ÊÕµ½Í¨Öª¡£
Ìõ¼þÇëÇóÔÊÐíʵÏÖÀÖ¹ÛËøËã·¨¡£Õâ¸ö¸ÅÄîÊÇÔÊÐíËùÓеĿͻ§¶Ë»ñÈ¡×ÊÔ´µÄ¸±±¾£¬È»ºóÈÃËûÃÇÔÚ±¾µØÐÞ¸Ä×ÊÔ´£¬²¢³É¹¦Í¨¹ýÔÊÐíµÚÒ»¸ö¿Í»§¶ËÌá½»¸üÐÂÀ´¿ØÖƲ¢·¢£¬»ùÓÚ´Ë·þÎñ¶ËµÄºóÃæ°æ±¾µÄ¸üж¼½«±»¾Ü¾ø¡£

ÕâÊÇʹÓà If-Match »ò If-Unmodified-Since±êͷʵÏֵġ£Èç¹û Etag ÓëÔʼÎļþ²»Æ¥Å䣬»òÕß×Ô»ñÈ¡ÒÔÀ´ÒѶÔÎļþ½øÐÐÁËÐ޸ģ¬Ôò¸ü¸ÄΪ¾Ü¾ø¸üУ¬²¢ÏÔʾ412 Precondition Failed´íÎó¡£
HTTP Cookies
HTTP ÐÒéÖÐµÄ Cookie °üÀ¨ Web Cookie ºÍä¯ÀÀÆ÷ Cookie£¬ËüÊÇ·þÎñÆ÷·¢Ë͵½ Web ä¯ÀÀÆ÷µÄһС¿éÊý¾Ý¡£·þÎñÆ÷·¢Ë͵½ä¯ÀÀÆ÷µÄ Cookie£¬ä¯ÀÀÆ÷»á½øÐд洢£¬²¢ÓëÏÂÒ»¸öÇëÇóÒ»Æð·¢Ë͵½·þÎñÆ÷¡£Í¨³££¬ËüÓÃÓÚÅжÏÁ½¸öÇëÇóÊÇ·ñÀ´×ÔÓÚͬһ¸öä¯ÀÀÆ÷£¬ÀýÈçÓû§±£³ÖµÇ¼״̬¡£
HTTP Cookie »úÖÆÊÇ HTTP ÐÒéÎÞ״̬µÄÒ»ÖÖ²¹³äºÍ¸ÄÁ¼
Cookie Ö÷ÒªÓÃÓÚÏÂÃæÈý¸öÄ¿µÄ
»á»°¹ÜÀí
µÇ½¡¢¹ºÎï³µ¡¢ÓÎÏ·µÃ·Ö»òÕß·þÎñÆ÷Ó¦¸Ã¼ÇסµÄÆäËûÄÚÈÝ
¸öÐÔ»¯
Óû§Æ«ºÃ¡¢Ö÷Ìâ»òÕ߯äËûÉèÖÃ
×·×Ù
¼Ç¼ºÍ·ÖÎöÓû§ÐÐΪ
Cookie Ôø¾ÓÃÓÚÒ»°ãµÄ¿Í»§¶Ë´æ´¢¡£ËäÈ»ÕâÊǺϷ¨µÄ£¬ÒòΪËüÃÇÊÇÔÚ¿Í»§¶ËÉÏ´æ´¢Êý¾ÝµÄΨһ·½·¨£¬µ«Èç½ñ½¨ÒéʹÓÃÏÖ´ú´æ´¢ API¡£Cookie ËæÃ¿¸öÇëÇóÒ»Æð·¢ËÍ£¬Òò´ËËüÃÇ¿ÉÄܻήµÍÐÔÄÜ£¨ÓÈÆäÊǶÔÓÚÒÆ¶¯Êý¾ÝÁ¬½Ó¶øÑÔ£©¡£¿Í»§¶Ë´æ´¢µÄÏÖ´ú API ÊÇ Web ´æ´¢ API£¨localStorage ºÍ sessionStorage£©ºÍ IndexedDB¡£
´´½¨ Cookie
µ±½ÓÊÕµ½¿Í»§¶Ë·¢³öµÄ HTTP ÇëÇóʱ£¬·þÎñÆ÷¿ÉÒÔ·¢ËÍ´øÓÐÏìÓ¦µÄ Set-Cookie ±êÍ·£¬Cookie ͨ³£ÓÉä¯ÀÀÆ÷´æ´¢£¬È»ºó½« Cookie Óë HTTP ±êͷһͬÏò·þÎñÆ÷·¢³öÇëÇ󡣿ÉÒÔÖ¸¶¨µ½ÆÚÈÕÆÚ»ò³ÖÐøÊ±¼ä£¬Ö®ºó½«²»ÔÙ·¢ËÍCookie¡£´ËÍ⣬¿ÉÒÔÉèÖöÔÌØ¶¨ÓòºÍ·¾¶µÄÏÞÖÆ£¬´Ó¶øÏÞÖÆ cookie µÄ·¢ËÍλÖá£
Set-Cookie ºÍ Cookie ±êÍ·
Set-Cookie HTTP ÏìÓ¦±êÍ·½« cookie ´Ó·þÎñÆ÷·¢Ë͵½Óû§´úÀí¡£ÏÂÃæÊÇÒ»¸ö·¢ËÍ Cookie µÄÀý×Ó
HTTP/2.0 200
OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry
[page content] |
´Ë±êÍ·¸æË߿ͻ§¶Ë´æ´¢ Cookie
ÏÖÔÚ£¬Ëæ×ŶԷþÎñÆ÷µÄÿ¸öÐÂÇëÇó£¬ä¯ÀÀÆ÷½«Ê¹Óà Cookie Í·½«ËùÓÐÒÔǰ´æ´¢µÄ cookie ·¢ËͻطþÎñÆ÷¡£
GET /sample_page.html
HTTP/2.0
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry |
Cookie Ö÷Òª·ÖΪÈýÀ࣬ËüÃÇÊÇ »á»°Cookie¡¢ÓÀ¾ÃCookie ºÍ CookieµÄ Secure ºÍ HttpOnly ±ê¼Ç£¬ÏÂÃæÒÀ´ÎÀ´½éÉÜÒ»ÏÂ
ȇȡ Cookies
ÉÏÃæµÄʾÀý´´½¨µÄÊǻỰ Cookie £¬»á»° Cookie ÓиöÌØÕ÷£¬¿Í»§¶Ë¹Ø±Õʱ Cookie »áɾ³ý£¬ÒòΪËüûÓÐÖ¸¶¨Expires »ò Max-Age Ö¸Áî¡£ ÕâÁ½¸öÖ¸ÁîÄã¿´µ½ÕâÀïÓ¦¸Ã±È½ÏÊìϤÁË¡£
µ«ÊÇ£¬Web ä¯ÀÀÆ÷¿ÉÄÜ»áʹÓûỰ»¹Ô£¬Õâ»áʹ´ó¶àÊý»á»° Cookie ±£³ÖÓÀ¾Ã״̬£¬¾ÍÏñ´Óδ¹Ø±Õ¹ýä¯ÀÀÆ÷Ò»Ñù
ÓÀ¾ÃÐÔ Cookies
ÓÀ¾ÃÐÔ Cookie ²»»áÔÚ¿Í»§¶Ë¹Ø±Õʱ¹ýÆÚ£¬¶øÊÇÔÚÌØ¶¨ÈÕÆÚ£¨Expires£©»òÌØ¶¨Ê±¼ä³¤¶È£¨Max-Age£©Íâ¹ýÆÚ¡£ÀýÈç
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
CookieµÄ Secure ºÍ HttpOnly ±ê¼Ç
°²È«µÄ Cookie ÐèÒª¾¹ý HTTPS ÐÒéͨ¹ý¼ÓÃܵķ½Ê½·¢Ë͵½·þÎñÆ÷¡£¼´Ê¹Êǰ²È«µÄ£¬Ò²²»Ó¦¸Ã½«Ãô¸ÐÐÅÏ¢´æ´¢ÔÚcookie ÖУ¬ÒòΪËüÃDZ¾ÖÊÉÏÊDz»°²È«µÄ£¬²¢ÇҴ˱êÖ¾²»ÄÜÌá¹©ÕæÕýµÄ±£»¤¡£
HttpOnly µÄ×÷ÓÃ
»á»° cookie ÖÐȱÉÙ HttpOnly ÊôÐԻᵼÖ¹¥»÷Õß¿ÉÒÔͨ¹ý³ÌÐò(JS½Å±¾¡¢AppletµÈ)»ñÈ¡µ½Óû§µÄ cookie ÐÅÏ¢£¬Ôì³ÉÓû§cookie ÐÅϢй¶£¬Ôö¼Ó¹¥»÷ÕߵĿçÕ¾½Å±¾¹¥»÷Íþв¡£
HttpOnly ÊÇ΢Èí¶Ô cookie ×öµÄÀ©Õ¹£¬¸ÃÖµÖ¸¶¨ cookie ÊÇ·ñ¿Éͨ¹ý¿Í»§¶Ë½Å±¾·ÃÎÊ¡£
Èç¹ûÔÚ Cookie ÖÐûÓÐÉèÖà HttpOnly ÊôÐÔΪ true£¬¿ÉÄܵ¼Ö Cookie ±»ÇÔÈ¡¡£ÇÔÈ¡µÄ Cookie ¿ÉÒÔ°üº¬±êʶվµãÓû§µÄÃô¸ÐÐÅÏ¢£¬Èç ASP.NET »á»° ID »ò Forms Éí·ÝÑé֤Ʊ֤£¬¹¥»÷Õß¿ÉÒÔÖØ²¥ÇÔÈ¡µÄ Cookie£¬ÒÔ±ãαװ³ÉÓû§»ò»ñÈ¡Ãô¸ÐÐÅÏ¢£¬½øÐпçÕ¾½Å±¾¹¥»÷µÈ¡£
Cookie µÄ×÷ÓÃÓò
Domain ºÍ Path ±êʶ¶¨ÒåÁË Cookie µÄ×÷ÓÃÓò£º¼´ Cookie Ó¦¸Ã·¢Ë͸øÄÄЩ URL¡£
Domain ±êʶָ¶¨ÁËÄÄЩÖ÷»ú¿ÉÒÔ½ÓÊÜ Cookie¡£Èç¹û²»Ö¸¶¨£¬Ä¬ÈÏΪµ±Ç°Ö÷»ú(²»°üº¬×ÓÓòÃû£©¡£Èç¹ûÖ¸¶¨ÁËDomain£¬ÔòÒ»°ã°üº¬×ÓÓòÃû¡£
ÀýÈ磬Èç¹ûÉèÖà Domain=mozilla.org£¬Ôò Cookie Ò²°üº¬ÔÚ×ÓÓòÃûÖУ¨Èçdeveloper.mozilla.org£©¡£
ÀýÈ磬ÉèÖà Path=/docs£¬ÔòÒÔϵØÖ·¶¼»áÆ¥Å䣺
/docs
/docs/Web/
/docs/Web/HTTP
|