get和post的联系与区别
get和post是什么?HTTP協(xié)議中的兩種發(fā)送請(qǐng)求的方法。
那么他們有什么區(qū)別呢?
在web開(kāi)發(fā)時(shí),我們可以很直觀的看到他們的區(qū)別:
1.get將參數(shù)放入U(xiǎn)RL中,而post則通過(guò)request body傳遞參數(shù)
2.get比post更不安全,因?yàn)閰?shù)直接暴露在URL上,所以不能用來(lái)傳遞敏感信息。
3.get請(qǐng)求參數(shù)會(huì)被完整保留在瀏覽器歷史記錄里,而post中的參數(shù)不會(huì)被保留。
4.get請(qǐng)求在URL中傳送的參數(shù)是有長(zhǎng)度限制的,而post沒(méi)有。
?
其實(shí)他們?cè)诒举|(zhì)上并沒(méi)有什么區(qū)別,接下來(lái)我們來(lái)講講原因:
開(kāi)始的時(shí)候我們說(shuō)過(guò),GET和POST是HTTP協(xié)議中的兩種發(fā)送請(qǐng)求的方法。
而HTTP基于TCP/IP的關(guān)于數(shù)據(jù)如何在萬(wàn)維網(wǎng)中如何通信的協(xié)議。
HTTP的底層是TCP/IP。所以GET和POST的底層也是TCP/IP,也就是說(shuō),GET/POST都是TCP鏈接。
所以如果給get加上request body,給post加上url參數(shù),是可行的。
接下來(lái)舉一個(gè)例子:
tcp就好比是交通工具--汽車(chē),用來(lái)運(yùn)送東西,但是如此多的汽車(chē)十分混亂,那我們需要進(jìn)行分類(lèi),制定了分類(lèi)規(guī)則:交通規(guī)則HTTP,我們的分類(lèi)有:小汽車(chē),公交車(chē),貨車(chē)等等。
我們把get貼在汽車(chē)身上,然后把參數(shù)放在小汽車(chē)的頭頂(因?yàn)間et請(qǐng)求參數(shù)是可見(jiàn)的),然后把post請(qǐng)求貼在貨車(chē)身上,把參數(shù)放在貨車(chē)車(chē)廂內(nèi)(因?yàn)椴豢梢?jiàn))。但是這是一個(gè)準(zhǔn)則,如果你違背準(zhǔn)則,把貨車(chē)車(chē)廂內(nèi)的參數(shù)放一些在貨車(chē)車(chē)頂,雖然看起來(lái)很奇怪,但也是可以的。
所以get和post本質(zhì)上就是TCP鏈接,并無(wú)差別。但是由于HTTP的規(guī)定和瀏覽器/服務(wù)器的限制,導(dǎo)致他們?cè)趹?yīng)用過(guò)程中體現(xiàn)出一些不同。
?
get和post還有一個(gè)很大的區(qū)別:get產(chǎn)生一個(gè)TCP數(shù)據(jù)包;post產(chǎn)生兩個(gè)TCP數(shù)據(jù)包。
對(duì)于get方式的請(qǐng)求,瀏覽器會(huì)把 http header和參數(shù)一起傳出去,只傳一次。
對(duì)應(yīng)post方式的請(qǐng)求,瀏覽器會(huì)傳兩次,第一次傳http header,第二次再傳遞參數(shù)
就好比是先傳http header告訴對(duì)方我要傳數(shù)據(jù)了,然后再傳遞參數(shù)。
因此可以看出來(lái),get的性能高一些,但是同樣的,在網(wǎng)絡(luò)不好的情況下,post更可靠,可以驗(yàn)證數(shù)據(jù)包完整性
?
參考自:https://blog.csdn.net/ever_siyan/article/details/87935455
總結(jié)
以上是生活随笔為你收集整理的get和post的联系与区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: statement的增删改查和动态的增删
- 下一篇: 【剑指offer】面试题52:两个链表的