<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          GET 和 POST請求的本質(zhì)區(qū)別是什么?原來我一直理解錯了

          共 2667字,需瀏覽 6分鐘

           ·

          2022-01-23 01:33

          點擊關(guān)注公眾號,Java干貨及時送達(dá)

          作者:在途中

          來源:cnblogs.com/logsharing/p/8448446.html



          GET和POST是HTTP請求的兩種基本方法,要說它們的區(qū)別,接觸過WEB開發(fā)的人都能說出一二。

          最直觀的區(qū)別就是GET把參數(shù)包含在URL中,POST通過request body傳遞參數(shù)。
          你可能自己寫過無數(shù)個GET和POST請求,或者已經(jīng)看過很多權(quán)威網(wǎng)站總結(jié)出的他們的區(qū)別,你非常清楚知道什么時候該用什么。
          當(dāng)你在面試中被問到這個問題,你的內(nèi)心充滿了自信和喜悅。
          你輕輕松松的給出了一個“標(biāo)準(zhǔ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中。

          (本標(biāo)準(zhǔn)答案參考自w3schools)
          “很遺憾,這不是我們要的回答!”
          請告訴我真相。。。
          如果我告訴你GET和POST本質(zhì)上沒有區(qū)別你信嗎?
          讓我們扒下GET和POST的外衣,坦誠相見吧!
          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ù)上是完全行的通的。
          那么,“標(biāo)準(zhǔn)答案”里的那些區(qū)別是怎么回事?
          在我大萬維網(wǎng)世界中,TCP就像汽車,我們用TCP來運輸數(shù)據(jù),它很可靠,從來不會發(fā)生丟件少件的現(xiàn)象。但是如果路上跑的全是看起來一模一樣的汽車,那這個世界看起來是一團混亂,送急件的汽車可能被前面滿載貨物的汽車攔堵在路上,整個交通系統(tǒng)一定會癱瘓。
          為了避免這種情況發(fā)生,交通規(guī)則HTTP誕生了。HTTP給汽車運輸設(shè)定了好幾個服務(wù)類別,有GET, POST, PUT, DELETE等等,HTTP規(guī)定,當(dāng)執(zhí)行GET請求的時候,要給汽車貼上GET的標(biāo)簽(設(shè)置method為GET),而且要求把傳送的數(shù)據(jù)放在車頂上(url中)以方便記錄。如果是POST請求,就要在車上貼上POST的標(biāo)簽,并把貨物放在車廂里。
          當(dāng)然,你也可以在GET的時候往車廂內(nèi)偷偷藏點貨物,但是這是很不光彩;也可以在POST的時候在車頂上也放一些數(shù)據(jù),讓人覺得傻乎乎的。HTTP只是個行為準(zhǔn)則,而TCP才是GET和POST怎么實現(xiàn)的基本。
          但是,我們只看到HTTP對GET和POST參數(shù)的傳送渠道(url還是requrest body)提出了要求。“標(biāo)準(zhǔn)答案”里關(guān)于參數(shù)大小的限制又是從哪來的呢?



          在我大萬維網(wǎng)世界中,還有另一個重要的角色:運輸公司。不同的瀏覽器(發(fā)起http請求)和服務(wù)器(接受http請求)就是不同的運輸公司。雖然理論上,你可以在車頂上無限的堆貨物(url中無限加參數(shù))。
          但是運輸公司可不傻,裝貨和卸貨也是有很大成本的,他們會限制單次運輸量來控制風(fēng)險,數(shù)據(jù)量太大對瀏覽器和服務(wù)器都是很大負(fù)擔(dān)。業(yè)界不成文的規(guī)定是,(大多數(shù))瀏覽器通常都會限制url長度在2K個字節(jié),而(大多數(shù))服務(wù)器最多處理64K大小的url。
          超過的部分,恕不處理。如果你用GET服務(wù),在request body偷偷藏了數(shù)據(jù),不同服務(wù)器的處理方式也是不同的,有些服務(wù)器會幫你卸貨,讀出數(shù)據(jù),有些服務(wù)器直接忽略,所以,雖然GET可以帶request body,也不能保證一定能被接收到哦。
          好了,現(xiàn)在你知道,GET和POST本質(zhì)上就是TCP鏈接,并無差別。但是由于HTTP的規(guī)定和瀏覽器/服務(wù)器的限制,導(dǎo)致他們在應(yīng)用過程中體現(xiàn)出一些不同。
          我們的大BOSS還等著出場呢。。。
          這位BOSS有多神秘?當(dāng)你試圖在網(wǎng)上找“GET和POST的區(qū)別”的時候,那些你會看到的搜索結(jié)果里,從沒有提到他。他究竟是什么呢。。。
          GET和POST還有一個重大區(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團隊有推薦用GET替換POST來優(yōu)化網(wǎng)站性能。但這是一個坑!跳入需謹(jǐn)慎。為什么?
          1. GET與POST都有自己的語義,不能隨便混用。
          2. 據(jù)研究,在網(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ā)送一次。
          現(xiàn)在,當(dāng)面試官再問你“GET與POST的區(qū)別”的時候,你的內(nèi)心是不是這樣的?


          1、刪除知名開源庫跑路,神秘Bug影響超2萬個項目
          2、Windows11竟然推送1968年的驅(qū)動?
          3、全中國一共有多少 IP 地址?
          4、Windows重要功能被閹割,全球用戶怒噴數(shù)月后微軟終于悔改
          5、牛逼!國產(chǎn)開源的遠(yuǎn)程桌面火了,只有9MB 支持自建中繼器!
          6、摔到老三的 Java,未來在哪?
          7、真香!用 IDEA 神器看源碼,效率真高!

          點分享

          點收藏

          點點贊

          點在看

          瀏覽 37
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美日韩黄 | 三级网站成人 | 青草天堂网 | 人人人人人人草 | 国产骚逼小黄片 |