Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Ò»ÎÄ´øÄãÁ˽â HTTP ºÚ¿Æ¼¼
 
×÷Õߣº cxuann
  5448  次浏览      33
 2020-3-26
 
±à¼­ÍƼö:
ÎÄÕ½²Êö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 ͨÓñêÍ·£¬ÆäÒ»°ãµÄ±íʾ·½·¨ÈçÏÂ

Cache-Control: no-cache

Ò²¿ÉÒÔʹÓà max-age = 0 À´ÊµÏÖ²»»º´æµÄЧ¹û¡£

Cache-Control: max-age=0

˽Óлº´æ

˽Óлº´æÖ»ÓÃÀ´»º´æµ¥¸öÓû§£¬Äã¿ÉÄÜÔÚä¯ÀÀÆ÷ÉèÖÃÖп´µ½ÁË »º´æ£¬ä¯ÀÀÆ÷»º´æ°üº¬·þÎñÆ÷ͨ¹ý HTTP ÏÂÔØÏÂÀ´µÄËùÓÐÎĵµ¡£Õâ¸ö¸ßËÙ»º´æÓÃÓÚʹ·ÃÎʵÄÎĵµ¿ÉÒÔ½øÐÐǰ½ø/ºóÍË£¬±£´æ²Ù×÷¶øÎÞÐèÖØÐ·¢ËÍÇëÇóµ½Ô´·þÎñÆ÷¡£

¿ÉÒÔʹÓà private À´ÊµÏÖ˽Óлº´æ£¬ÕâÓë public µÄÓ÷¨Ïà·´£¬»º´æ·þÎñÆ÷Ö»¶ÔÌØ¶¨µÄ¿Í»§¶Ë½øÐлº´æ£¬ÆäËû¿Í»§¶Ë·¢Ë͹ýÀ´µÄÇëÇ󣬻º´æ·þÎñÆ÷Ôò²»»á·µ»Ø»º´æ¡£ËüµÄÒ»°ã±íʾ·½·¨ÈçÏÂ

Cache-Control: private

¹²Ïí»º´æ

¹²Ïí»º´æÊÇÒ»ÖÖÓÃÓÚ´æ´¢ÒªÓɶà¸öÓû§ÖØÓõÄÏìÓ¦»º´æ¡£¹²Ïí»º´æÒ»°ãʹÓà public À´±íʾ£¬public ÊôÐÔÖ»³öÏÖÔÚ¿Í»§¶ËÏìÓ¦ÖУ¬±íʾÏìÓ¦¿ÉÒÔ±»Èκλº´æËù»º´æ¡£Ò»°ã±íʾ·½·¨ÈçÏÂ

Cache-Control: public

»º´æ¿ØÖÆ

HTTP/1.1 ÖÐµÄ Cache-Control ³£¹æ±êÍ·×Ö¶ÎÓÃÓÚÖ´Ðлº´æ¿ØÖÆ£¬Ê¹Óô˱êÍ·¿Éͨ¹ýÆäÌṩµÄ¸÷ÖÖÖ¸ÁîÀ´¶¨Ò建´æ²ßÂÔ¡£ÏÂÃæÎÒÃÇÒÀ´Î½éÉÜÒ»ÏÂÕâЩÊôÐÔ

²»»º´æ

no-store ²ÅÊÇÕæÕýÒâÒåÉϵIJ»»º´æ£¬Ã¿´Î·þÎñÆ÷½ÓÊܵ½¿Í»§¶ËµÄÇëÇóºó£¬¶¼»á·µ»Ø×îеÄ×ÊÔ´¸ø¿Í»§¶Ë¡£

Cache-Control: no-store

»º´æµ«ÐèÒªÑéÖ¤

ͬÉÏÃæµÄ ²»»º´æ¹ýÆÚ×ÊÔ´

˽Óк͹²Ïí»º´æ

ͬÉÏ

»º´æ¹ýÆÚ

»º´æÖÐÒ»¸öºÜÖØÒªµÄÖ¸Áî¾ÍÊÇ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: W/"0815"

ÏÂÃæ¾ÍÀ´¾ßÌå̽ÌÖÒ»ÏÂÌõ¼þÇëÇóµÄ±êÍ·ºÍ 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-

»¹ÓÐÒ»ÖÖ±íʾÊÇ

Range: bytes=0-499, -500

ËüÃÇ·Ö±ð±íʾÇëÇóǰ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

   
5448 ´Îä¯ÀÀ       33
????

HTTP????
nginx??????
SD-WAN???
5G?????
 
????

??????????
IPv6???????
??????????
???????
????

????????
????????
???????????????
??????????