1.SSL/TLSåè®®åç解读
2.网站安全漏洞有哪些
3.Spring Security实现HTTP基本认证详解
4.软件å å¯ä¸è§£å¯çç®å½
5.å¦ä½è®¾è®¡å¥½çRESTful API
SSL/TLSåè®®åç解读
HTTPSæ¯ä»ä¹ç¸ä¿¡å¤§å®¶é½ç¥éï¼å¦æä½ ä¸ç¥éãããè¯·å ³éæ¤æï¼ï¼ï¼HTTPçæ°æ®æ¯ææä¼ è¾çï¼æ²¡æå®å ¨æ§å¯è¨ãHTTPSæ¯ç§æä¼ è¾ï¼é£ä¹HTTPSæ¯æä¹å®ç°æ°æ®çå®å ¨(å å¯)ä¼ è¾çï¼é£æ¯å 为HTTPSæ¯HTTPå¤äºä¸ª'S'ã å³HTTPä¸å å ¥SSLå±ï¼HTTPSçå®å ¨åºç¡æ¯SSLï¼å æ¤å å¯ç详ç»å 容就éè¦SSLã
SSL/TLSåè®®æ¯ç½ç»å®å ¨éä¿¡çéè¦åºç³ï¼æ¬æå°ç®åä»ç»SSL/TLSåè®®ï¼ä¸»è¦å ³æ³¨SSL/TLSåè®®çå®å ¨æ§ï¼ç¹å«æ¯SSLè§èçæ£ç¡®å®ç°ã æ¬ç³»åçæç« å¤§ä½å为å 个é¨åï¼
1ãSSL/TLSç®ä»
2ãSSL/TLSåè®®çåºæ¬æµç¨
3ãä»SSLå°TLS
4ãSSL/TLSçæµè¡å®ç°åº
SSLå ¨ç§°æ¯Secure Sockets Layerï¼å®å ¨å¥æ¥åå±ï¼å®æ¯ç±ç½æ¯å ¬å¸(Netscape)设计ç主è¦ç¨äºWebçå®å ¨ä¼ è¾åè®®ï¼ç®çæ¯ä¸ºç½ç»éä¿¡æä¾æºå¯æ§ã认è¯æ§åæ°æ®å®æ´æ§ä¿éãå¦ä»ï¼SSLå·²ç»æ为äºèç½ä¿å¯éä¿¡çå·¥ä¸æ åã
SSLæåçå 个çæ¬(SSL 1.0ãSSL2.0ãSSL 3.0)ç±ç½æ¯å ¬å¸è®¾è®¡åç»´æ¤ï¼ä»3.1çæ¬å¼å§ï¼SSLåè®®ç±å ç¹ç½å·¥ç¨ä»»å¡å°ç»(IETF)æ£å¼æ¥ç®¡ï¼å¹¶æ´å为TLS(Transport Layer Security)ï¼åå±è³ä»å·²æTLS 1.0ãTLS1.1ãTLS1.2è¿å 个çæ¬ã
å¦TLSååæ说ï¼SSL/TLSåè®®ä» ä¿éä¼ è¾å±å®å ¨ãåæ¶ï¼ç±äºåè®®èªèº«ç¹æ§(æ°åè¯ä¹¦æºå¶)ï¼SSL/TLSä¸è½è¢«ç¨äºä¿æ¤å¤è·³(multi-hop)端å°ç«¯éä¿¡ï¼èåªè½ä¿æ¤ç¹å°ç¹éä¿¡ã
SSL/TLSåè®®è½å¤æä¾çå®å ¨ç®æ 主è¦å æ¬å¦ä¸å 个ï¼
认è¯æ§ââåå©æ°åè¯ä¹¦è®¤è¯æå¡å¨ç«¯å客æ·ç«¯èº«ä»½ï¼é²æ¢èº«ä»½ä¼ªé
æºå¯æ§ââåå©å å¯é²æ¢ç¬¬ä¸æ¹çªå¬
å®æ´æ§ââåå©æ¶æ¯è®¤è¯ç (MAC)ä¿éæ°æ®å®æ´æ§ï¼é²æ¢æ¶æ¯ç¯¡æ¹
éæ¾ä¿æ¤ââéè¿ä½¿ç¨éå¼åºåå·é²æ¢éæ¾æ»å»
为äºå®ç°è¿äºå®å ¨ç®æ ï¼SSL/TLSå议被设计为ä¸ä¸ªä¸¤é¶æ®µåè®®ï¼å为æ¡æé¶æ®µååºç¨é¶æ®µï¼
æ¡æé¶æ®µä¹ç§°ååé¶æ®µï¼å¨è¿ä¸é¶æ®µï¼å®¢æ·ç«¯åæå¡å¨ç«¯ä¼è®¤è¯å¯¹æ¹èº«ä»½(ä¾èµäºPKIä½ç³»ï¼å©ç¨æ°åè¯ä¹¦è¿è¡èº«ä»½è®¤è¯)ï¼å¹¶ååéä¿¡ä¸ä½¿ç¨çå®å ¨åæ°ãå¯ç å¥ä»¶ä»¥åMasterSecretãåç»é信使ç¨çææå¯é¥é½æ¯éè¿MasterSecretçæã
å¨æ¡æé¶æ®µå®æåï¼è¿å ¥åºç¨é¶æ®µãå¨åºç¨é¶æ®µéä¿¡åæ¹ä½¿ç¨æ¡æé¶æ®µåå好çå¯é¥è¿è¡å®å ¨éä¿¡ã
Handshakeåè®®ï¼å æ¬ååå®å ¨åæ°åå¯ç å¥ä»¶ãæå¡å¨èº«ä»½è®¤è¯(客æ·ç«¯èº«ä»½è®¤è¯å¯é)ãå¯é¥äº¤æ¢;
ChangeCipherSpec åè®®ï¼ä¸æ¡æ¶æ¯è¡¨ææ¡æå议已ç»å®æ;
Alert åè®®ï¼å¯¹æ¡æåè®®ä¸ä¸äºå¼å¸¸çé误æéï¼å为fatalåwarning两个级å«ï¼fatalç±»åçé误ä¼ç´æ¥ä¸æSSLé¾æ¥ï¼èwarning级å«çé误SSLé¾æ¥ä»å¯ç»§ç»ï¼åªæ¯ä¼ç»åºé误è¦å;
Record åè®®ï¼å æ¬å¯¹æ¶æ¯çå段ãå缩ãæ¶æ¯è®¤è¯åå®æ´æ§ä¿æ¤ãå å¯çã
å¾2ãå¾3é½æ¯è¡¨ç¤ºçåè®®æµç¨ï¼å¤§åå°å¼ãå¯ä»¥å¯¹æ¯ççå æ·±ç解ã
æ¯ä¸ä¸ªSSL/TLSé¾æ¥é½æ¯ä»æ¡æå¼å§çï¼æ¡æè¿ç¨å å«ä¸ä¸ªæ¶æ¯åºåï¼ç¨ä»¥ååå®å ¨åæ°ãå¯ç å¥ä»¶ï¼è¿è¡èº«ä»½è®¤è¯ä»¥åå¯é¥äº¤æ¢ãæ¡æè¿ç¨ä¸çæ¶æ¯å¿ é¡»ä¸¥æ ¼æç §é¢å å®ä¹ç顺åºåçï¼å¦åå°±ä¼å¸¦æ¥æ½å¨çå®å ¨å¨èãä»å¹´é¡¶çº§å®å ¨ä¼è®®CCS ææç« æåºäºå»ºç«ç»¼åç¶ææºæ¥æ£æ¥SSLé¾æ¥ä¸æ¶æ¯åºåâ¦â¦
2.1 æ¡æè¿ç¨ä¸çæ¶æ¯åºå
ClientHelloï¼ClientHelloé常æ¯æ¡æè¿ç¨ä¸ç第ä¸æ¡æ¶æ¯ï¼ç¨äºåç¥æå¡å¨å®¢æ·ç«¯ææ¯æçå¯ç å¥ä»¶ç§ç±»ãæé«SSL/TLSåè®®çæ¬ä»¥åå缩ç®æ³ã
ClientHelloä¸è¿å å«ä¸ä¸ªéæºæ°ï¼è¿ä¸ªéæºæ°ç±4个åèçå½åGMT UNIXæ¶é´ä»¥å个éæºéæ©çåèç»æï¼å ±åèã该éæºæ°ä¼å¨å¯é¥çæè¿ç¨ä¸è¢«ä½¿ç¨ã
å¦å¤ï¼ClientHelloä¸è¿å¯è½å å«å®¢æ·ç«¯æ¯æçTLSæ©å±ã(TLSæ©å±å¯ä»¥è¢«ç¨æ¥ä¸°å¯TLSåè®®çåè½æè å¢å¼ºåè®®çå®å ¨æ§)
ServerHelloï¼æå¡å¨æ¥åå°ClientHelloåï¼ä¼è¿åServerHelloãæå¡å¨ä»å®¢æ·ç«¯å¨ClientHelloä¸æä¾çå¯ç å¥ä»¶ãSSL/TLSçæ¬ãå缩ç®æ³å表ééæ©å®ææ¯æç项ï¼å¹¶æå®çéæ©å å«å¨ServerHelloä¸åç¥å®¢æ·ç«¯ãæ¥ä¸æ¥SSLåè®®ç建ç«å°±åºäºæå¡å¨éæ©çå¯ç å¥ä»¶ç±»åãSSL/TLSåè®®çæ¬ä»¥åå缩ç®æ³ã
ServerHelloä¸åæ ·ä¼å å«ä¸ä¸ªéæºæ°ï¼åæ ·4+ åèç±»åï¼ç±æå¡å¨çæã
Certificateï¼å®¢æ·ç«¯åæå¡å¨é½å¯ä»¥åéè¯ä¹¦æ¶æ¯æ¥è¯æèªå·±ç身份ï¼ä½æ¯é常客æ·ç«¯è¯ä¹¦ä¸è¢«ä½¿ç¨ã æå¡å¨ä¸è¬å¨ServerHelloåä¼æ¥ä¸æ¡Certificateæ¶æ¯ï¼Certificateæ¶æ¯ä¸ä¼å å«ä¸æ¡è¯ä¹¦é¾ï¼ä»æå¡å¨è¯ä¹¦å¼å§ï¼å°Certificate authority(CA)æè ææ°çèªç¾åè¯ä¹¦ç»æãä¸å¾å½¢è±¡å°æè¿°äºè¯ä¹¦é¾ï¼
SSLä¸ä½¿ç¨çè¯ä¹¦é常æ¯X.ç±»åè¯ä¹¦ï¼X.è¯ä¹¦çå 容å¦ä¸è¡¨æ示ï¼
å¨ç¨çX.è¯ä¹¦å å«Version 1åVersion 3两ç§çæ¬ï¼å ¶ä¸v1çæ¬çè¯ä¹¦åå¨å®å ¨éæ£ï¼åæ¶ä¸æ¯æTLSæ©å±ï¼è¢«éæ¸å¼ç¨ãç°å¨å¤§å¤æ°å¨ç¨çSSLè¯ä¹¦é½æ¯V3çæ¬ã
åæ¶è¯ä¹¦ä¼é带ä¸åå好çå¯é¥äº¤æ¢ç®æ³å¯¹åºçå¯é¥ãå¯é¥äº¤æ¢ç®æ³ä»¥åå®ä»¬æè¦æ±çå¯é¥ç±»åå¦ä¸è¡¨æ示ã
ServerKeyExchangeï¼è¯¥æ¶æ¯ä» å½ä»¥ä¸å¯é¥äº¤æ¢ç®æ³è¢«ä½¿ç¨æ¶ç±æå¡å¨ååºï¼
RSA_EXPORT(ä» å½æå¡å¨çå ¬é¥å¤§äºbitæ¶)ãDHE_DSSãDHE_DSS_EXPORTãDHE_RSAãDHE_RSA_EXPORTãDH_anon 使ç¨å ¶å®å¯é¥äº¤æ¢ç®æ³æ¶ï¼æå¡å¨ä¸è½åéæ¤æ¶æ¯ã
ServerkeyExchangeæ¶æ¯ä¼æºå¸¦è¿äºå¯é¥äº¤æ¢ç®æ³æéè¦çé¢å¤åæ°ï¼ä»¥å¨åç»æ¥éª¤ä¸ååPreMasterSecretãè¿äºåæ°éè¦è¢«ç¾è¿åã
CertificateRequestï¼è¿ä¸ªæ¶æ¯é常å¨è¦æ±è®¤è¯å®¢æ·ç«¯èº«ä»½æ¶æä¼æãæ¶æ¯ä¸å å«äºè¯ä¹¦ç±»å以åå¯æ¥åçCAå表ã
ServerHelloDoneï¼æå¡å¨åéè¿æ¡æ¶æ¯è¡¨ææå¡å¨é¨åçå¯é¥äº¤æ¢ä¿¡æ¯å·²ç»åéå®äºï¼çå¾ å®¢æ·ç«¯çæ¶æ¯ä»¥ç»§ç»æ¥ä¸æ¥çæ¥éª¤ãè¿æ¡æ¶æ¯åªç¨ä½æéï¼ä¸å å«æ°æ®åã
ClientKeyExchangeï¼è¿æ¡æ¶æ¯å å«çæ°æ®ä¸æéç¨çå¯é¥äº¤æ¢ç®æ³æå ³ã
å¦æéæ©çå¯é¥äº¤æ¢ç®æ³æ¯RSAï¼é£ä¹æ¶æ¯å å«çåæ°ä¸ºç¨æå¡å¨RSAå ¬é¥(å å«å¨ä¹åè¯ä¹¦ä¸çæè æ¯ServerKeyExchangeä¸ç)å å¯è¿çPreMasterSecretï¼å®æ个åèï¼å2个åè表示客æ·ç«¯æ¯æçæé«åè®®çæ¬ï¼å个åèæ¯éæºéæ©çã
å¦æéæ©çå¯é¥äº¤æ¢ç®æ³æ¯DHæè DHEï¼åå¯è½æ两ç§æ åµï¼
éå¼DHå ¬å¼å¼ï¼å å«å¨Certificateæ¶æ¯é;
æ¾ç¤ºDHå ¬å¼å¼ï¼å ¬å¼å¼æ¯æ¬æ¶æ¯çä¸é¨åã
CertificateVerifyï¼è¿æ¡æ¶æ¯ç¨æ¥è¯æ客æ·ç«¯æ¥æä¹åæ交ç客æ·ç«¯è¯ä¹¦çç§é¥ã
Finishedï¼è¡¨ææ¡æé¶æ®µç»æãè¿æ¯ç¬¬ä¸æ¡ç¨ååçç®æ³åå¯é¥ä¿æ¤çæ¶æ¯ã
å 为æ¯ç¨åå好çå¯é¥å å¯çæ¶æ¯ï¼å®å¯ä»¥ç¨æ¥ç¡®è®¤å·²ç»åå好çå¯é¥ã
åæ¶Finishedæ¶æ¯å å«ä¸ä¸ªverify_dataåï¼å¯ä»¥ç¨æ¥æ ¡éªä¹ååéåæ¥æ¶çä¿¡æ¯ã
Verify_dataåæ¯ä¸ä¸ªPRFå½æ°çè¾åº(pseudo-random function)ãè¿ä¸ªä¼ªéæºå½æ°çè¾å ¥ä¸ºï¼(1)两个hashå¼ï¼ä¸ä¸ªSHA-1ï¼ä¸ä¸ªMD5ï¼å¯¹ä¹åæ¡æè¿ç¨ä¸äº¤æ¢çæææ¶æ¯ååå¸;(2)the MasterSecretï¼ç±é¢å¤ä¸»å¯é¥çæ;(3)finished_labelï¼å¦æ客æ·ç«¯åéçåæ¯âclient finishedâï¼æå¡å¨åéçåæ¯âserver finishedâãå ³äºè¿ä¸ªPRFçç»èå¨3.3èä¸ä¼å ·ä½æè¿°ã æ¤å¤ï¼Finished æ¶æ¯ä¸è½å¤å¨ChangeCipherSpecååéã
2.2 ä¸åå¯é¥äº¤æ¢ç®æ³å¯¹åºçæ¡æè¿ç¨
ä¸åçå¯é¥äº¤æ¢ç®æ³å¯¹åºçæ¡æè¿ç¨ä¸çæ¶æ¯åºåæ¯ä¸åçï¼ç¸åºçå®ç°æ¹å¼ä¹ä¸åï¼æ¬èä»ç»å 个常è§å¯é¥äº¤æ¢ç®æ³å¯¹åºçæ¡æè¿ç¨ã
TLS-RSAï¼å¨è¿ä¸ªåºæ¯ä¸ï¼PreMasterSecretæ¯ç±å®¢æ·ç«¯æå®çï¼å¹¶ç¨RSAå ¬é¥å å¯åéç»æå¡å¨ãæå¡å¨ä¸å½±åPReMasterSecretççæã
TLS-DHï¼åºäºDHçå¯é¥äº¤æ¢ä¹è¢«ç§°ä¸ºéæDiffie-Hellmanãå¨è¿ç§åºæ¯ä¸ï¼å¯è½æ¯åæ¹åèªæ交ä¸ä¸ªè¯ä¹¦å å«DHå ¬å¼å¼ï¼æè æå¡å¨ç«¯æ交è¯ä¹¦å å«DHå ¬å¼å¼ï¼å®¢æ·ç«¯å¨æ¯æ¬¡ä¼è¯ä¸éæ©ä¸ä¸ªå¼ãåå好çDHå¼è¢«ç¨ä½PreMasterSecretãæ¾ç¶è¯ä¹¦ä¸çåæ°æ¯åºå®çï¼é£ä¹æ¯æ¬¡é¾æ¥çPreMasterSecretä¹æ¯ç¸åçã
TLS-DHä¸è½æä¾ååå®å ¨æ§ã
TLS-DHEï¼åºäºDHEçTLSæ¡æä¸ä¼æServerKeyExchangeæ¶æ¯ãæ¡æè¿ç¨ä¸äº¤æ¢åæ°ç认è¯éè¿æ°åç¾åæ¥å®ç°ï¼æ¯æçç¾åç®æ³å æ¬RSAåDSSãDHåæ°ä¼æå®çæ°åç¾åä¸èµ·è¢«å å«å¨ServerKeyExchangeä¸è¢«åéåºå»ã客æ·ç«¯å¨ClientKeyExchangeä¸è¿åå®çå ¬å¼DHåæ°ï¼ä½æ²¡æç¾åä¿æ¤ãåæ ·åååºæ¥çDHå¯é¥è¢«ç¨ä½PreMasterSecretã
2.3 å¯é¥çæ
Pseudo-random Function(PRF)ï¼ä¼ªéæºå½æ°æ¯SSLåè®®ä¸çä¸ä¸ªéè¦ç»æé¨åï¼å®è¢«ç¨æ¥ç§å¯æ©å±ä»¥åçæå¯é¥ãå¨3.1è讲解Finishedæ¶æ¯æ¶å·²ç»ç®åæåPRFï¼å¨è¿éæ们详ç»è®¨è®ºPRFçå·¥ä½åçãSSL/TLSåè®®ä¸çPRFå¦ä¸å¾æ示ï¼
è¿ä¸ªPRFåºäºä¸¤ä¸ªhashå½æ°ï¼MD5åSHA-1ï¼å®æ3个è¾å ¥ï¼ä¸ä¸ªSecret(æ¯å¦PreMasterSecret)ï¼ä¸ä¸ªæ å¿ç¬¦(æ¯å¦âclient finishedâ,防重放攻a防放攻 âserver finishedâ)ï¼è¿æä¸ä¸ªç§åå¼(æ¯å¦å®¢æ·ç«¯éæºæ°+æå¡å¨ç«¯éæºæ°)ã
Secretå¨ä½¿ç¨æ¶è¢«å为é¿åº¦ç¸åç两åï¼S1åS2ï¼åå«ä½ä¸ºP_MD5åP_SHA-1çè¾å ¥ã
PRFçè¾åºæå¦ä¸æ¹å¼å¤çå¾å°ï¼
P_MD5åP_SHA-1é½æ¯æ©å±å½æ°ï¼ç¨æ¥æ©å±ç§å¯å¼ä»¥ç¨äºå¯é¥çæï¼å®ä»¬ç计ç®æ¹å¼å¦ä¸ï¼
å ¶ä¸A(0) = seed, A(i) = HMAC hash( secret, A( i −1) )
è¿ä¸ªç§å¯æ©å±ä¼ä¸ç´è¿è¡ç´å°å¾å°è¶³å¤å¤çæ©å±æ°æ®ã Key Derivationï¼ä¸»å¯é¥(MasterSecret)æ¯å©ç¨ä¸è¿°PRFä»é¢å¤ä¸»å¯é¥(PreMasterSecret)çæçãæ¯ä¸ªMasterSecret为åèï¼çææ¹å¼å¦ä¸ï¼
å¾å°MasterSecretåï¼å®ä¼è¢«è¿ä¸æ¥å¤çæåçæ4个ä¸åçå¯é¥å2个åå§åé(IV)ãå¤çè¿ç¨å¦ä¸ï¼
å¤çè¿ç¨ä¸ç´æç»å°è¶³å¤å¤çè¾åºè¢«çæï¼ç¶åæè¾åºå为4个keyå2个IVï¼
ä¸å¾å®æ´éè¿°äºSSL/TLSåè®®ä¸çå¯é¥çæè¿ç¨ã
æ¬èä»ç»SSL/TLSåè®®ççæ¬åè¿ï¼ä¸åçæ¬çåºå«ä»¥åå®å ¨ç¹æ§çã
SSL 1.0ç±äºä»æ¥æ²¡æè¢«å ¬å¼è¿ï¼å¹¶ä¸åå¨ä¸¥éå®å ¨æ¼æ´ï¼æ们就ä¸è®¨è®ºäºã
SSL 2.0ï¼SSL 2.0äºå¹´4æ被åå¸ãSSL 2.0ä¸ä¸»è¦åå¨çé®é¢å¦ä¸ï¼
MACä¸è½è¦çå¡«å é¿åº¦åï¼æ»å»è å¯è½å©ç¨è¿ç¹ç ´åæ¶æ¯å®æ´æ§;
缺ä¹æ¡æ认è¯ï¼æ»å»è å¯ä»¥ç¯¡æ¹å¯ç å¥ä»¶å表ï¼è¯±éªéä¿¡åæ¹ä½¿ç¨è¾å¼±çå¯ç å¥ä»¶;
使ç¨è¾å¼±çææé®é¢çå¯ç ç®æ³(å¦MD5ï¼RC4ç)ï¼æè 使ç¨ä¸å®å ¨çåç»æ¨¡å¼(å¦CBC模å¼);
对äºä¸åçå¯ç å¦åºå 使ç¨ç¸åçå¯é¥ï¼è¿èåºæ¬å®å ¨å¸¸è¯ã
ç±äºä»¥ä¸å®å ¨é®é¢ï¼RFC å·²ç»æç¡®æåºé¿å 使ç¨SSL 2.0ï¼ä½æ¯ç°å®çæ´»ä¸è¿æå°é客æ·ç«¯åæå¡å¨æ¯æSSL 2.0.
SSL 3.0ï¼SSL 3.0å¼å ¥äºä¸äºæ°çç¹æ§åæºå¶è§£å³äºå¾å¤ä¹åçæ¬åå¨çæ¼æ´ãæ¤å¤ï¼SSL 3.0ä¸å¼å ¥äºChangeCipherSpecååè®®ãSSL 3.0ååå ¼å®¹SSL 2.0ï¼ç¸å¯¹äºSSL 2.0ï¼å®ç主è¦æ¹åå æ¬ä»¥ä¸å ç¹ï¼
æ¯ææ´å¤çå¯ç å¥ä»¶(æ¯ææ´å¤çå¯ç ç®æ³å¦DSSï¼SHA-1)
å¨æ¡æé¶æ®µæ¯æå¯é¥åå(DHåFORTEZZA)
æ¯æå¯ç å¦åæ°çéåå
å¢å äºæ¶æ¯å缩é项
MACè½å¤è¦çå¡«å é¿åº¦åäºï¼åæ¶MACå¯ä»¥ä½¿ç¨MD5æè SHA-1
ä¸åçå¯ç å¦åºå 使ç¨ä¸åçkey
Alertååè®®è½å¯¹ä»»ä½é误ç»åºä¸¤ç§æ示ï¼WarningåFatal
ä¸æ¢é¾æ¥çæ¶åä¼ç¨ä¸ä¸ªclose_notifyè¦åéç¥éä¿¡åæ¹
æ¯æè¯ä¹¦é¾ï¼èéå个è¯ä¹¦
éè¿Finishedæ¶æ¯è®¤è¯ææåéåæ¥æ¶çæ¶æ¯
å å¯äºçPreMasterSecretå å«å½å使ç¨çåè®®çæ¬ï¼é²æ¢åè®®åæ»
TLS 1.0ï¼TLS 1.0åSSL 3.0å·®å«é常å°ãå®é ä¸ï¼TLS 1.0æ¯SSL 3.1ï¼å¨IETFæ¥æåæ¹å为TLSãTLS 1.0çæ¬æ¯ç®å使ç¨æ广æ³çSSL/TLSåè®®çæ¬ã
TLS 1.0ä¸åæ¯æ使ç¨FORTEZZAçå¯ç å¥ä»¶ã
TLS 1.0ä¸MAC被æ¿æ¢æHMACã
ä¹åæå°ChangeCipherSpecæ¶æ¯å¿ é¡»å¨Finishedæ¶æ¯ååéï¼å¨TLS 1.0ä¸ï¼å¦ææ¶æ¯åºåä¸ç¬¦åè¿ä¸ªè¦æ±ï¼ä¼äº§çFATALè¦å并ç»æ¢é¾æ¥ã
TLS 1.1ï¼è¿ä¸ªçæ¬ç¸æ¯ä¹åæ¹å¨ä¹å¾å°ãæéè¦çæ¹å¨æ¯é¢é²äºé对CBCåç»æ¨¡å¼çä¸äºæ»å»ãç°å¨çå¡«å é误åçåéæ³MACé误ä¸å¯åºåäºï¼é²æ¢æ»å»è å©ç¨å¯åºåé误ååºå»ºç«è§£å¯é¢è¨æºå¯¹å¯æè¿è¡æ»å»ã
å¨æ¯æ¬¡å å¯è¿ç¨ä¸ï¼ä½¿ç¨CBCåç»æ¨¡å¼æ¶ï¼é½éè¦æ¾ç¤ºç»åºIVï¼èä¸ç¨åå¯é¥çææ¶ä½¿ç¨PRFçæIVã
æ¤å¤ï¼TLS 1.1ç¦æ¢ä¸ºéåºä¹ååºå£éå¶è使ç¨å¼±åçå¯ç å¥ä»¶ã
TLS 1.2ï¼è¿æ¯ææ°ççæ¬ï¼é¨ç½²çè¿æ¯è¾å°ãè¿ä¸ªçæ¬ç¦ç¨äºPRFä¸çMD5åSHA-1ï¼èç¨ä¸ä¸ªå¯é ç½®çhashå½æ°å代äºå®ä»¬ï¼è¿æ ·çä¿®æ¹ç®åäºè®¡ç®è¿ç¨ãä¿®æ¹åçPRFé£æ ¼å¦ä¸ï¼
æ¤å¤ï¼TLS 1.2çä¸ä¸ªéè¦ååæ¯æ¯æ认è¯å å¯æ¨¡å¼(æ¯æGCMç)ãä½æ¯ç±äºä¸äºAEAD(Authenticated Encryption with Associated Data)å¯ç ç®æ³è¦æ±IV为éå¼çï¼æ以IVåæ¢å¤å°ç±MasterSecretçæï¼å³TLS 1.0以åçé£æ ¼ã
TLS 1.2æ¯æ使ç¨GCMãCCMçæ°å¯ç å¥ä»¶ã
åæ¶SSL 2.0被宣å¸æ¾å¼ï¼ä¸åååå ¼å®¹SSL 2.0.
æ¬èç®åä»ç»ä¸ä¸æµè¡çSSL/TLSå®ç°åºï¼SSLåè®®é常å¤æï¼ç±å¼åè èªå·±å®ç°å¸¸å¸¸ä¼åºéï¼å¼åè å¨å ·ä½å®ç°SSLåè®®æ¶é常ä¼ä¾èµäºè¿äºå¯ç å¦åºã
4.1 常è§çSSL/TLS å®ç°
OpenSSLï¼è¿æ¯é常æµè¡çå¼æºSSL/TLSå®ç°ã
OpenSSLimå®å ¨ç¨Cè¯è¨å®ç°ï¼æ¯æSSL 2.0/3.0ï¼TLS 1.0/1.1/1.2以åDTLS 1.0ã
OpenSSL è¿å¹´æ¥åºç°äºå¾å¤çå®å ¨æ¼æ´ï¼æ¯å¦å¹´æåºçèåçHeartbleedæ¼æ´çã
JSSEï¼è¿æ¯ä½¿ç¨Javaå®ç°çï¼æ¯æSSL 3.0ï¼TLS 1.0/1.1/1.2.
Bouncy Castleï¼å®ä¸ä» ä» æ¯æSSL/TLSï¼å®æ¯ä¸ä¸ªå®æ´çå¯ç å¦åºï¼æ¯æåç§å¯ç å¦ç®æ³ååè®®ãä¸è¿å®ä» ä» æ¯æTLS 1.0çæ¬ã
Androidå¹³å°ä¸»è¦ä½¿ç¨è¿ä¸ªå¯ç å¦åºã
GnuTLSï¼è¿æ¯å¦ä¸ä¸ªç¨Cè¯è¨å®ç°çåºï¼æ¯æSSL 3.0ï¼TLS 1.0/1.1/1.2以åDTLS 1.0ã主è¦å¨Unixä¸ç被使ç¨ãåæ¶ä»¥åç§å®å ¨æ¼æ´å¤èé»åã
NSSï¼è¿æ¯æåç±ç½æ¯å ¬å¸(Netscape)å¼åçåºï¼æ¯æSSL 2.0/3.0ï¼TLS 1.0/1.1ï¼ç°å¨ä¸»è¦è¢«æµè§å¨å客æ·ç«¯è½¯ä»¶ä½¿ç¨ï¼æ¯å¦Firefox使ç¨çå°±æ¯NSSåºï¼Chrome使ç¨çæ¯ä¸ä¸ªNSSåºçä¿®æ£çã
ä¸è¡¨æ¯ä¸äºå¸¸è§è½¯ä»¶ä»¥åå®ä»¬æ使ç¨çSSL/TLSå®ç°åºçæ åµï¼
å ¶å®è¿æä¸äºå¸¸ç¨çSSLå®ç°åºï¼å¦cryptlibãCyaSSLãMatrixSSLãPolarSSLçï¼ç±äºå¸åºå æçä¸é«ï¼æ们è¿éå°±ä¸å¤åä»ç»äºã
4.2 æµè¡SSL/TLSå®ç°åºçå®å ¨ç 究
æè¿å å¹´æåºçé«é£é©SSLå®å ¨æ¼æ´å¤§å¤è·SSLå®ç°åºæå ³ï¼æ¯å¦å¹´4ææåºçâå¿èæ»´è¡âæ¼æ´ï¼åå¨äºOpenSSL 1.0.1-1.0.1fçæ¬ä¸ï¼å½±åå ¨çè¿%çWebæå¡å¨;åæ ·æ¯å¹´æåºçè¹æå ¬å¸iOS 7.0.6çæ¬ç³»ç»ä¸åå¨çâgotofailâæ¼æ´ï¼å 为ç¨åºåçç忽导è´SSLè¯ä¹¦æ ¡éªä¸çç¾åæ ¡éªå¤±æ;å æ¬ä»å¹´æåºçSSL Freakæ»å»ä¹æ¯ç±äºSSLå®ç°åºçå®å ¨æ¼æ´å¯¼è´çæ»å»ï¼æ们ç 究å°ç»çåå¦å¯¹è¿ä¸ªæ»å»æ详ç»çåæï¼åè§ãSSL Freakæ¥è¢ï¼å¦ä½å®æ½ä¸ä¸ªå ·ä½çSSL Freakæ»å»ããåæ¶æ们è¿å¼åäºä¸ä¸ªåºäºpythonçä¸é´äººä»£çæ»å»æ¡æ¶âé£å£°â对æå½å ç¥åçµåçæå¡å¨è¿è¡å ·ä½çæ»å»ï¼å¹¶ä¸æ¥äºæ¼æ´ã
èèå°å¤§éSSL/TLSå®ç°åºä¸åå¨å®å ¨é®é¢ï¼åæ¶è¿äºä¸»æµçSSL/TLSå®ç°åºå¯¹å¼åè èè¨ä½¿ç¨é¾åº¦è¾é«ï¼æ¯å¦æäºSSL/TLSå®ç°åºè¦æ±å¼åè èªå·±è¿è¡éæºæ°çææå¯é¥ç®¡çï¼è®©ç¼ºä¹ç³»ç»ä¿¡æ¯å®å ¨ç¥è¯å¹è®çå¼åè å»ä½¿ç¨è¿æ ·é«åº¦å¤æçå¯ç å¦åºå®¹æ产çå¾å¤å®å ¨é®é¢ãæ们å¨è¿éæ¨èä¸äºé«çº§å¯ç å¦åºï¼Google keycazerãNaClãCryptlibãGPGMEãè¿äºå¯ç å¦åºåå¨çå®å ¨é®é¢è¾å°ï¼åæ¶å°è£ äºä¸äºåºå±çå¯ç å¦æä½ï¼éä½äºå¼åè ç使ç¨é¾åº¦ã
以ä¸å°±æ¯æ¬æ¬¡è¦ä»ç»çSSL /TLSåè®®åºæ¬ç¥è¯ï¼åç»çæç« æ们ä¼å¯¹ä¸äºå ¸åSSL/TLSæ»å»è¿è¡å ·ä½ä»ç»ã
åèï¼
1ã blogs.com/NathanYang/p/.html
3ã blogs.com/bhlsheji/p/.html
网站安全漏洞有哪些
网站的安全漏洞是普遍存在的,但是击源击也需要适当补救才行,否则的止重话就会酿成恶果。那网站安全漏洞有哪些呢了解网络安全常识,防重放攻a防放攻首先就要了解计算机网络安全有哪些基本注意事项,击源击下面小编就带您认识一下吧。止重查询溯源码
1、防重放攻a防放攻越权
问题描述:不同权限账户之间存在越权访问。击源击
修改建议:加强用户权限的止重验证。
注意:
往往通过不同权限用户之间链接访问、防重放攻a防放攻cookie、击源击修改id等
2、止重明文传输
问题描述:对系统用户口令保护不足,防重放攻a防放攻攻击者可以利用攻击工具,击源击从网络上窃取合法的止重用户口令数据。
修改建议:传输的密码必须加密。
注意:所有密码要加密。要复杂加密。不要用base或md5。
3、sql注入
问题描述:攻击者利用sql注入漏洞,暴富psd源码可以获取数据库中的多种信息,如:管理后台的密码,从而脱取数据库中的内容(脱库)。
修改建议:对输入参数进行过滤、校验。采用黑白名单方式。
注意:过滤、校验要覆盖系统内所有的参数。
4、跨站脚本攻击
问题描述:对输入信息没有进行校验,攻击者可以通过巧妙的方法注入恶意指令代码到网页。这种代码通常是JavaScript,但实际上,也可以包括Java、VBScript、ActiveX、Flash或者普通的HTML。攻击成功之后,攻击者可以拿到更高的权限。
修改建议:对用户输入进行过滤、shmget函数 源码校验。输出进行HTML实体编码。
注意:过滤、校验、HTML实体编码。要覆盖所有参数。
5、文件上传漏洞
问题描述:没有对文件上传限制,可能会被上传可执行文件,或脚本文件。进一步导致服务器沦陷。
修改建议:严格验证上传文件,防止上传asp、aspx、asa、php、jsp等危险脚本。同事最好加入文件头验证,防止用户上传非法文件。
6、twitter snowflak源码后台地址泄露
问题描述:后台地址过于简单,为攻击者攻击后台提供了便利。
修改建议:修改后台地址链接,复杂点。
7、敏感信息泄露
问题描述:系统暴露内部信息,如:网站的绝对路径、网页源代码、SQL语句、中间件版本、程序异常等信息。
修改建议:对用户输入的异常字符过滤。屏蔽一些错误回显,如自定义、、等。
8、命令执行漏洞
问题描述:脚本程序调用如php的system、exec、shell_exec等。客客源码
修改建议:打补丁,对系统内需要执行的命令要严格限制。
9、目录遍历漏洞
问题描述:暴露目录信息,如开发语言、站点结构
修改建议:修改相关配置。
、会话重放攻击
问题描述:重复提交数据包。
修改建议:添加token验证。时间戳或这验证码。
、CSRF(跨站请求伪造)
问题描述:使用已经登陆用户,在不知情的情况下执行某种动作的攻击。
修改建议:添加token验证。时间戳或这验证码。
、任意文件包含、任意文件下载
问题描述:任意文件包含,系统对传入的文件名没有合理的校验,从而操作了预想之外的文件。任意文件下载,系统提供了下载功能,却未对下载文件名进行限制。
修改建议:对用户提交的文件名限制。防止恶意的文件读取、下载。
、设计缺陷/逻辑错误
问题描述:程序通过逻辑实现丰富的功能。很多情况,逻辑功能存在缺陷。比如,程序员的安全意识、考虑的不周全等。
修改建议:加强程序的设计和逻辑判断。
关于网络安全小知识,佰
佰安全网小编为您介绍和普及这么多了,看完上面的介绍,您对“网站安全漏洞有哪些”这个问题了解多少了呢综上我们可以看到,网络安全漏洞也是形形色色个不一样的,所以了解的漏洞的存在对于我们日后的安全生活很重要
Spring Security实现HTTP基本认证详解
前言
在上一章节中,我们搭建了第一个Spring Security项目,学习了如何利用Spring Security保护Java Web项目。然而,对于SpringSecurity的细节,还有很多需要深入了解。本文将从认证方式开始,与大家共同学习各种认证。
一. Spring Security的认证方式
认证概念:认证是判断系统中是否存在某用户,并判断其身份合法性,解决用户登录问题。其目的是保护系统隐私数据与资源,确保仅合法用户能访问资源。
认证方式:Spring Security中常见方式包括HTTP层面认证与表单认证,具体有HTTP基本认证、Form表单认证、HTTP摘要认证。
二. HTTP基本认证
基本认证概述:在三种方式中,基本认证是最简单的一种。Spring Security 4.x默认采用基本认证,通过弹窗要求用户输入用户名和密码。每次请求时,Authorization头使用Base编码“用户名:密码”。尽管安全性较低,但它是现代认证的基础,Spring Security OAuth的默认认证方式也是如此。
基本认证核心API:执行流程包括过滤器、构建令牌、AuthenticationManager处理、转给Provider处理等步骤。具体实现步骤如代码所示,执行流程简单。
基本认证步骤:分为四步,包括发起请求、服务器返回响应并说明认证形式、客户端弹出对话框输入用户名密码、服务器解码验证信息。
基本认证弊端:无状态认证,无法携带Session信息,不支持Remember-Me功能。用户名密码以明文形式传输,极易被窃听和重放攻击。
三. 代码实现
通过理论知识,让我们动手实现基本认证。创建SecurityConfig配置类,继承WebSecurityConfigurerAdapter,开启基本认证。链式编程风格符合设计模式。
代码结构:核心代码简短,项目包结构随个人创建,实现步骤包括创建配置类、启动项目。
四. Basic认证详解
实现基本认证后,本文将深入分析认证过程。Basic Authorization响应头包含WWW-Authenticate信息,分别表示认证类型、认证域。realm概念允许不同域请求时使用不同用户名/密码认证。
基本认证过程:响应码为,浏览器弹出对话框要求输入用户名/密码,信息进行Base编码后发送给后台认证。认证错误时,浏览器保持弹框;认证成功后,信息缓存在浏览器中,后续请求自动携带。
注销Basic认证:认证信息缓存在浏览器中,直到关闭浏览器才会销毁。前端可通过手动配置错误的Authorization或使用特定方法清除认证信息,但某些浏览器无效。
总结:通过几行代码实现基本认证,并了解了注销认证的方法。对于本文内容,欢迎分享你的见解或提问。我将提供Java学习资源,包括教程、源码等,助力你的学习进步。
软件å å¯ä¸è§£å¯çç®å½
ã软件å å¯ä¸è§£å¯ã第1ç« ä»ä¹æ¯éè½è½¯ä»¶ 1
1.1 æ¦è¿° 1
1.2 æ»å»åé²å¾¡ 5
1.3 ç¨åºåæçæ¹æ³ 6
1.4 代ç æ··æ·
1.4.1 代ç æ··æ·çåºç¨
1.4.2 æ··æ·ææ¯æ¦è¿°
1.4.3 被é»å®¢ä»¬ä½¿ç¨ç代ç æ··æ·ææ¯
1.5 é²ç¯¡æ¹ææ¯
1.5.1 é²ç¯¡æ¹ææ¯çåºç¨
1.5.2 é²ç¯¡æ¹ææ¯çä¾å
1.6 软件水å°
1.6.1 软件水å°çä¾å
1.6.2 æ»å»æ°´å°ç³»ç»
1.7 软件ç¸ä¼¼æ§æ¯å¯¹
1.7.1 代ç å½çª
1.7.2 软件ä½è é´å«
1.7.3 软件âèè®°â
1.7.4 软件âèè®°âçæ¡ä¾
.1.8 åºäºç¡¬ä»¶çä¿æ¤ææ¯
1.8.1 æ硬件å å¯éå软件ä¸èµ·åå®
1.8.2 æç¨åºåcpuç»å®å¨ä¸èµ·
1.8.3 ç¡®ä¿è½¯ä»¶å¨å®å ¨çç¯å¢ä¸æ§è¡
1.8.4 å å¯å¯æ§è¡æ件
1.8.5 å¢æ·»ç©çé²æ¤
1.9 å°ç»
1.9.1 使ç¨è½¯ä»¶ä¿æ¤ææ¯ççç±
1.9.2 ä¸ä½¿ç¨è½¯ä»¶ä¿æ¤ææ¯ççç±
1.9.3 é£æ该æä¹åå¢
1. ä¸äºè¯´æ
第2ç« æ»å»ä¸é²å¾¡çæ¹æ³
2.1 æ»å»ççç¥
2.1.1 è¢«ç ´è§£å¯¹è±¡çåå
2.1.2 ç ´è§£è çå¨æº
2.1.3 ç ´è§£æ¯å¦ä½è¿è¡ç
2.1.4 ç ´è§£è ä¼ç¨å°çç ´è§£æ¹æ³
2.1.5 ç ´è§£è é½ä½¿ç¨åªäºå·¥å ·
2.1.6 ç ´è§£è é½ä¼ä½¿ç¨åªäºææ¯
2.1.7 å°ç»
2.2 é²å¾¡æ¹æ³
2.2.1 ä¸ç¹è¯´æ
2.2.2 é®æ©
2.2.3 å¤å¶
2.2.4 åæ£ä¸å并
2.2.5 éæ°æåº
2.2.6 æ å°
2.2.7 æå¼
2.2.8 模仿
2.2.9 示形
2.2. æ¡ä»¶â触å
2.2. è¿å¨
2.2. å°ç»
2.3 ç»è®º
2.3.1 对æ»å»/é²å¾¡æ¨¡åæä»ä¹è¦æ±
2.3.2 该å¦ä½ä½¿ç¨ä¸è¿°æ¨¡å设计ç®æ³
第3ç« åæç¨åºçæ¹æ³
3.1 éæåæ
3.1.1 æ§å¶æµåæ
3.1.2 æ°æ®æµåæ
3.1.3 æ°æ®ä¾èµåæ
3.1.4 å«ååæ
3.1.5 åç
3.1.6 æ½è±¡è§£æ
3.2 å¨æåæ
3.2.1 è°è¯
3.2.2 åå
3.2.3 trace
3.2.4 模æå¨
3.3 éææºç
3.3.1 åæ±ç¼
3.3.2 åç¼è¯
3.4 å®ç¨æ§åæ
3.4.1 ç¼ç¨é£æ ¼åº¦é
3.4.2 软件å¤ææ§åº¦é
3.4.3 软件å¯è§å
3.5 å°ç»
第4ç« ä»£ç æ··æ·
4.1 ä¿çè¯ä¹çæ··æ·è½¬æ¢
4.1.1 ç®æ³obfcfï¼å¤æ ·å转æ¢
4.1.2 ç®æ³obftpï¼æ è¯ç¬¦éå½å
4.1.3 æ··æ·ç管çå±
4.2 å®ä¹
4.2.1 å¯ä»¥å®ç¨çæ··æ·è½¬æ¢
4.2.2 æ··æ·å¼åçå¼é
4.2.3 éè½æ§
4.2.4 å ¶ä»å®ä¹
4.3 å¤æåæ§å¶æµ
4.3.1 ä¸éæ表达å¼
4.3.2 ç®æ³obfwhkdï¼åææ§å¶æµ
4.3.3 使ç¨å«å
4.3.4 ç®æ³obfctjbogusï¼æå ¥å¤ä½çæ§å¶æµ
4.3.5 ç®æ³obfldkï¼éè¿è·³è½¬å½æ°æ§è¡æ æ¡ä»¶è½¬ç§»æ令
4.3.6 æ»å»
4.4 ä¸éæè°è¯
4.4.1 ç®æ³obfctjpointerï¼ä»æéå«åä¸äº§çä¸éæè°è¯
4.4.2 ç®æ³obfwhkdopaqueï¼æ°ç»å«ååæä¸çä¸éæå¼
4.4.3 ç®æ³obfctjthreadï¼ä»å¹¶åä¸äº§ççä¸éæè°è¯
4.4.4 æ»å»ä¸éæè°è¯
4.5 æ°æ®ç¼ç
4.5.1 ç¼ç æ´åæ°
4.5.2 æ··æ·å¸å°ååé
4.5.3 æ··æ·å¸¸éæ°æ®
4.5.4 æ··æ·æ°ç»
4.6 ç»ææ··æ·
4.6.1 ç®æ³obfwcsigï¼å并å½æ°ç¾å
4.6.2 ç®æ³obfctjclassï¼å解åå并类
4.6.3 ç®æ³obfdmrvslï¼æ§æ¯é«çº§ç»æ
4.6.4 ç®æ³obfajvï¼ä¿®æ¹æ令ç¼ç æ¹å¼
4.7 å°ç»
第5ç« æ··æ·ç论
5.1 å®ä¹
5.2 å¯è¢«è¯ææ¯å®å ¨çæ··æ·ï¼æ们è½åå°å
5.2.1 å¾çµåæºé®é¢
5.2.2 ç®æ³reaaï¼å¯¹ç¨åºè¿è¡åæ··æ·
5.3 å¯è¢«è¯ææ¯å®å ¨çæ··æ·ï¼ææ¶æ们è½åå°
5.3.1 ç®æ³obflbsï¼æ··æ·ç¹å½æ°
5.3.2 ç®æ³obfnsï¼å¯¹æ°æ®åºè¿è¡æ··æ·
5.3.3 ç®æ³obfppï¼åæå å¯
5.3.4 ç®æ³obfcejoï¼ç½çdeså å¯
5.4 å¯è¢«è¯ææ¯å®å ¨çæ··æ·ï¼ï¼ææ¶æ¯ï¼ä¸å¯è½å®æçä»»å¡
5.4.1 éç¨æ··æ·å¨
5.4.2 æ··æ·æç®åçç¨åº
5.4.3 对混æ·ææç¨åºçä¸å¯è½æ§çè¯æ
5.4.4 å°ç»
5.5 å¯è¢«è¯æ为å®å ¨çæ··æ·ï¼è¿ç©å¿è¿è½æå
5.5.1 è·³åºä¸å¯è½æ§çé´é¾
5.5.2 éæ°å®¡è§å®ä¹ï¼æé 交äºå¼çæ··æ·æ¹æ³
5.5.3 éæ°å®¡è§å®ä¹ï¼å¦ææ··æ·ä¸ä¿çè¯ä¹åå½å¦ä½
5.6 å°ç»
第6ç« å¨ææ··æ·
6.1 å®ä¹
6.2 代ç è¿å¾
6.2.1 ç®æ³obfkmnmï¼æ¿æ¢æ令
6.2.2 ç®æ³obfagswapï¼èªä¿®æ¹ç¶ææº
6.2.3 ç®æ³obfmamdsbï¼å¨æ代ç å并
6.3 å å¯ææ¯
6.3.1 ç®æ³obfckspï¼æ代ç ä½ä¸ºäº§çå¯é¥çæºæ³
6.3.2 ç®æ³obfagcryptï¼ç»åèªä¿®æ¹ä»£ç åå å¯
6.4 å°ç»
第7ç« è½¯ä»¶é²ç¯¡æ¹
7.1 å®ä¹
7.1.1 对篡æ¹ççæµ
7.1.2 对篡æ¹çååº
7.1.3 ç³»ç»è®¾è®¡
7.2 èªçæµ
7.2.1 ç®æ³tpcaï¼é²æ¤ä»£ç ä¹ç½
7.2.2 çæhashå½æ°
7.2.3 ç®æ³tphmstï¼éèhashå¼
7.2.4 skypeä¸ä½¿ç¨ç软件ä¿æ¤ææ¯
7.2.5 ç®æ³rewosï¼æ»å»èªhashç®æ³
7.2.6 讲è¯
7.3 ç®æ³retcjï¼ååºæºå¶
7.4 ç¶æèªæ£
7.4.1 ç®æ³tpcvcpsjï¼æé忽è§çhashå½æ°
7.4.2 ç®æ³tpjjvï¼éå çæ令
7.5 è¿ç¨é²ç¯¡æ¹
7.5.1 åå¸å¼çæµåååºæºå¶
7.5.2 解å³æ¹æ¡
7.5.3 ç®æ³tpzgï¼æåå½æ°
7.5.4 ç®æ³tpslspdkï¼éè¿ç¡®ä¿è¿ç¨æºå¨ç¡¬ä»¶é ç½®æ¥é²ç¯¡æ¹
7.5.5 ç®æ³tpcnsï¼å¯¹ä»£ç è¿è¡æç»çæ¹å
7.6 å°ç»
第8ç« è½¯ä»¶æ°´å°
8.1 åå²ååºç¨
8.1.1 åºç¨
8.1.2 å¨é³é¢ä¸åµå ¥æ°´å°
8.1.3 å¨å¾çä¸åµå ¥æ°´å°
8.1.4 å¨èªç¶è¯è¨ææ¬ä¸åµå ¥æ°´å°
8.2 软件水å°
8.3 å®ä¹
8.3.1 æ°´å°çå¯é æ§
8.3.2 æ»å»
8.3.3 æ°´å°ä¸æ纹
8.4 使ç¨éæ°æåºçæ¹æ³åµå ¥æ°´å°
8.4.1 ç®æ³wmdmï¼éæ°æååºæ¬å
8.4.2 éæ°åé èµæº
8.4.3 ç®æ³wmqpï¼æé«å¯é æ§
8.5 é²ç¯¡æ¹æ°´å°
8.6 æé«æ°´å°çæå¹²æ°è½å
8.7 æé«éè½æ§
8.7.1 ç®æ³wmmimitï¼æ¿æ¢æ令
8.7.2 ç®æ³wmvvsï¼å¨æ§å¶æµå¾ä¸åµå ¥æ°´å°
8.7.3 ç®æ³wmccï¼æ½è±¡è§£æ
8.8 ç¨äºéåæ¯çæ°´å°
8.9 ææ°´å°å¼åæå 个ç段
8.9.1 æ大水å°å解æå 个å°ç段
8.9.2 ç¸äºåä½çæ°´å°ç段
8.9.3 使ç¨ç¨çç¼ç æé«æ°´å°çå¯é æ§
8. å¾çç¼/解ç å¨
8..1 ç¶æé导åæ
8..2 åºæ°å¾
8..3 æåºå¾
8..4 æ ¹å»¶ä¼¸çå¹³é¢ä¸åæ æ举ç¼ç
8..5 å¯å½çº¦æåºå¾
8. 讲è¯
8..1 åµå ¥ææ¯
8..2 æ»å»æ¨¡å
第9ç« å¨ææ°´å°
9.1 ç®æ³wmctï¼å©ç¨å«å
9.1.1 ä¸ä¸ªç®åçä¾å
9.1.2 æ°´å°è¯å«ä¸çé®é¢
9.1.3 å¢å æ°æ®åµå ¥ç
9.1.4 å¢å æµå¾¡æ»å»çæå¹²æ°æ§è½
9.1.5 å¢å éè½æ§
9.1.6 讲è¯
9.2 ç®æ³wmntï¼å©ç¨å¹¶å
9.2.1 åµå ¥æ°´å°çåºç¡æ件
9.2.2 åµå ¥ç¤ºä¾
9.2.3 è¯å«
9.2.4 é¿å 模å¼å¹é æ»å»
9.2.5 对æ件è¿è¡é²ç¯¡æ¹å¤ç
9.2.6 讲è¯
9.3 ç®æ³wmccdkhlspathsï¼æ©å±æ§è¡è·¯å¾
9.3.1 æ°´å°ç表示ååµå ¥
9.3.2 è¯å«
9.3.3 讲è¯
9.4 ç®æ³wmccdkhlsbfï¼é²ç¯¡æ¹çæ§è¡è·¯å¾
9.4.1 åµå ¥
9.4.2 è¯å«
9.4.3 对跳转å½æ°è¿è¡é²ç¯¡æ¹å åº
9.4.4 讲è¯
9.5 å°ç»
ç¬¬ç« è½¯ä»¶ç¸ä¼¼æ§åæ
.1 åºç¨
.1.1 éå¤ä»£ç çé
.1.2 软件ä½è é´å«
.1.3 å½çªæ£æµ
.1.4 èè®°æ£æµ
.2 å®ä¹
.3 åºäºk-gramçåæ
.3.1 ç®æ³ssswawinnowï¼æéæ©å°è®°å½k-gram hash
.3.2 ç®æ³ssswamossï¼è½¯ä»¶å½çªæ£æµ
.3.3 ç®æ³ssmckgramï¼java åèç çk-gramâèè®°â
.4 åºäºapiçåæ
.4.1 ç®æ³sstnmmï¼é¢å对象çâèè®°â
.4.2 ç®æ³sstonmmï¼å¨æå½æ°è°ç¨âèè®°â
.4.3 ç®æ³sssdlï¼å¨æk-gram apiâèè®°â
.5 åºäºæ çåæ
.6 åºäºå¾çåæ
.6.1 ç®æ³sskhï¼åºäºpdgçéå¤ä»£ç çé
.6.2 ç®æ³sslchyï¼åºäºpdgçå½çªæ£æµ
.6.3 ç®æ³ssmcwppï¼æ´ä¸ªç¨åºçå¨æâèè®°â
.7 åºäºè½¯ä»¶åº¦éçåææ¹æ³
.7.1 ç®æ³sskkï¼åºäºè½¯ä»¶åº¦éçéå¤ä»£ç çé
.7.2 ç®æ³sslmï¼åºäºåº¦éç软件ä½è é´å«
.8 å°ç»
ç¬¬ç« ç¨ç¡¬ä»¶ä¿æ¤è½¯ä»¶
.1 使ç¨åè¡çç©ç设å¤åçç
.1.1 对åè¡çççä¿æ¤
.1.2 软件çåå å¯é
.2 éè¿å¯ä¿¡å¹³å°æ¨¡åå®æ认è¯å¯å¨
.2.1 å¯ä¿¡å¯å¨
.2.2 产çè¯ä¼°ç»æ
.2.3 tpm
.2.4 çé®å¼éªè¯è¿ç¨
.2.5 社ä¼å¯ä¿¡æ§åéç§é®é¢
.2.6 åºç¨åäºè®®
.3 å å¯çå¯æ§è¡æ件
.3.1 xomä½ç³»ç»æ
.3.2 é»æ¢éæ¾æ»å»
.3.3 修补ææ¼æ´çå°åæ»çº¿
.3.4 修补ææ¼æ´çæ°æ®æ»çº¿
.3.5 讲è¯
.4 æ»å»é²ç¯¡æ¹è®¾å¤
.4.1 çå¬æ»çº¿ââç ´è§£å¾®è½¯çxbox
.4.2 çæµæ令ââç ´è§£è¾¾ææ¯å导ä½å ¬å¸çdsfpå¾®å¤çå¨
.4.3 ç ´è§£æºè½å¡
.4.4 éä¾µå ¥å¼æ»å»
.4.5 主æ¿çº§çä¿æ¤
.5 å°ç»
åèæç®
å¦ä½è®¾è®¡å¥½çRESTful API
å®å ¨æ¯æä¹ çè¯é¢ï¼å¯¹äºåºäºWSDLåSOAPçWeb Serviceï¼æ们æWS-Securityè¿æ ·çå®å ¨è§èæ¥æ导å®ç°è®¤è¯ãææã身份管ççå®å ¨éæ±ãé£ä¹ï¼RESTful APIææ æçå¯ç¨è§èæå®ç°æ¡æ¶å¢ï¼å¦ä½ä¿è¯RESTful APIçå®å ¨æ§å¢ï¼
å¦ä½å¯¹RESTful APIè¿è¡çæ¬æ§å¶ï¼è¯·å享æ¨è®¤ä¸ºå®ç¨çåæ³ï¼
HTTP1.1è§èä¸ç»åºçå¨è¯å¯¹äºè®¾è®¡RESTful APIå¤ç¨åï¼æ¨å¨å®é 项ç®ä¸ä¼æ©å±èªå·±çå¨è¯åï¼å¨ä»ä¹æ åµä¸éè¦æ©å±ï¼
ä»å¹´5æ份åå¸çJAX-RS 2.0è§è对äºRSTfulAPIç设计ææä»·å¼çç¹æ§æ¯åªä¸ªï¼äºï¼? å®ï¼ä»¬ï¼ç¨äºè§£å³ä»ä¹é®é¢ï¼
è½å¦ä¸ºInfoQç读è 们æ¨èä¸æ¬¾å®ç¨çRESTful APIå¼åæ¡æ¶ï¼å¹¶è¯´ææ¨çæ¨ä»çç±ã
HTTP2.0è§èæ£å¨å¶å®å½ä¸ï¼æ¨å¯¹å®çæå¾ æ¯ä»ä¹ï¼
InfoQï¼ä»ä¹æ¯å¥½çRESTful APIï¼ç¸ä¿¡æ¯ä¸ªäººé½æèªå·±çè¯å¤æ åãé£ä¹ï¼æ¨è®¤ä¸ºä¸ä¸ªå¥½çRESTful APIåºè¯¥å ·æåªäºç¹å¾å¢ï¼
æéï¼ä¸ä¸ªå¥½çRESTful APIï¼åºè¯¥å ·å¤ä»¥ä¸ç¹å¾ï¼
è¿ä¸ªAPIåºè¯¥æ¯å¯¹æµè§å¨å好çï¼è½å¤å¾å¥½å°èå ¥Webï¼èä¸æ¯ä¸Webæ ¼æ ¼ä¸å ¥ã
æµè§å¨æ¯æ常è§åæéç¨çREST客æ·ç«¯ã好çRESTful APIåºè¯¥è½å¤ä½¿ç¨æµè§å¨+HTMLå®æææçæµè¯ï¼ä¸éè¦ä½¿ç¨ç¼ç¨è¯è¨ï¼ãè¿æ ·çAPIè¿å¯ä»¥å¾æ¹ä¾¿å°ä½¿ç¨åç§èªå¨åçWebåè½æµè¯ãæ§è½æµè¯å·¥å ·æ¥åæµè¯ãWebå端åºç¨ï¼åºäºæµè§å¨çRIAåºç¨ã移å¨Appççï¼ä¹å¯ä»¥å¾æ¹ä¾¿å°å°å¤ä¸ªRESTful APIçåè½ç»åèµ·æ¥ï¼å»ºé Mashupç±»çåºç¨ã
è¿ä¸ªAPIä¸æå å«çèµæºå对äºèµæºçæä½ï¼åºè¯¥æ¯ç´è§å容æç解çï¼å¹¶ä¸ç¬¦åHTTPåè®®çè¦æ±ã
RESTå¼åå被称ä½âé¢åèµæºçå¼åâï¼è¿è¯´æ对äºèµæºçæ½è±¡ï¼æ¯è®¾è®¡RESTful APIçæ ¸å¿å 容ãRESTful API建模çè¿ç¨ä¸é¢å对象建模类似ï¼æ¯ä»¥åè¯ä¸ºæ ¸å¿çãè¿äºåè¯å°±æ¯èµæºï¼ä»»ä½å¯å½åçæ½è±¡æ¦å¿µé½å¯ä»¥å®ä¹ä¸ºä¸ä¸ªèµæºãèHTTPå议并ä¸æ¯ä¸ç§ä¼ è¾åè®®ï¼å®å®é æä¾äºä¸ä¸ªæä½èµæºçç»ä¸æ¥å£ã对äºèµæºçä»»ä½æä½ï¼é½åºè¯¥æ å°å°HTTPçå 个æéçæ¹æ³ï¼å¸¸ç¨çæGET/POST/PUT/DELETEå个æ¹æ³ï¼è¿æä¸å¸¸ç¨çPATCH/HEAD/OPTIONSæ¹æ³ï¼ä¸é¢ãæ以RESTful API建模çè¿ç¨ï¼å¯ä»¥çä½æ¯å ·æç»ä¸æ¥å£çº¦æçé¢å对象建模è¿ç¨ã
æç §HTTPåè®®çè§å®ï¼GETæ¹æ³æ¯å®å ¨ä¸å¹ççï¼POSTæ¹æ³æ¯æ¢ä¸å®å ¨ä¹ä¸å¹ççï¼å¯ä»¥ç¨æ¥ä½ä¸ºææåæä½çéé æ¹æ³ï¼ï¼PUTãDELETEæ¹æ³é½æ¯ä¸å®å ¨ä½å¹ççãå°å¯¹èµæºçæä½åçæ å°å°è¿å个æ¹æ³ä¸é¢ï¼æ¢ä¸è¿åº¦ä½¿ç¨æ个æ¹æ³ï¼ä¾å¦è¿åº¦ä½¿ç¨GETæ¹æ³æPOSTæ¹æ³ï¼ï¼ä¹ä¸æ·»å è¿å¤çæä½ä»¥è³äºHTTPçå个æ¹æ³ä¸å¤ç¨ã
å¦æåç°èµæºä¸çæä½è¿å¤ï¼ä»¥è³äºHTTPçæ¹æ³ä¸å¤ç¨ï¼åºè¯¥èè设计åºæ´å¤çèµæºã设计åºæ´å¤èµæºï¼ä»¥åç¸åºçURIï¼å¯¹äºRESTful APIæ¥è¯´å¹¶æ²¡æä»ä¹å®³å¤ã
è¿ä¸ªAPIåºè¯¥æ¯æ¾è¦åçã
RESTful APIç设计å æ¬äºä¸ä¸ªå¾ªåºæ¸è¿ãç±ä½å°é«çå±æ¬¡ï¼èµæºæ½è±¡ãç»ä¸æ¥å£ãè¶ ææ¬é©±å¨ãæ£æ¯è¿ä¸ä¸ªå±æ¬¡ç¡®ä¿äºRESTful APIçæ¾è¦åæ§ã
å½è®¾è®¡é¢åäºèç½çAPIæ¶ï¼æ¾è¦ååæäºä¸ç§âå¿ é¡»æâç强éæ±ãç´§è¦åçAPIé常èå¼±ï¼ä¸æ¦å ¬å¸åºå»ï¼æå¡å¨ç«¯å客æ·ç«¯é½æ æ³æç»è¿åãå°¤å ¶æ¯æå¡å¨ç«¯ï¼å ¬å¸åºå»çæ¥å£æ ¹æ¬ä¸æ¢æ¹ï¼æ¹äºä¹åï¼å ä¹ææ客æ·ç«¯åºç¨ç«å³æ æ³æ£å¸¸å·¥ä½ãRESTè¿ç§æ¶æé£æ ¼å°±æ¯ç´§è¦åAPIç解æ¯åï¼è¿ä¸ªè¯é¢å¯ä»¥è°çå¾æ·±ï¼è¿éå°±ä¸å±å¼äºãæå ´è¶£ç读è å¯ä»¥åèãRESTå®æãã
è¿ä¸ªAPIä¸æ使ç¨çè¡¨è¿°æ ¼å¼åºè¯¥æ¯å¸¸è§çéç¨æ ¼å¼
å¨RESTful APIä¸ï¼å¯¹äºèµæºçæä½ï¼æ¯éè¿å¨æå¡å¨ç«¯-客æ·ç«¯ä¹é´ä¼ éèµæºç表述æ¥é´æ¥å®æçãèµæºç表述å¯ä»¥æå¾å¤ç§æ ¼å¼ï¼å¹¶ä¸å¨ååºå请æ±ä¸çèµæºè¡¨è¿°æ ¼å¼ä¹ä¼ææä¸åãGET/POSTååºä¸çèµæºè¡¨è¿°æ ¼å¼ï¼å¸¸è§çæHTMLãXMLãJSONï¼POST/PUT请æ±ä¸çèµæºè¡¨è¿°æ ¼å¼ï¼å¸¸è§çææ åçHTML表ååæ°ãXMLãJSONã
è¿äºå¸¸è§è¡¨è¿°æ ¼å¼ï¼å¤çèµ·æ¥é常容æï¼æ大éçæ¡æ¶ååºæä¾æ¯æãæ以é¤éæå¾åççè¦æ±ï¼é常ä¸éè¦ä½¿ç¨èªå®ä¹çç§ææ ¼å¼ã
使ç¨HTTPååºç¶æ代ç æ¥è¡¨è¾¾åç§åºéæ åµ
HTTPååºç¶æ代ç ï¼æ¯HTTPåè®®è¿ä¸ªç»ä¸æ¥å£ä¸ç¨æ¥è¡¨è¾¾åºéæ åµçæ åæºå¶ãååºç¶æ代ç åæ两é¨åï¼status codeåreason phaseã两é¨åé½æ¯å¯å®å¶çï¼ä¹å¯ä»¥ä½¿ç¨æ åçstatus codeï¼åªå®å¶reason phaseã
å¦æä¸ä¸ªæè°çâRESTful APIâ对äºä»»ä½è¯·æ±é½è¿å OKååºï¼å¨ååºçæ¶æ¯ä½ä¸è¿ååºéæ åµä¿¡æ¯ï¼è¿ç§åæ³æ¾ç¶ä¸ç¬¦åâç¡®ä¿æä½è¯ä¹çå¯è§æ§âè¿ä¸ªRESTæ¶æé£æ ¼çåºæ¬è¦æ±ã
è¿ä¸ªAPIåºè¯¥å¯¹äºHTTPç¼åæ¯å好ç
å åå©ç¨å¥½HTTPç¼åæ¯RESTful APIå¯ä¼¸ç¼©æ§çæ ¹æ¬ãHTTPåè®®æ¯ä¸ä¸ªåå±çæ¶æï¼ä»ä¸¤ç«¯çuser agentå°origin serverä¹é´ï¼å¯ä»¥æå ¥å¾å¤ä¸é´ç»ä»¶ãèå¨æ´ä¸ªHTTPéä¿¡é¾æ¡çå¾å¤ä½ç½®ï¼é½å¯ä»¥è®¾ç½®ç¼åãHTTPåè®®å 建æå¾å¥½çç¼åæºå¶ï¼å¯ä»¥åæè¿æ模ååéªè¯æ¨¡å两å¥ç¼åæºå¶ãå¦æAPI设计è å®å ¨æ²¡æèèè¿å¦ä½å©ç¨HTTPç¼åï¼é£ä¹è¿ä¸ªAPIçå¯ä¼¸ç¼©æ§ä¼æå¾å¤é®é¢ã
æ建ä¸ï¼é¦å 说æä¸ä¸ï¼å¯¹RESTè¿ä¸ªæ¦å¿µï¼æä¸è¬æå®ç解为RESTé£æ ¼çæ¶æï¼ä½æ¯ç°å¨å®è·µä¸æ为广æ³è®¤ç¥çæ¯HTTPï¼èå®æ¯RESTçä¸ä¸ªå®ç°ï¼æ以RESTful APIä¹å¯ä»¥ä¸å¤ªä¸¥æ ¼çæåºäºHTTPçAPIââå½ç¶ï¼å³ä½¿æ¯ä¸ä¸¥æ ¼çæ¶åï¼APIæ¬èº«ä¹åºè¯¥åæ±éµå¾ªRESTæ¶æé£æ ¼ã
æ认为ï¼ä¸ä¸ªRESTful APIæéè¦çä¸ç¹åºè¯¥æ¯âââå°½å¯è½å°çå éªä¿¡æ¯âï¼è¿ä¸æ¡ä¹åæ¶æ¯æå¤æä¸ä¸ªå¥½çRESTful APIçæ åã
æ¯å¦HTTPå¨è¯ï¼å¨å®è·µä¸ï¼å¤§å®¶å¯è½ä¼å¸¸å¸¸çº ç»äºææå©ç¨ HTTP å¨è¯ï¼ä½è¿å´å¹¶ä¸æ¯ç¹å«éè¦çäºæ ââé¤éä½ ç解è¿ä¹åçä»·å¼ãHTTP å¨è¯æéè¦çå°æ¹å¨äºå®æ¯æ åéæäºçè¡ä¸ºï¼ä¹å°±æ¯è¯´ï¼å¦ææ们çâ客æ·ç«¯âéµå¾ªçº¦å®ï¼é£ä¹å°±ä¸å¿ è¦åææ°çå¨è¯ï¼ä¹å°±ä¸å¿ å¢å âå éªä¿¡æ¯âï¼ä½æ¯ï¼æè°âå éªä¿¡æ¯âï¼é对çæ¯å®¢æ·ç«¯ââ对APIæ¥è¯´å°±æ¯è°ç¨è ï¼å¯¹äºä¸äºä¼ä¸å é¨ç³»ç»ï¼æè ä¸äºä¼ ç»ç³»ç»ï¼ç±äºâèµæºâå¾ç¨³å®ï¼å¯¹èµæºçæä½ä¹å¾ç¨³å®ï¼è¿äºç³»ç»çâè°ç¨å®¢æ·ç«¯âä¸æ¯æµè§å¨èæ¯å¦ä¸ä¸ªç³»ç»ï¼æ¤æ¶å¦æ强å¶å¯¹åºå°HTTPå¨è¯ï¼åèä¼åæé¢å¤çâå éªä¿¡æ¯âï¼è¿æ¶æå°±ä¸ä¼å¤ªææ³¥HTTPå¨è¯ï¼èªå·±å¶å®ä¸å¥å¨è¯æ¾å¨åæ°ä¸ä¹å¯ä»¥æ¥åââåªè¦å¨è¯ä¸ååï¼è¿ä¸ªç³»ç»ä¾ç¶æ¯RESTé£æ ¼çã
åæ¯å¦Responseéé¢çContent-Typeï¼è¿ä¸ªææ¶ä¼è¢«æ°æ忽ç¥ï¼ä½è¿å ¶å®å¾éè¦ï¼å 为ä¸è¬æ¶åå°ç³»ç»é´ååçAPIï¼å¾å¾ä¸ä¼ä½¿ç¨æ®éçææ¬ï¼æ¯è¾å¸¸è§çæ¯ä½¿ç¨json表达å¤æç»æï¼èè¿ä¸é常ç缺çç解ä¸åï¼ç¼ºçä¸è¬ä¼è®¤ä¸ºæ¯text/plainåtext/htmlï¼ï¼æ以å¦æå¨APIä¸å¿è®°ç¨Content-Typeè¿è¡åºåçè¯ï¼åç»å¯¹å¤ç§ç±»åç客æ·ç«¯æ¥å ¥çæ¯æå°±ä¼åæé·é±ï¼æ们å¤æ¬¡éå°è¿è¿ä¸ªé®é¢ï¼ãèå¦æä¸å¼å§å°±æ£æ¥æ¯å¦å¢å å éªç¥è¯ï¼ç¼ºçContent-Type为plainæè å 许æå®Content-Typeï¼ï¼é£è¿ä¸å°é¾å°±å¯ä»¥é¿å äºã
ä¸éªä¸°ï¼é¦å ï¼åºè¯¥æ£ç¡®å°ä½¿ç¨HTTPçç»ä¸æ¥å£ï¼æ¯å¦HTTPçå¨è¯ï¼å¦æä¸åé红çç½æ¸ ä¸è²POSTé£æ¾ç¶è¿ææ¹è¿çä½å°ï¼
å ¶æ¬¡ï¼èµæºæåéçç²åº¦ï¼å¯ä»¥ä»ä¸ä¸ªæ¹é¢æ¥è¯å¤èµæºçç²åº¦æ¯å¦åçââç½ç»çæçã表述ç大å°ä»¥å客æ·ç«¯ä½¿ç¨æ¶çæç¨ç¨åº¦ï¼
æåï¼æ¯è¡¨è¿°ç设计ï¼é¤äºè¡¨è¿°çæ£æå 容ï¼è¿æå ¶ä¸çURIåé¾æ¥ï¼è¿äºé½æ¯è¯å¤ä¸ä¸ªRESTful API好åçæ åã
马é§ï¼å¨æçæ¥ï¼ä¸ä¸ªå¥½çAPIæ åï¼å°±æ¯è½å°½éå©ç¨å°HTTPåè®®çç¹æ§ï¼å°HTTPå½æä¸ç§è½¬ç§»åè®®ï¼èä¸æ¯ä¼ è¾åè®®ãå æ¬ä½ä¸éäºï¼å©ç¨HTTPçåç§å¨è¯æ¥æç¡®æä½ï¼å å«æå 容ååï¼å¯ä»¥æ ¹æ®è¯·æ±å¤´æä¾çåæ°éæ©ä¸ä¸ªèµæºæåéçåªä½ç±»åãè¯è¨ãå符éåç¼ç ç表ç°ï¼ä½¿ç¨ä¸åçè¿å代ç æ¥æè¿°åç§ç¶æãä½å®é ä¸è§å°è¿çå¾å¤å£°ç§°RESTful APIï¼å æ¬å½å çåå½å¤çï¼è½ç¬¦åè¿äºæ¡ä»¶ç并ä¸å¤ãparse.comæä¾çAPIæ¯æè§å°è¿çè¾ä¸ºä¸éçRESTful APIï¼å¯ä»¥ä½ä¸ºèä¾åèã
InfoQï¼å®å ¨æ¯æä¹ çè¯é¢ï¼å¯¹äºåºäºWSDLåSOAPçWeb Serviceï¼æ们æWS-Securityè¿æ ·çå®å ¨è§èæ¥æ导å®ç°è®¤è¯ãææã身份管ççå®å ¨éæ±ãé£ä¹ï¼RESTful APIææ æçå¯ç¨è§èæå®ç°æ¡æ¶å¢ï¼å¦ä½ä¿è¯RESTful APIçå®å ¨æ§å¢ï¼
æéï¼ä¿è¯RESTful APIçå®å ¨æ§ï¼ä¸»è¦å æ¬ä¸å¤§æ¹é¢ï¼
a) 对客æ·ç«¯å身份认è¯
b) 对ææçæ°æ®åå å¯ï¼å¹¶ä¸é²æ¢ç¯¡æ¹
c) 身份认è¯ä¹åçææ
对客æ·ç«¯å身份认è¯ï¼æå ç§å¸¸è§çåæ³ï¼
å¨è¯·æ±ä¸å ç¾ååæ°
为æ¯ä¸ªæ¥å ¥æ¹åé ä¸ä¸ªå¯é¥ï¼å¹¶ä¸è§å®ä¸ç§ç¾åç计ç®æ¹æ³ãè¦æ±æ¥å ¥æ¹ç请æ±ä¸å¿ é¡»å ä¸ç¾ååæ°ãè¿ä¸ªåæ³æ¯æç®åçï¼ä½æ¯éè¦ç¡®ä¿æ¥å ¥æ¹å¯é¥çå®å ¨ä¿åï¼å¦å¤è¿è¦æ³¨æé²èreplayæ»å»ãå ¶ä¼ç¹æ¯å®¹æç解ä¸å®ç°ï¼ç¼ºç¹æ¯éè¦æ¿æ å®å ¨ä¿åå¯é¥åå®ææ´æ°å¯é¥çè´æ ï¼èä¸ä¸å¤çµæ´»ï¼æ´æ°å¯é¥åå级ç¾åç®æ³å¾å°é¾ã
使ç¨æ åçHTTP身份认è¯æºå¶
HTTP Basic身份认è¯å®å ¨æ§è¾ä½ï¼å¿ é¡»ä¸HTTPSé å使ç¨ãHTTP Digest身份认è¯å¯ä»¥åç¬ä½¿ç¨ï¼å ·å¤ä¸çç¨åº¦çå®å ¨æ§ã
HTTP Digest身份认è¯æºå¶è¿æ¯ææå ¥ç¨æ·èªå®ä¹çå å¯ç®æ³ï¼è¿æ ·å¯ä»¥è¿ä¸æ¥æé«APIçå®å ¨æ§ãä¸è¿æå ¥èªå®ä¹å å¯ç®æ³å¨é¢åäºèç½çAPIä¸ç¨çä¸æ¯å¾å¤ã
è¿ä¸ªåæ³éè¦ç¡®ä¿æ¥å ¥æ¹âå®å ¨å-ç¨æ·å-å¯ç âä¸å ç»ä¿¡æ¯çå®å ¨ä¿åï¼å¦å¤è¿è¦æ³¨æé²èreplayæ»å»ã
ä¼ç¹ï¼åºäºæ åï¼å¾å°äºå¹¿æ³çæ¯æï¼å¤§éHTTPæå¡å¨ç«¯ã客æ·ç«¯åºï¼ãå¨æå¡å¨ç«¯åHTTP身份认è¯çèè´£å¯ä»¥ç±Web Serverï¼ä¾å¦Nginxï¼ãApp Serverï¼ä¾å¦Tomcatï¼ãå®å ¨æ¡æ¶ï¼ä¾å¦Spring Securityï¼æ¥æ¿æ ï¼å¯¹åºç¨å¼åè æ¥è¯´æ¯éæçãHTTP身份认è¯æºå¶ï¼RFC ï¼é常好å°ä½ç°äºâåç¦»å ³æ³¨ç¹âç设计ååï¼èä¸ä¿æäºæä½è¯ä¹çå¯è§æ§ã
缺ç¹ï¼è¿ç±»åºäºç®åç¨æ·å+å¯ç æºå¶çå®å ¨æ§ä¸å¯è½é«äºåºäºé对称å¯é¥çæºå¶ï¼ä¾å¦æ°åè¯ä¹¦ï¼ã
使ç¨OAuthåè®®å身份认è¯
OAuthåè®®éç¨äºä¸ºå¤é¨åºç¨ææ访é®æ¬ç«èµæºçæ åµãå ¶ä¸çå å¯æºå¶ä¸HTTP Digest身份认è¯ç¸æ¯ï¼å®å ¨æ§æ´é«ãéè¦æ³¨æï¼OAuth身份认è¯ä¸HTTP Digest身份认è¯ä¹é´å¹¶ä¸æ¯ç¸äºå代çå ³ç³»ï¼å®ä»¬çéç¨åºæ¯æ¯ä¸åçãOAuthåè®®æ´éåäºä¸ºé¢åæç»ç¨æ·ç»´åº¦çAPIæä¾ææï¼ä¾å¦è·åé¶å±äºç¨æ·çå¾®åä¿¡æ¯ççãå¦æAPI并ä¸æ¯é¢åæç»ç¨æ·ç»´åº¦çï¼ä¾å¦åä¸çäºåå¨è¿æ ·çåå¨æå¡ï¼è¿å¹¶éæ¯OAuthåè®®çå ¸åéç¨åºæ¯ã
对ææçæ°æ®åå å¯ï¼å¹¶ä¸é²æ¢ç¯¡æ¹ï¼å¸¸è§çåæ³æï¼
é¨ç½²SSLåºç¡è®¾æ½ï¼å³HTTPSï¼ï¼æææ°æ®çä¼ è¾å ¨é¨åºäºSSLã
ä» å¯¹é¨åæææ°æ®åå å¯ï¼ä¾å¦é¢ä»è´¹å¡çå¡å·+å¯ç ï¼ï¼å¹¶å å ¥æç§éæºæ°ä½ä¸ºå å¯çï¼ä»¥é²èæ°æ®è¢«ç¯¡æ¹ã
身份认è¯ä¹åçææï¼ä¸»è¦æ¯ç±åºç¨æ¥æ§å¶ãé常åºè¯¥å®ç°æç§åºäºè§è²+ç¨æ·ç»çæææºå¶ï¼è¿æ¹é¢çæ¡æ¶æä¸å°ï¼ä¾å¦Spring Securityï¼ï¼ä¸è¿å¤§å¤æ°å¼åå¢éè¿æ¯å欢èªå·±æ¥å®ç°ç¸å ³åè½ã
æ建ä¸ï¼æä¸è®¤ä¸ºå®å ¨æ¯RESTful APIéè¦èèçé®é¢ï¼äºå®ä¸æè§å¾è¿æ¯ä¸¤ä¸ªæ£äº¤çé®é¢ãå½ç¶ï¼å¦æ使ç¨RESTful APIæ¥æä¾è®¤è¯ãææå身份管çï¼é£ä¹ç®æ¯åæ¹æå ³ç³»ï¼ä½æ¯è¿åå ¶å®é£æ ¼çAPI设计æè¦èèçé®é¢ä¼¼ä¹æ²¡ä»ä¹åºå«ï¼ä¸å¼å¾ç¹å«æ³¨æã
ä½æ¯å¨å ·ä½è®¾è®¡å±é¢ï¼è¿ä¸¤è çâæ£äº¤ç¹âä¸ä¼¼ä¹ç¡®å®æäºé®é¢ï¼å 为RESTæ¯ä¸ä¸ªæ¨å´ç¶ææ å ³ååçæ¶æé£æ ¼ï¼è认è¯åææé常åºäºç¬¬ä¸æ¹è§£å³æ¹æ¡ï¼æ以å¾å¾ä¼åºç°è¿èæç¶æ约æçé®é¢ï¼è¿ä¸ªå°æ¹æä¹æ²¡æç¹å«çæ³æ³ï¼å½ç¶è¿ä¸ªå°é¾ååé®é¢å ³ç³»ä¸å¤§ã
è³äºWS-æçåè®®ï¼æä¸å¤ªäºè§£ï¼ä¸å¤ªè½åä¸è®¨è®ºã
ä¸éªä¸°ï¼å¯¹äºRESTful APIï¼å¸¸è§çå®å ¨æªæ½é½æ¯å¯ä»¥ç»§ç»ä½¿ç¨çãä¾å¦ï¼ä¸ºäºé²ç¯¡æ¹ï¼å¯ä»¥å¯¹å ¨é¨åæ°è¿è¡ç¾åï¼ä¸ºäºé²èéæ¾æ»å»å¯ä»¥å¨è¯·æ±ä¸å¢å ä¸æ¬¡æ§çTokenï¼æè çæ¶é´å ææçTokenï¼å¯¹å 容å å¯å¯ä»¥å®ç°æ°æ®é²æ³é²â¦â¦ï¼å¯¹äºDDoSæ»å»ï¼åç§HTTPæµéæ¸ æ´çç¥ï¼é½å¯ä»¥ç»§ç»åæ¥ä½ç¨ï¼å 为è¿å°±æ¯åºæ¬çHTTP请æ±ã
å¨ææå认è¯æ¹é¢ï¼OAuth 2.0å·²ç»åºæ¬æçäºï¼å¹¶ä¸å¾å°äºå¹¿æ³å°åºç¨ãå¦æå¯ä»¥ï¼æ¥å ¥ç¬¬ä¸æ¹è´¦æ·ä½ç³»æ¯ä¸ªä¸éçéæ©ï¼æ¯å¦GoogleåFacebookçï¼å½å çå½ç¶ä¹æå 个åéã
马é§ï¼ä¸ªäººè®¤ä¸ºRESTfulçå®å ¨æ§å为å 个å±æ¬¡ï¼å¨å®å ¨è¦æ±è¾é«çåºåï¼å¯ä»¥éè¿HTTPsè¿æ ·çå å¯åè®®æ¥ä¿è¯ç½ç»å±çå®å ¨ï¼åºç¨å±çå®å ¨å¯ä»¥éè¿OAuthå®ç°è®¤è¯ï¼è对äºèµæºç访é®ææï¼ååªè½ä¾é åºç¨ç¨åºæ¥å®ç°äºã
InfoQï¼å¦ä½å¯¹RESTful APIè¿è¡çæ¬æ§å¶ï¼è¯·å享æ¨è®¤ä¸ºå®ç¨çåæ³ï¼
æéï¼ä¸ä¸ªæ¯è¾ç®åå®ç¨çåæ³æ¯ç´æ¥å¨URIä¸æå ¥çæ¬å·ï¼è¿æ ·åå 许å¤ä¸ªçæ¬çAPI并è¡è¿è¡ã
å¦ä¸ä¸ªåæ³æ¯å¨HTTP请æ±ä¸å å ¥èªå®ä¹å¤´ä¿¡æ¯ï¼æ æ使ç¨ççæ¬å·ãä¸è¿è¿ä¸ªåæ³å ¶å®å¯¹æµè§å¨ä¸å¤å好ï¼ç®åå°ä½¿ç¨æµè§å¨+HTMLæ æ³æµè¯ã
æ建ä¸ï¼ç®åæ¯è¾å¥½çæ¹å¼è¿æ¯å¨uri设计ä¸æ·»å çæ¬ä¿¡æ¯ï¼å ¶å®æ¹æ³é½ä¸å¦è¿ä¸ªå®ç¨ã
ä¸éªä¸°ï¼ä¸ªäººè®¤ä¸ºæ好ççæ¬åï¼å°±æ¯æ²¡æææ¾ççæ¬ãå¨å¯¹å·²åå¸çæå¡è¿è¡åæ´æ¶ï¼è¦å°½éåå°å ¼å®¹ï¼å ¶ä¸å æ¬URIãé¾æ¥ååç§ä¸åç表述çå ¼å®¹ï¼æå ³é®çå°±æ¯å¨æ©å±æ¶ä¸è½ç ´åç°æç客æ·ç«¯ãä¾å¦ï¼è¦åæ´ä¸ä¸ªåæ°ï¼å¯ä»¥éæ©åæ¶å ¼å®¹æ°æ§ä¸¤ç§è¾å ¥ï¼æè ä¿æèåæ°ä¸å¨ï¼æä¾ä¸ä¸ªæ°çåæ°ï¼å¨ææ¡£ä¸å¿ é¡»ååºè¯´æï¼ä¸æ¨èæ°ç¨æ·å继ç»ä½¿ç¨ä¹åçåæ°ã
å¦æå¿ é¡»è¦è¿è¡ä¸å ¼å®¹çåæ´ï¼é£ä¹å¯ä»¥éæ©æ è®°ä¸åççæ¬å·ï¼è¿æ¶å¯ä»¥éæ©å¨è·¯å¾æåæ°ä¸å¢å çæ¬ä¿¡æ¯ãä¹æåæ³æ¯å¢å HTTPæ 头ï¼åªæ¯å¨è°ç¨æ¶ä¼ç¨æä¸ä¾¿ï¼æ¨èå两ç§æ¹æ³ã
马é§ï¼RESTfulAPIççæ¬å级ï¼å°½éå ¼å®¹ä¹åççæ¬ï¼ä¿è¯åæçAPIé½è½æ£å¸¸å·¥ä½ï¼å¯ä»¥éè¿HTTP 转跳å°æ°çèµæºãå¦å¤ä¸ç§å®ç¨çåæ³å°±æ¯å¨urlä¸ä¿ççæ¬å·ï¼åæ¶æä¾å¤ä¸ªçæ¬ä¾å®¢æ·ç«¯ä½¿ç¨ï¼å¦ v1.rest.com æè rest.com/v1/ è¿æ ·ã
InfoQï¼HTTP1.1è§èä¸ç»åºçå¨è¯å¯¹äºè®¾è®¡RESTful APIå¤ç¨åï¼æ¨å¨å®é 项ç®ä¸ä¼æ©å±èªå·±çå¨è¯åï¼å¨ä»ä¹æ åµä¸éè¦æ©å±ï¼
æéï¼è¿ä¸ªé®é¢åå³äºè®¾è®¡è å¦ä½çå¾ å设计èµæºãå¦æèµæºæ½è±¡åçå¾å¥½ï¼å¯¹äºæ个èµæºçä»»ä½æä½ï¼é常é½è½å¤æ å°å°CRUDå个类å«ä¸ãCRUDå个类å«å¯¹äºæä½èµæºæ¥è¯´ï¼ç»å¤§å¤æ°æ åµä¸æ¯å®å¤çãHTTPçGET/POST/PUT/DELETEå个æ¹æ³ï¼å¯¹äºCRUDå个类å«çæä½æ¥è¯´æ¯è¶³å¤çï¼æ å°å ³ç³»æ¯Create-POST/Retrieve-GET/Update-PUT/Delete-DELETEã
æ们é常ä¸ä¼éæ©å建èªå·±çå¨è¯ï¼è¿æ ·å对äºå®¢æ·ç«¯å¼åè æ¥è¯´ï¼éè¦æ´å¤çå¦ä¹ ææ¬ãå¦æå¨èµæºä¸å®ä¹çæä½è¿å¤ï¼æ们ä¼éæ©æååºæ´å¤çèµæºã
æ建ä¸ï¼ä¸è¬æ¯å¤ç¨çï¼ææ¶ä¸äºâä¸å¤ç¨âçåºæ¯æ¯ç±äºæ们没æ设计åºåççèµæºï¼æ¯å¦æ¹éæä½ãä½æ¯ï¼æ£å¦ä¹åæ说çé£æ ·ï¼å¯¹äºæäºå é¨çãä¼ ç»çï¼å æ¤æ¨¡å稳å®ä¸å·²ç¥ï¼ç³»ç»ï¼APIæä¾è åè°ç¨è ä¼æèªå·²çåºå®å¨è¯è¡¨ï¼æ¤æ¶æ²¡å¿ è¦ææ³¥ãå¦å¤ï¼æä¸å»ºè®®æ©å±å¨è¯ï¼ä¸æ¦æ©å±äºå¨è¯ï¼å ¶å®å·²ç»ç ´åäºæä¹å说ç*âå°½å¯è½å°çå éªä¿¡æ¯â*ï¼é£ä¹ï¼æ©å±å¨è¯åéæ°è®¾è®¡å¨è¯çææ¬å·®å«ä¸å¤§ãåºäºè¿ä¸ªèèï¼æ建议尽å¯è½ä¿æå¨è¯ä¸åï¼é¤éä½ æ³éæ°è®¾è®¡å¨è¯è¡¨ã
ä¸éªä¸°ï¼ä¸è¬æ åµä¸ï¼å¸¸ç¨çHTTPå¨è¯æ¯å¤ç¨çï¼å¹¶æ²¡æåºç°ä¸å®è¦èªå·±æ©å±å¨è¯çæ åµãå ¶å®ï¼æ常ç¨çä¹å°±æ¯GETãPOSTãDELETEåPUTï¼èHEADãOPTIONSãTRACEååºæ¬ç¨ä¸å¤ªå°ãå¦æåºç°ä¸æ¶æ¾ä¸å°åéçå¨è¯ï¼å®å ¨å¹ççæä½ç¨GETï¼å ¶ä»é½å¯ä»¥ç¨POSTï¼å¨è®¾è®¡èµæºæ¶ç¨å èèå³å¯ã
马é§ï¼å¨æçå®é 项ç®ä¸ï¼åªç¨å°äºPOSTï¼PUTï¼DELETEï¼GETè¿å个å¨è¯ã
InfoQï¼ä»å¹´5æ份åå¸çJAX-RS 2.0è§è对äºRSTfulAPIç设计ææä»·å¼çç¹æ§æ¯åªä¸ªï¼äºï¼? å®ï¼ä»¬ï¼ç¨äºè§£å³ä»ä¹é®é¢ï¼
æéï¼RESTå¼åæ¡æ¶RESTEasy项ç®è´è´£äººBill Burkeï¼å»å¹´åäºä¸ç¯æç« ä»ç»JAX-RS 2.0ã
æåæBillå¨æç« ä¸çè§ç¹ï¼å¨JAX-RS 2.0å¢å çå 容ä¸ï¼æéè¦çä¸é¨å为ï¼
a) Client APIââç¨æ¥è§èåJAX-RS客æ·ç«¯çå¼åæ¹å¼ã
b) Server-side Asynchronous HTTPââç¨æ¥å®ç°æå¡å¨ç«¯æ¨éåè½ï¼èä¸éè¦ä¾é ä½æç轮询æ¹å¼ã
c) Filters and Interceptorsââç¨æ¥åç¦»å ³æ³¨ç¹ï¼å°é´æãæ¥å¿çé»è¾ä¸ä¸å¡é»è¾å离å¼ï¼æ´å¥½å°å®ç°ä»£ç éç¨ã
è¿ä¸é¨åçå 容对äºå¼åè æ¥è¯´é½å¾æç¨ãéµå¾ªJAX-RSè§èåå¼åï¼å¯ä»¥ç¡®ä¿æå¡å¨ç«¯ä»¥å客æ·ç«¯ä»£ç çå¯ç§»æ¤æ§ã
æ建ä¸ï¼æä¸ªäººå ³æ³¨å¼æ¥APIè¿é¨åï¼ä¸»è¦æ¯å 为æµå¼æå¡å°ä¼è¶æ¥è¶å¤ï¼é£å°å¤§ééè¦è¿ç±»æ¯æã
InfoQï¼è½å¦ä¸ºInfoQç读è æ¨èä¸æ¬¾å®ç¨çRESTful APIå¼åæ¡æ¶ï¼å¹¶è¯´ææ¨çæ¨ä»çç±ã
æéï¼è¿ä¸ªé®é¢æå°±ä¸è¯¦ç»åçäºãä¸åçç¼ç¨è¯è¨æä¸åçRESTå¼åæ¡æ¶ï¼å¯¹äºRESTçæ¯æç¨åº¦ä¹ä¸åãå¼åRESTful APIçéæ±èå´å¾å¹¿ï¼å¯éæ©çå¼åæ¡æ¶çèå´ä¹å¾å¹¿ãä¿æå¤æ ·æ§æ¯ç¹è£çæç¯å¢çåºç¡ãåJavaå°±ææ¯æJAX-RSè§èçJerseyãRESTEasyãRestletãApache CXFï¼åä¸æ¯æJAX-RSè§èçSpring MVCççå¾å¤æ¡æ¶ãè¿äºæ¡æ¶ç®åé½åçä¸éãæ对æ¡æ¶çéæ©æ²¡æå¾åæ§ãRESTful API设计çæä½³å®è·µåºè¯¥æ¯éç¨çï¼èä¸æ¯å¿ é¡»ä¾èµæç§ç¹å®çå¼åæ¡æ¶ã
æ建ä¸ï¼ä¸å¥½ææï¼è¿ä¸ªæä¸å¤ªéè§ï¼æ²¡æ³æ¨èï¼ä¸è¿æå¯ä»¥è§£éä¸ä¸ä¸ºä»ä¹å¯¹RESTful APIæ¡æ¶ä¸æåçåå ã
RESTä½ä¸ºä¸ä¸ªæ¶æé£æ ¼ï¼å¯¹æ们çç³»ç»å¼åæå¾å¤§å½±åï¼ä½æ¯è¿äºå½±åä¸è¬æ¯é对æ¶æï¼ä¾å¦ç¶ææ å ³ï¼æè 设计ï¼ä¾å¦èµæºè¯å«ï¼ä¸çï¼æ以ä¸æ¦æ¶åå°å ·ä½å®ç°ï¼ä¸»è¦å·¥ä½å°±åºæ¬ç»æäºï¼æ¤æ¶å¼åæ¡æ¶è½åçäºä¹å°±åªæç®åç¼ç¨äºï¼ç¸è¾èè¨ï¼æçæ¡æ¶è¿è½èµ·å°å¼å¯¼è®¾è®¡çä½ç¨ï¼ï¼èç±äºRESTfulä¼æ½è±¡å¨è¯ï¼æ以å®ç°å±é¢ä¸åAPIè§èç¸å ³çå·¥ä½æ¬æ¥å°±ä¸å¤ï¼é£ä¹æ¡æ¶çä»·å¼å°±æ´å°äºã
å½ç¶ï¼æ们ä¹ä¸å¯è½ç´æ¥åºäºservlet/rakc/wsgiæ¥å¼åï¼ä¸è¿ä¸è¬çç¼ç¨è¯è¨é½ä¼æä¾ä¸äºç®åçurl route/matchçç¥ï¼æ们使ç¨è¿äºå°±è¶³å¤äºãå¦å¤ï¼æäºæ¡æ¶è½å¸®æ们çæå ¨é¨çå¨è¯æ¯æï¼ä½è¿ä¹æªå¿ æ¯å¥½äºï¼æä¸è¬å¾åäºæéå®ç°ââç¨å°äºåæ¯æï¼è¿å°±æ´ä¸éè¦å¤ªå ³æ³¨å¼åæ¡æ¶å¯¹RESTfulçæ¯æäºã
ä¸éªä¸°ï¼ç±äºæ¬äººæ¯Springçæ¥æ¤è ï¼å·¥ä½ä¸ä¹ä¸ç´å¨ä½¿ç¨Springï¼æ以å¨éæ©æ¡æ¶æ¶ä¼æ´å¤å°å¾åSpring MVCï¼å¹¶ä¸æ¯è¯´å«çæ¡æ¶ä¸å¥½ï¼è¿éæäºä¸ªäººä¸»è§çæ份ï¼ãå¦æä¸å®è¦éæ©å ¶ä»æ¡æ¶ï¼ä¹è¦éæ©è½å¤æ¹ä¾¿ä¸Springéæçæ¡æ¶ãå¦æå¨é¡¹ç®ä¸å·²ç»ä½¿ç¨äºSpringï¼é£ä¹æ²¡æä»ä¹çç±ä¸éæ©Spring MVCï¼é´äºç®åSpringå¨åç§é¡¹ç®ä¸çé«åºéçï¼ç¸ä¿¡ä¸è¬æ åµä¸é½ä¼éæ©Spring MVCã
RESTçæç度模åä¸ï¼ç¬¬ä¸å±å°±æ¯HATEOASï¼Springç®åè¿æä¾äºSpring Hateoaså项ç®ï¼å¯¹é¾æ¥ãèµæºçæ¹é¢çæ¯æé½åäºä¸å®çå¢å¼ºã
马é§ï¼æç®åå¨å®é 项ç®ä¸ä½¿ç¨çæ¯Sprayï¼è¿æ¯ä¸ä¸ªå¼æºç REST/HTTP å·¥å ·å ååºå±ç½ç» IO å ï¼åºäº Scala å Akka æ建ãè½»é级ãå¼æ¥ãéå µå¡ãåºäº actor 模å¼ã模åååå¯æµè¯æ¯Sprayçç¹ç¹ã
InfoQï¼HTTP2.0è§èæ£å¨å¶å®å½ä¸ï¼æ¨å¯¹å®çæå¾ æ¯ä»ä¹ï¼
æéï¼æçæå¾ å æ¬ä¸¤ä¸ªæ¹é¢ï¼åºè¯¥åçåä¸åºè¯¥åçã
HTTP/2.0è§èåºè¯¥åçï¼
ä¸HTTP/1.1åè®®ä¿æå ¼å®¹ãå ¼å®¹çå«ä¹æ¯è¯´ä¸¤è å¯ä»¥å¹¶åï¼å®¢æ·ç«¯åºç¨å¯ä»¥æ ¹æ®æå¡å¨ç«¯çè½åï¼èªç±å°éæ©ä½¿ç¨HTTP/2.0è¿æ¯HTTP/1.1ï¼èä¸éæ©è¿ç¨å¯¹åºç¨æ¥è¯´æ¯éæçã
æ¹è¿HTTPåè®®ï¼ä½ä¸ºèµæºçç»ä¸æ¥å£ï¼ä¹ä¸æä½è¯ä¹è¡¨è¾¾æ¹å¼çè¯æ³ï¼æé«ç½ç»ä¼ è¾æçã
æ´å¥½å°æ¨¡ååï¼è¿æ ·HTTP/2.0åè®®çå®ç°è½å¤æ´å¥½å°æ¨¡ååãåºç¨ç¨åºå¯æ ¹æ®éè¦éæ©éå½ç模åï¼èä¸æ¯è¦ä¹å ¨æãè¦ä¹å ¨æ ã
åºå¼æHTTP/1.1åè®®ä¸ä¸äºå¾å°æ人ç¨å°çé¨åï¼ä¾å¦éç¨ç®¡éï¼pipeliningï¼æ¹å¼åé请æ±ã
å¢å æ´å¤çå¨è¯ï¼ä»¥éåºé¤CRUDä¹å¤çå ¶ä»åºæ¯ã
HTTP/2.0è§èä¸åºè¯¥åçï¼
HTTP/2.0åè®®ä¸åºè¯¥æåºå±çæ°æ®å å¯æºå¶ï¼å³SSLï¼ä½ä¸ºå¿ é项ã
HTTP/2.0åè®®ä¸åºè¯¥è离RESTæ¶æé£æ ¼ç约æï¼å°¤å ¶æ¯è¦ç¡®ä¿æä½è¯ä¹å¯¹äºä¸é´ç»ä»¶çå¯è§æ§ã
å¨ä¸é¢è¿ä¸¤ä¸ªæ¹é¢ï¼Roy Fileidngæ¾ç»ä¸SPDYå议设计è Mike Belsheåçè¿æ¿çäºè®ºï¼è¯¦æ 请çï¼Roy Fieldingè°Google SPDYåè®®
æ建ä¸ï¼å¯¹æ¤è§èå ³æ³¨ä¸å¤ï¼ä¸ç¥éä¼ä¸ä¼æ对äºæµçæ¯æï¼ç®åææç¥éçåªæchunkæ¹å¼è¿è¡ç®åçæ¯æï¼ä½æ¯çæ£çæµéè¦åºåæ°æ®ééåæ§å¶ééââåªææ¯é»è¾ä¸çåºåï¼è¿æ ·å°±ç´æ¥å¯¹RESTé£æ ¼äº§çäºå¾å¤§å²å»ï¼èèå°æµå¼æå¡å¨æªæ¥çåå±æ½åï¼æç¹å«æå¾ ä¸çå¨è¿æ¹é¢ææè¿å±ã
ä¸éªä¸°ï¼HTTP 2.0å¾å¤§ç¨åº¦ä¸æ¯åé´äºGoogleçSPDYï¼å°±æèè¨ï¼é¦å ï¼å¸æè¿ä¸ªè§èè½åå°ä¸HTTP 1.1çå ¼å®¹ï¼ä½¿ç¨è å¦æåªè®¤è¯1.1ï¼é£ä¹2.0è½ä¼é âé级âï¼å ¶æ¬¡ï¼å¸æ2.0è½å¸¦æ¥æ´å¥½çæ§è½ï¼SPDYå¨è¿æ¹é¢è¿æ¯æææ¹è¿çï¼å¸æHTTP 2.0è½åæ¥ååï¼æåï¼å¸æè¿ä¸ªè§èè½å¨æç»å®ç¨¿æ¶é带ä¸ä¸ªæä½³å®è·µï¼æ£ç¡®å¼å¯¼äººä»¬åçå°ä½¿ç¨HTTP 2.0ã
马é§ï¼æ²¡ç 究è¿ï¼ä¼°è®¡å³ä½¿åºæ¥ï¼1.1è¿æå¾é¿ççå½å¨æï¼ä¸ä¼å¾å¿«è¢«å代ã