ä¸è¬å¨æµè§å¨ä¸è¾å ¥ç½å访é®èµæºé½æ¯éè¿GETæ¹å¼ï¼å¨FORMæ交ä¸ï¼å¯ä»¥éè¿Methodæå®æ交æ¹å¼ä¸ºGETæè POSTï¼é»è®¤ä¸ºGETæ交
Httpå®ä¹äºä¸æå¡å¨äº¤äºçä¸åæ¹æ³ï¼æåºæ¬çæ¹æ³æ4ç§ï¼åå«æ¯GETï¼POSTï¼PUTï¼DELETE
URLå ¨ç§°æ¯èµæºæ述符ï¼æ们å¯ä»¥è¿æ ·è®¤ä¸ºï¼ä¸ä¸ªURLå°åï¼å®ç¨äºæè¿°ä¸ä¸ªç½ç»ä¸çèµæºï¼èHTTPä¸çGETï¼POSTï¼PUTï¼DELETE就对åºç对è¿ä¸ªèµæºçæ¥ ï¼æ¹ ï¼å¢ ï¼å 4个æä½ãå°è¿éï¼å¤§å®¶åºè¯¥æ个大æ¦çäºè§£äºï¼GETä¸è¬ç¨äºè·å/æ¥è¯¢ èµæºä¿¡æ¯ï¼èPOSTä¸è¬ç¨äºæ´æ° èµæºä¿¡æ¯(个人认为è¿æ¯GETåPOSTçæ¬è´¨åºå«ï¼ä¹æ¯å议设计è çæ¬æï¼å ¶å®åºå«é½æ¯å ·ä½è¡¨ç°å½¢å¼çå·®å¼ )ã
æ ¹æ®HTTPè§èï¼GETç¨äºä¿¡æ¯è·åï¼èä¸åºè¯¥æ¯å®å ¨çåå¹çç ã
1.æè°å®å ¨çæå³ç该æä½ç¨äºè·åä¿¡æ¯èéä¿®æ¹ä¿¡æ¯ãæ¢å¥è¯è¯´ï¼GET请æ±ä¸è¬ä¸åºäº§çå¯ä½ç¨ãå°±æ¯è¯´ï¼å®ä» ä» æ¯è·åèµæºä¿¡æ¯ï¼å°±åæ°æ®åºæ¥è¯¢ä¸æ ·ï¼ä¸ä¼ä¿®æ¹ï¼å¢å æ°æ®ï¼ä¸ä¼å½±åèµæºçç¶æã
* 注æï¼è¿éå®å ¨çå«ä¹ä» ä» æ¯ææ¯éä¿®æ¹ä¿¡æ¯ã
2.å¹ççæå³ç对åä¸URLçå¤ä¸ªè¯·æ±åºè¯¥è¿ååæ ·çç»æãè¿éæå解éä¸ä¸å¹ç è¿ä¸ªæ¦å¿µï¼
å¹ç ï¼idempotentãidempotenceï¼æ¯ä¸ä¸ªæ°å¦æ计ç®æºå¦æ¦å¿µï¼å¸¸è§äºæ½è±¡ä»£æ°ä¸ã
å¹çæ以ä¸å ç§å®ä¹ï¼
对äºåç®è¿ç®ï¼å¦æä¸ä¸ªè¿ç®å¯¹äºå¨èå´å
çææçä¸ä¸ªæ°å¤æ¬¡è¿è¡è¯¥è¿ç®æå¾çç»æåè¿è¡ä¸æ¬¡è¯¥è¿ç®æå¾çç»ææ¯ä¸æ ·çï¼é£ä¹æ们就称该è¿ç®æ¯å¹ççã æ¯å¦ç»å¯¹å¼è¿ç®å°±æ¯ä¸ä¸ªä¾åï¼å¨å®æ°éä¸ï¼æabs(a) = abs(abs(a)) ã
对äºåç®è¿ç®ï¼åè¦æ±å½åä¸è¿ç®ç两个å¼æ¯çå¼çæ
åµä¸ï¼å¦æ满足è¿ç®ç»æä¸åä¸è¿ç®ç两个å¼ç¸çï¼å称该è¿ç®å¹çï¼å¦æ±ä¸¤ä¸ªæ°çæ大å¼çå½æ°ï¼æå¨å®æ°éä¸å¹çï¼å³max(x,x) = x ã
çå®ä¸è¿°è§£éåï¼åºè¯¥å¯ä»¥ç解GETå¹ççå«ä¹äºã
ä½å¨å®é åºç¨ä¸ï¼ä»¥ä¸2æ¡è§å®å¹¶æ²¡æè¿ä¹ä¸¥æ ¼ãå¼ç¨å«äººæç« çä¾åï¼æ¯å¦ï¼æ°é»ç«ç¹ç头çä¸ææ´æ°ãè½ç¶ç¬¬äºæ¬¡è¯·æ±ä¼è¿åä¸åçä¸æ¹æ°é»ï¼è¯¥æä½ä»ç¶è¢«è®¤ä¸ºæ¯å®å ¨çåå¹ççï¼å 为å®æ»æ¯è¿åå½åçæ°é»ãä»æ ¹æ¬ä¸è¯´ï¼å¦æç®æ æ¯å½ç¨æ·æå¼ä¸ä¸ªé¾æ¥æ¶ï¼ä»å¯ä»¥ç¡®ä¿¡ä»èªèº«çè§åº¦æ¥ç没ææ¹åèµæºå³å¯ã
æ ¹æ®HTTPè§èï¼POST表示å¯è½ä¿®æ¹åæå¡å¨ä¸çèµæºçè¯·æ± ã继ç»å¼ç¨ä¸é¢çä¾åï¼è¿æ¯æ°é»ä»¥ç½ç«ä¸ºä¾ï¼è¯»è 对æ°é»å表èªå·±çè¯è®ºåºè¯¥éè¿POSTå®ç°ï¼å 为å¨è¯è®ºæ交åç«ç¹çèµæºå·²ç»ä¸åäºï¼æè 说èµæºè¢«ä¿®æ¹äºã
ä¸é¢å¤§æ¦è¯´äºä¸ä¸HTTPè§èä¸ï¼GETåPOSTçä¸äºåçæ§çé®é¢ãä½å¨å®é çåçæ¶åï¼å¾å¤äººå´æ²¡ææç §HTTPè§èå»åï¼å¯¼è´è¿ä¸ªé®é¢çåå æå¾å¤ï¼æ¯å¦è¯´ï¼
1.å¾å¤äººè´ªæ¹ä¾¿ï¼æ´æ°èµæºæ¶ç¨äºGETï¼å 为ç¨POSTå¿ é¡»è¦å°FORMï¼è¡¨åï¼ï¼è¿æ ·ä¼éº»ç¦ä¸ç¹ã
2.对èµæºçå¢ï¼å ï¼æ¹ï¼æ¥æä½ï¼å ¶å®é½å¯ä»¥éè¿GET/POSTå®æï¼ä¸éè¦ç¨å°PUTåDELETEã
3.å¦å¤ä¸ä¸ªæ¯ï¼æ©æçä½æ¯Web MVCæ¡æ¶è®¾è®¡è 们并没æææè¯å°å°URLå½ä½æ½è±¡çèµæºæ¥çå¾ å设计 ãè¿æä¸ä¸ªè¾ä¸ºä¸¥éçé®é¢æ¯ä¼ ç»çWeb MVCæ¡æ¶åºæ¬ä¸é½åªæ¯æGETåPOST两ç§HTTPæ¹æ³ï¼èä¸æ¯æPUTåDELETEæ¹æ³ã
* ç®å解éä¸ä¸MVCï¼MVCæ¬æ¥æ¯åå¨äºDesktopç¨åºä¸çï¼Mæ¯ææ°æ®æ¨¡åï¼Væ¯æç¨æ·çé¢ï¼Cåæ¯æ§å¶å¨ã使ç¨MVCçç®çæ¯å°MåVçå®ç°ä»£ç å离ï¼ä»è使åä¸ä¸ªç¨åºå¯ä»¥ä½¿ç¨ä¸åç表ç°å½¢å¼ã
以ä¸3ç¹å ¸åå°æè¿°äºèä¸å¥çé£æ ¼ï¼æ²¡æä¸¥æ ¼éµå®HTTPè§èï¼ï¼éçæ¶æçåå±ï¼ç°å¨åºç°REST(Representational State Transfer)ï¼ä¸å¥æ¯æHTTPè§èçæ°é£æ ¼ï¼è¿éä¸å¤è¯´äºï¼å¯ä»¥åèãRESTful Web Servicesãã
ææ¸ äºä¸¤è çåçåºå«ï¼æ们åæ¥çä¸ä¸ä»ä»¬å®é åºç¨ä¸çåºå«ï¼
为äºç解两è å¨ä¼ è¾è¿ç¨ä¸çä¸åï¼æ们å çä¸ä¸HTTPåè®®çæ ¼å¼ï¼
HTTP请æ±ï¼å¨HTTP请æ±ä¸ï¼ç¬¬ä¸è¡å¿ é¡»æ¯ä¸ä¸ªè¯·æ±è¡ï¼request lineï¼ï¼ç¨æ¥è¯´æ请æ±ç±»åãè¦è®¿é®çèµæºä»¥å使ç¨çHTTPçæ¬ãç´§æ¥çæ¯ä¸ä¸ªé¦é¨ï¼headerï¼å°èï¼ç¨æ¥è¯´ææå¡å¨è¦ä½¿ç¨çéå ä¿¡æ¯ãå¨é¦é¨ä¹åæ¯ä¸ä¸ªç©ºè¡ï¼åæ¤ä¹åå¯ä»¥æ·»å ä»»æçå ¶ä»æ°æ®[称ä¹ä¸ºä¸»ä½ï¼bodyï¼]ã
GETä¸POSTæ¹æ³å®ä¾ï¼
æäºä»¥ä¸å¯¹HTTP请æ±çäºè§£å示ä¾ï¼æ们åæ¥ç两ç§æ交æ¹å¼çåºå«ï¼
ï¼1ï¼GETæ交ï¼è¯·æ±çæ°æ®ä¼éå¨URLä¹åï¼å°±æ¯ææ°æ®æ¾ç½®å¨HTTPå议头ä¸ï¼ï¼ä»¥?åå²URLåä¼ è¾æ°æ®ï¼å¤ä¸ªåæ°ç¨&è¿æ¥ï¼ä¾ å¦ï¼login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BDãå¦ææ°æ®æ¯è±æåæ¯/æ°åï¼åæ ·åéï¼å¦ææ¯ç©ºæ ¼ï¼è½¬æ¢ä¸º+ï¼å¦ææ¯ä¸æ/å ¶ä»å符ï¼åç´æ¥æå符串ç¨BASE64å å¯ï¼å¾åºå¦ï¼ %E4%BD%A0%E5%A5%BDï¼å ¶ä¸ï¼ XXä¸çXX为该符å·ä»¥16è¿å¶è¡¨ç¤ºçASCIIã
POSTæ交ï¼ææ交çæ°æ®æ¾ç½®å¨æ¯HTTPå çå ä½ä¸ãä¸æ示ä¾ä¸çº¢è²åä½æ æçå°±æ¯å®é çä¼ è¾æ°æ®
å æ¤ï¼GETæ交çæ°æ®ä¼å¨å°åæ ä¸æ¾ç¤ºåºæ¥ï¼èPOSTæ交ï¼å°åæ ä¸ä¼æ¹å
(2)ä¼ è¾æ°æ®ç大å°ï¼é¦å 声æï¼HTTPå议没æå¯¹ä¼ è¾çæ°æ®å¤§å°è¿è¡éå¶ï¼HTTPåè®®è§èä¹æ²¡æ对URLé¿åº¦è¿è¡éå¶ã
èå¨å®é å¼åä¸åå¨çéå¶ä¸»è¦æï¼
GET:ç¹å®æµè§å¨åæå¡å¨å¯¹URLé¿åº¦æéå¶ï¼ä¾å¦ IE对URLé¿åº¦çéå¶æ¯2083åè(2K+35)ã对äºå ¶ä»æµè§å¨ï¼å¦NetscapeãFireFoxçï¼ç论ä¸æ²¡æé¿åº¦éå¶ï¼å ¶éå¶åå³äºæä½ç³» ç»çæ¯æã
å æ¤å¯¹äºGETæ交æ¶ï¼ä¼ è¾æ°æ®å°±ä¼åå°URLé¿åº¦ç éå¶ã
POST:ç±äºä¸æ¯éè¿URLä¼ å¼ï¼ç论ä¸æ°æ®ä¸å éãä½å®é å个WEBæå¡å¨ä¼è§å®å¯¹postæ交æ°æ®å¤§å°è¿è¡éå¶ï¼ApacheãIIS6é½æåèªçé ç½®ã
(3)å®å ¨æ§ï¼
POSTçå®å ¨æ§è¦æ¯GETçå®å ¨æ§é«ã注æï¼è¿éæ说çå®å ¨æ§åä¸é¢GETæå°çâå®å ¨âä¸æ¯å个æ¦å¿µãä¸é¢ âå®å ¨âçå«ä¹ä» ä» æ¯ä¸ä½æ°æ®ä¿® æ¹ï¼èè¿ éå®å ¨çå«ä¹æ¯çæ£çSecurityçå«ä¹ï¼æ¯å¦ï¼éè¿GETæ交æ°æ®ï¼ç¨æ·ååå¯ç å°ææåºç°å¨URLä¸ï¼å 为(1)ç»å½é¡µé¢æå¯è½è¢«æµè§å¨ç¼åï¼ (2)å ¶ä»äººæ¥çæµè§å¨çåå²çºªå½ï¼é£ä¹å«äººå°±å¯ä»¥æ¿å°ä½ çè´¦å·åå¯ç äºï¼é¤æ¤ä¹å¤ï¼ä½¿ç¨GETæ交æ°æ®è¿å¯è½ä¼é æCross-site request forgeryæ»å»
ï¼4ï¼Http get,post,soapåè®®é½æ¯å¨httpä¸è¿è¡ç
1ï¼getï¼è¯·æ±åæ°æ¯ä½ä¸ºä¸ä¸ªkey/value对çåºåï¼æ¥è¯¢å符串ï¼éå å°URLä¸ç
æ¥è¯¢å符串çé¿åº¦åå°webæµè§å¨åwebæå¡å¨çéå¶ï¼å¦IEæå¤æ¯æ2048个å符ï¼ï¼ä¸éåä¼ è¾å¤§åæ°æ®éåæ¶ï¼å®å¾ä¸å®å
¨
2ï¼postï¼è¯·æ±åæ°æ¯å¨httpæ é¢çä¸ä¸ªä¸åé¨åï¼å为entity bodyï¼ä¼ è¾çï¼è¿ä¸é¨åç¨æ¥ä¼ è¾è¡¨åä¿¡æ¯ï¼å æ¤å¿
é¡»å°Content-type设置为:application/x-www-form- urlencodedãpost设计ç¨æ¥æ¯æwebçªä½ä¸çç¨æ·å段ï¼å
¶åæ°ä¹æ¯ä½ä¸ºkey/valueå¯¹ä¼ è¾ã
ä½æ¯ï¼å®ä¸æ¯æå¤ææ°æ®ç±»åï¼å 为post没æå®ä¹ä¼ è¾æ°æ®ç»æçè¯ä¹åè§åã
3ï¼soapï¼æ¯http postçä¸ä¸ªä¸ç¨çæ¬ï¼éµå¾ªä¸ç§ç¹æ®çxmlæ¶æ¯æ ¼å¼
Content-type设置为: text/xml ä»»ä½æ°æ®é½å¯ä»¥xmlå
å¨ååºä¸å¯ä¸çæ£çåºå«å¨äºç¬¬ä¸è¡ä¸ç¨ç¶æä¿¡æ¯ä»£æ¿äºè¯·æ±ä¿¡æ¯ãç¶æè¡ï¼status lineï¼éè¿æä¾ä¸ä¸ªç¶æç æ¥è¯´ææ请æ±çèµæºæ
åµã
HTTPååºå®ä¾ï¼
2ï¼æ常ç¨çç¶æç æï¼
ä¾åï¼
HTTP GET åé
Http Post åé
POST /DEMOWebServices2.8/Service.asmx/CancelOrder HTTP/1.1
SOAP 1.2
åé
1. getæ¯ä»æå¡å¨ä¸è·åæ°æ®ï¼postæ¯åæå¡å¨ä¼ éæ°æ®ã get å poståªæ¯ä¸ç§ä¼ éæ°æ®çæ¹å¼ï¼getä¹å¯ä»¥ææ°æ®ä¼ å°æå¡å¨ï¼ä»ä»¬çæ¬è´¨é½æ¯åé请æ±åæ¥æ¶ç»æãåªæ¯ç»ç»æ ¼å¼åæ°æ®éä¸é¢æå·®å«ï¼httpåè®®éé¢æä»ç»
2. getæ¯æåæ°æ°æ®éåå å°æ交表åçACTIONå±æ§ææçURLä¸ï¼å¼å表åå
å个å段ä¸ä¸å¯¹åºï¼å¨URLä¸å¯ä»¥çå°ãpostæ¯éè¿HTTP postæºå¶ï¼å°è¡¨åå
å个å段ä¸å
¶å
容æ¾ç½®å¨HTML HEADERå
ä¸èµ·ä¼ éå°ACTIONå±æ§ææçURLå°åãç¨æ·çä¸å°è¿ä¸ªè¿ç¨ã
å 为get设计æä¼ è¾å°æ°æ®ï¼èä¸æ好æ¯ä¸ä¿®æ¹æå¡å¨çæ°æ®ï¼æ以æµè§å¨ä¸è¬é½å¨å°åæ éé¢å¯ä»¥çå°ï¼ä½postä¸è¬é½ç¨æ¥ä¼ é大æ°æ®ï¼ææ¯è¾éç§çæ°æ®ï¼æ以å¨å°åæ çä¸å°ï¼è½ä¸è½çå°ä¸æ¯åè®®è§å®ï¼æ¯æµè§å¨è§å®çã
3. 对äºgetæ¹å¼ï¼æå¡å¨ç«¯ç¨Request.QueryStringè·ååéçå¼ï¼å¯¹äºpostæ¹å¼ï¼æå¡å¨ç«¯ç¨Request.Formè·åæ交çæ°æ®ã
没æç½ï¼æä¹è·å¾åéåä½ çæå¡å¨æå
³ï¼ågetæpostæ å
³ï¼æå¡å¨é½å¯¹è¿äºè¯·æ±åäºå°è£
4. getä¼ éçæ°æ®éè¾å°ï¼ä¸è½å¤§äº2KBãpostä¼ éçæ°æ®éè¾å¤§ï¼ä¸è¬è¢«é»è®¤ä¸ºä¸åéå¶ãä½ç论ä¸ï¼IIS4ä¸æ大é为80KBï¼IIS5ä¸ä¸º100KBã
poståºæ¬æ²¡æéå¶ï¼ææ³å¤§å®¶é½ä¸ä¼ è¿æ件ï¼é½æ¯ç¨postæ¹å¼çãåªä¸è¿è¦ä¿®æ¹forméé¢çé£ä¸ªtypeåæ°
5. getå®å
¨æ§é常ä½ï¼postå®å
¨æ§è¾é«ã
å¦æ没æå å¯ï¼ä»ä»¬å®å
¨çº§å«é½æ¯ä¸æ ·çï¼é便ä¸ä¸ªçå¬å¨é½å¯ä»¥æææçæ°æ®çå¬å°ï¼ä¸ä¿¡ä½ èªå·±ä¸ä¸ä¸ªçå¬ç½ç»èµæºç软件ï¼
get请求参数会在地址栏暴露,安全性不好,相反post请求不会将所传参数暴露在地址栏中相对较安全。
get是从服务器中获取参数,post是上传数据。
get传输数据量小,主要是受URL长度的限制;post可以传送大量数据,所以上传文件只能用post。
get是form的默认方法。
get限制form表单数据集必须是ASCII字符,而post支持整个ISO10646字符集。(编码)