日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入【Get】与【Post】区别

發(fā)布時間:2024/8/26 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入【Get】与【Post】区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?區(qū)別:

GET請求在URL中傳送的參數(shù)是有長度限制的,而POST沒有。
GET比POST更不安全,因為參數(shù)直接暴露在URL上,所以不能用來傳遞敏感信息。而POST數(shù)據(jù)不會顯示在URL中。是放在Request body中。
對參數(shù)的數(shù)據(jù)類型,GET只接受ASCII字符,而POST沒有限制。
GET請求參數(shù)會被完整保留在瀏覽器歷史記錄里;相反,POST請求參數(shù)也不會被瀏覽器保留。
GET請求只能進行url編碼(application/x-www-form-urlencoded),而POST支持多種編碼方式。
GET請求會被瀏覽器主動緩存,而POST不會,除非手動設(shè)置。
GET在瀏覽器回退時是無害的,而POST會再次提交請求。

其實吧,GET和POST在本質(zhì)上沒有區(qū)別,都是HTTP協(xié)議中的兩種發(fā)送請求的方法。而HTTP呢,是基于TCP/IP的關(guān)于數(shù)據(jù)如何在萬維網(wǎng)中如何通信的協(xié)議。?

萬維網(wǎng):簡稱WWW,是World Wide Web的簡稱,也稱為Web、3W等。

HTTP的底層是TCP/IP。所以GET和POST的底層也是TCP/IP,也就是說,GET/POST都是TCP鏈接。

GET和POST能做的事情是一樣一樣的。你要給GET加上request body,給POST帶上url參數(shù),技術(shù)上是完全行的通的。?

舉個例子吧:

TCP就像汽車,我們用TCP來運輸數(shù)據(jù),它很可靠,從來不會發(fā)生丟件少件的現(xiàn)象。

但是如果路上跑的全是看起來一模一樣的汽車,那這個世界看起來是一團混亂,送急件的汽車可能被前面滿載貨物的汽車攔堵在路上,整個交通系統(tǒng)一定會癱瘓。

為了避免這種情況發(fā)生,交通規(guī)則HTTP誕生了。HTTP給汽車運輸設(shè)定了好幾個服務(wù)類別,包括GET, POST, PUT等等,

HTTP規(guī)定,當執(zhí)行GET請求的時候,要給汽車貼上GET的標簽(設(shè)置method為GET),而且要求把傳送的數(shù)據(jù)放在車頂上(url中)以方便記錄。

如果是POST請求,就要在車上貼上POST的標簽,并把貨物放在車廂里(request body中)。
HTTP只是個行為準則,而GET和POST本質(zhì)上就是TCP鏈接,并無差別。但是由于HTTP的規(guī)定和瀏覽器/服務(wù)器的限制,導(dǎo)致他們在應(yīng)用過程中體現(xiàn)出一些不同。

URL中傳送參數(shù)的長度限制在Get和Post中都是怎么樣的呢?

?

不同的瀏覽器Client端(發(fā)起http請求)和服務(wù)器server端(接受http請求)就是不同的運輸公司。

雖然理論上,你可以在車頂上無限的堆貨物(url中無限加參數(shù))。但是運輸公司可不傻,裝貨和卸貨也是有很大成本的,他們會限制單次運輸量來控制風險,數(shù)據(jù)量太大對瀏覽器和服務(wù)器都是很大負擔。

業(yè)界不成文的規(guī)定是,(大多數(shù))瀏覽器通常都會限制url長度在2K個字節(jié),而(大多數(shù))服務(wù)器最多處理64K大小的url。

超過的部分,恕不處理。如果你用GET服務(wù),在request body偷偷藏了數(shù)據(jù),不同服務(wù)器的處理方式也是不同的,有些服務(wù)器會幫你卸貨,讀出數(shù)據(jù),有些服務(wù)器直接忽略。


那GET 方法參數(shù)寫法是固定的嗎?

在約定中,我們的參數(shù)是寫在 ? 后面,用 & 分割。如下:

http://ip:port/project/getUserInfo?username=chenhhaha&age=26&sex=2

我們知道,解析報文的過程是通過獲取 TCP 數(shù)據(jù),用正則等工具從數(shù)據(jù)中獲取 Header 和 Body,從而提取參數(shù)。

比如header請求頭中添加token,來驗證用戶是否登錄等權(quán)限問題。

也就是說,我們可以自己約定參數(shù)的寫法,只要服務(wù)端能夠解釋出來就行,萬變不離其宗。

那么說來,是不是POST 方法比 GET 方法更安全呢?

有人說POST 比 GET 安全,因為數(shù)據(jù)在地址欄上不可見。

然而,從傳輸?shù)慕嵌葋碚f,他們都是不安全的,因為 HTTP 在網(wǎng)絡(luò)上是明文傳輸?shù)?#xff0c;只要在網(wǎng)絡(luò)節(jié)點上捉包,就能完整地獲取數(shù)據(jù)報文。

其實,要想安全傳輸,就只有加密,也就是 HTTPS。

你知道Get、Post請求發(fā)送的數(shù)據(jù)包有什么不同嗎?

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ù))。

?POST需要兩步,理論上時間上消耗的要多一點,看起來GET比POST更有效。但并不是,后來發(fā)現(xiàn)原來是個坑。在我看來:


GET與POST都有自己的語義,不能隨便混用。
據(jù)研究,在網(wǎng)絡(luò)環(huán)境好的情況下,發(fā)一次包的時間和發(fā)兩次包的時間差別基本可以無視。而在網(wǎng)絡(luò)環(huán)境差的情況下,兩次包的TCP在驗證數(shù)據(jù)包完整性上,有非常大的優(yōu)點。
并不是所有瀏覽器都會在POST中發(fā)送兩次包,Firefox就只發(fā)送一次。我去年用Chrome瀏覽器測試發(fā)現(xiàn)也是只發(fā)送一次,所以我認為Get、POST性能差可以人為忽略。

總結(jié)

以上是生活随笔為你收集整理的深入【Get】与【Post】区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。