get 和 post

(整理自網(wǎng)絡(luò))

GET和POST是什么明刷?HTTP協(xié)議中的兩種發(fā)送請求的方法。

HTTP是什么魁兼?HTTP是基于TCP/IP的關(guān)于數(shù)據(jù)如何在萬維網(wǎng)中如何通信的協(xié)議何恶。

HTTP的底層是TCP/IP。所以GET和POST的底層也是TCP/IP哼拔,也就是說引有,GET/POST都是TCP鏈接。GET和POST能做的事情是一樣一樣的管挟。你要給GET加上request body轿曙,給POST帶上url參數(shù),技術(shù)上是完全行的通的僻孝。

1导帝、GET用于信息獲取,而且應(yīng)該是安全的和冪等的穿铆。

安全:該操作用于獲取信息而非修改信息您单。換句話說,GET 請求一般不應(yīng)產(chǎn)生副作用荞雏。就是說虐秦,它僅僅是獲取資源信息,就像數(shù)據(jù)庫查詢一樣凤优,不會修改悦陋,增加數(shù)據(jù),不會影響資源的狀態(tài)筑辨。

冪等:對同一URL的多個請求應(yīng)該返回同樣的結(jié)果俺驶。(比如,新聞?wù)军c的頭版不斷更新棍辕。雖然第二次請求會返回不同的一批新聞暮现,該操作仍然被認(rèn)為是安全的和冪等的还绘,因為它總是返回當(dāng)前的新聞。從根本上說栖袋,如果目標(biāo)是當(dāng)用戶打開一個鏈接時拍顷,他可以確信從自身的角度來看沒有改變資源即可。)

2塘幅、POST表示可能修改變服務(wù)器上的資源的請求昔案。

讀者對新聞發(fā)表自己的評論應(yīng)該通過POST實現(xiàn),因為在評論提交后站點的資源已經(jīng)不同了晌块,或者說資源被修改了爱沟。

GET和POST的區(qū)別:

雖然本質(zhì)上是一樣的帅霜,但是由于HTTP的規(guī)定和瀏覽器/服務(wù)器的限制匆背,導(dǎo)致他們在應(yīng)用過程中體現(xiàn)出一些不同。

GET在瀏覽器回退時是無害的身冀,而POST會再次提交請求钝尸。

GET產(chǎn)生的URL地址可以被Bookmark,而POST不可以搂根。

GET請求會被瀏覽器主動cache珍促,而POST不會,除非手動設(shè)置剩愧。

GET請求只能進(jìn)行url編碼猪叙,而POST支持多種編碼方式。

GET請求參數(shù)會被完整保留在瀏覽器歷史記錄里仁卷,而POST中的參數(shù)不會被保留穴翩。

GET請求在URL中傳送的參數(shù)是有長度限制的,而POST么有锦积。

對參數(shù)的數(shù)據(jù)類型芒帕,GET只接受ASCII字符,而POST沒有限制丰介。

GET比POST更不安全背蟆,因為參數(shù)直接暴露在URL上,所以不能用來傳遞敏感信息哮幢。

GET參數(shù)通過URL傳遞带膀,POST放在Request body中。

解釋:

1橙垢、GET請求的數(shù)據(jù)會附在URL之后(就是把數(shù)據(jù)放置在HTTP協(xié)議頭中)垛叨,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連钢悲,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD点额。如果數(shù)據(jù)是英文字母/數(shù)字舔株,原樣發(fā)送,如果是空格还棱,轉(zhuǎn)換為+载慈,如果是中文/其他字符,則直接把字符串用BASE64加密珍手,得出如:%E4%BD%A0%E5%A5%BD办铡,其中%XX中的XX為該符號以16進(jìn)制表示的ASCII。

POST把提交的數(shù)據(jù)則放置在是HTTP包的包體中琳要。

2寡具、GET方式提交的數(shù)據(jù)最多只能是1024字節(jié),理論上POST沒有限制稚补,可傳較大量的數(shù)據(jù)童叠。(GET有限制是因為放在URL中,URL不存在參數(shù)上限的問題课幕,HTTP協(xié)議規(guī)范沒有對URL長度進(jìn)行限制厦坛。這個限制是特定的瀏覽器及服務(wù)器對它的限制。)

3乍惊、在ASP中杜秸,服務(wù)端獲取GET請求參數(shù)用Request.QueryString,獲取POST請求參數(shù)用Request.Form润绎。

