發(fā)現(xiàn)很多前端小伙伴的簡歷當(dāng)中都寫有這么一句:了解http協(xié)議。其實(shí)大可不必泽西,因?yàn)閔ttp是前端基礎(chǔ)中的基礎(chǔ)捧杉。這就相當(dāng)于一位廚師的簡歷中寫著:熟練使用炊具味抖。
既然簡歷中出現(xiàn)這個(gè)知識(shí)點(diǎn)忍坷,那么緊隨而來的便是面試官的提問:get與post方法有什么區(qū)別呢佩研?
大部分面試者都只會(huì)從單詞字面上回答:get是從服務(wù)器獲取數(shù)據(jù)韧骗,而post是向服務(wù)器傳送數(shù)據(jù)袍暴。
很顯然上面的回答是無法讓面試官信服的政模,下面是我對(duì)這兩種請(qǐng)求方法的一些總結(jié):
首先get和post都是http請(qǐng)求的方法。而http又是基于TCP/IP的應(yīng)用層通信協(xié)議趁猴。所以本質(zhì)上來說get和post請(qǐng)求是沒有區(qū)別的儡司,都是TCP鏈接捕犬。他們能做的事情也都是一樣的(與服務(wù)器進(jìn)行交互)碉碉。換言之:get能做的事,post也可以做蜡吧,反之亦可斩跌!
http協(xié)議提供這兩種方法耀鸦,也是在特定的情況下區(qū)分應(yīng)用:
1袖订、參數(shù)位置:get請(qǐng)求的參數(shù)是放在url(query)里面的。而POST請(qǐng)求的參數(shù)是放置在請(qǐng)求體(content)里面的楞艾。當(dāng)然post請(qǐng)求也是可以放置在url當(dāng)中的硫眯。
2两入、瀏覽器緩存:get請(qǐng)求可以被瀏覽器緩存裹纳,而post請(qǐng)求不能被緩存。
3她我、參數(shù)長度:get請(qǐng)求參數(shù)由于是在url里面番舆,所以會(huì)受到瀏覽器的長度限制,瀏覽器的不同長度的數(shù)值也不同禾怠,比如IE是2083字節(jié)返奉。理論上講,POST是沒有大小限制的吗氏。因?yàn)镠TTP協(xié)議規(guī)范沒有進(jìn)行大小限制芽偏。
4、參數(shù)安全性:同樣是因?yàn)間et的請(qǐng)求參數(shù)放置在url里弦讽,所以可見污尉,再加上會(huì)被瀏覽器緩存往产,所以安全性比較差被碗。post請(qǐng)求的參數(shù)是放置在請(qǐng)求體里,且不會(huì)被緩存仿村,所以安全性相對(duì)就好一些锐朴。
5、瀏覽器訪問:get請(qǐng)求可以通過瀏覽器直接訪問蔼囊,支持刷新和后退焚志。post請(qǐng)求是不能被瀏覽器直接訪問的,刷新后數(shù)據(jù)會(huì)重新傳送畏鼓。
6娩嚼、RESTful架構(gòu):在該架構(gòu)中g(shù)et扮演獲取數(shù)據(jù)的角色,而post扮演的是添加數(shù)據(jù)的角色滴肿。所以get對(duì)數(shù)據(jù)是無害的岳悟,不會(huì)對(duì)數(shù)據(jù)資源造成影響。而post使用不當(dāng)泼差,有可能對(duì)原有數(shù)據(jù)資源造成傷害贵少。