4撬碟、POST的安全性要比GET的安全性高。注意:這里所說的安全性和上面GET提到的“安全”不是同個概念莉撇。上面“安全”的含義僅僅是不作數(shù)據(jù)修改呢蛤,而這里安全的含義是真正的Security的含義,比如:通過GET提交數(shù)據(jù)稼钩,用戶名和密碼將明文出現(xiàn)在URL上顾稀,因為(1)登錄頁面有可能被瀏覽器緩存,(2)其他人查看瀏覽器的歷史紀(jì)錄坝撑,那么別人就可以拿到你的賬號和密碼了静秆,除此之外,使用GET提交數(shù)據(jù)還可能會造成Cross-site request forgery攻擊巡李。

一個易忽略的區(qū)別(面試加分項)

GET產(chǎn)生一個TCP數(shù)據(jù)包抚笔;POST產(chǎn)生兩個TCP數(shù)據(jù)包。

解釋:

GET:瀏覽器會把http header和data一并發(fā)送出去侨拦,服務(wù)器響應(yīng)200(返回數(shù)據(jù))殊橙;

POST:瀏覽器先發(fā)送header,服務(wù)器響應(yīng)100 continue,瀏覽器再發(fā)送data膨蛮,服務(wù)器響應(yīng)200 ok(返回數(shù)據(jù))叠纹。

也就是說,GET只需要汽車跑一趟就把貨送到了敞葛,而POST得跑兩趟誉察,第一趟,先去和服務(wù)器打個招呼“嗨惹谐,我等下要送一批貨來持偏,你們打開門迎接我”,然后再回頭把貨送過去氨肌。

因為POST需要兩步鸿秆,時間上消耗的要多一點,看起來GET比POST更有效怎囚。因此Yahoo團(tuán)隊有推薦用GET替換POST來優(yōu)化網(wǎng)站性能卿叽。但這是一個坑!跳入需謹(jǐn)慎桩了。為什么附帽?

1. GET與POST都有自己的語義,不能隨便混用井誉。

2. 在網(wǎng)絡(luò)環(huán)境好的情況下,發(fā)一次包的時間和發(fā)兩次包的時間差別基本可以無視整胃。而在網(wǎng)絡(luò)環(huán)境差的情況下颗圣,兩次包的TCP在驗證數(shù)據(jù)包完整性上,有非常大的優(yōu)點屁使。

3. 并不是所有瀏覽器都會在POST中發(fā)送兩次包在岂,F(xiàn)irefox就只發(fā)送一次。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛮寂,一起剝皮案震驚了整個濱河市蔽午,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酬蹋,老刑警劉巖及老,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異范抓,居然都是意外死亡骄恶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門匕垫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來僧鲁,“玉大人,你說我怎么就攤上這事∧海” “怎么了斟叼?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長春寿。 經(jīng)常有香客問我犁柜,道長,這世上最難降的妖魔是什么堂淡? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任馋缅,我火速辦了婚禮,結(jié)果婚禮上绢淀,老公的妹妹穿的比我還像新娘萤悴。我一直安慰自己,他們只是感情好皆的,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布覆履。 她就那樣靜靜地躺著,像睡著了一般费薄。 火紅的嫁衣襯著肌膚如雪硝全。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天楞抡,我揣著相機(jī)與錄音伟众,去河邊找鬼。 笑死召廷,一個胖子當(dāng)著我的面吹牛凳厢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播竞慢,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼先紫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了筹煮?” 一聲冷哼從身側(cè)響起遮精,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎败潦,沒想到半個月后本冲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡变屁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年眼俊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粟关。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡疮胖,死狀恐怖环戈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情澎灸,我是刑警寧澤院塞,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站性昭,受9級特大地震影響拦止,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糜颠,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一汹族、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧其兴,春花似錦顶瞒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匀归,卻和暖如春坑资,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背穆端。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工袱贮, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人徙赢。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓字柠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親狡赐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • 大家在面試時一般都會都被問到post和get有什么區(qū)別钦幔,肯定很多同學(xué)都會和我一樣想到一大堆什么post比get安全...
    胡自鮮閱讀 823評論 0 3
  • GET和POST是HTTP請求的兩種基本方法鲤氢,要說它們的區(qū)別搀擂,接觸過WEB開發(fā)的人都能說出一二。 最直觀的區(qū)別就是...
    王閑森閱讀 1,245評論 2 21
  • GET和POST是HTTP請求的兩種基本方法卷玉,要說它們的區(qū)別哨颂,接觸過WEB開發(fā)的人都能說出一二。 最直觀的區(qū)別就是...
    hello大象閱讀 237評論 0 0
  • GET和POST是HTTP請求的兩種基本方法相种,要說它們的區(qū)別威恼,接觸過WEB開發(fā)的人都能說出一二。 最直觀的區(qū)別就是...
    zgsddzwj閱讀 473評論 0 2
  • 轉(zhuǎn)自微信公眾號WebTechGarden GET和POST是HTTP請求的兩種基本方法,要說他們的區(qū)別箫措,接觸過WE...
    汪斗斗閱讀 960評論 1 4