post大小限制_作为一个程序员,面试中常问的get和post的区别,你真的知道吗
作為一個程序員無論是搞前端的還是搞后端的,只要問起來GET和POST的區別,都能說出來個一二三四來。
你可能自己寫過無數個GET和POST請求,或者也看過很多權威網站總結出來的區別,你非常清楚的知道什么時候用GET什么時候用POST.
當你在面試的過程中被問到這個問題的時候,你的內心里肯定充滿了小得意,這面試問題問的也太簡單了,so easy
順口說出了權威的答案:
- GET在瀏覽器回退時是無害的,而POST會再次提交請求。
- GET產生的URL地址可以被Bookmark,而POST不可以。
- GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
- GET請求只能進行url編碼,而POST支持多種編碼方式。
- GET請求參數會被完整保留在瀏覽器歷史記錄里,而POST中的參數不會被保留。
- GET請求在URL中傳送的參數是有長度限制的,而POST么有。
- 對參數的數據類型,GET只接受ASCII字符,而POST沒有限制。
- GET比POST更不安全,因為參數直接暴露在URL上,所以不能用來傳遞敏感信息。
- GET參數通過URL傳遞,POST放在Request body中。
(備注:答案參考來自w3schools)
不過遺憾的是,這不是我們想要的回答!
那么真相是什么呢?真相就是GET和post本質上是沒有區別的,是不是不相信,那么讓我扒下GET和post的外衣,坦誠相見吧!
get和post是什么,是HTTP協議中的兩種發送請求的方法,HTTP是萬維網中的通信協議,HTTP的底層是TCP/IP。同理get和post底層也是,也就是說get和post都是TCP連接,
get和post的功能是一模一樣的,你要給get加上request body,post帶上url參數,從技術角度來說是一樣的
那么標準答案的區別是怎么回事呢?
在我大萬維網世界中,TCP就像汽車,我們用TCP來運輸數據,它很可靠,從來不會發生丟件少件的現象。但是如果路上跑的全是看起來一模一樣的汽車,那這個世界看起來是一團混亂,送急件的汽車可能被前面滿載貨物的汽車攔堵在路上,整個交通系統一定會癱瘓。為了避免這種情況發生,交通規則HTTP誕生了。HTTP給汽車運輸設定了好幾個服務類別,有GET, POST, PUT, DELETE等等,HTTP規定,當執行GET請求的時候,要給汽車貼上GET的標簽(設置method為GET),而且要求把傳送的數據放在車頂上(url中)以方便記錄。如果是POST請求,就要在車上貼上POST的標簽,并把貨物放在車廂里。當然,你也可以在GET的時候往車廂內偷偷藏點貨物,但是這是很不光彩;也可以在POST的時候在車頂上也放一些數據,讓人覺得傻乎乎的。HTTP只是個行為準則,而TCP才是GET和POST怎么實現的基本。
但是,我們只看到HTTP對GET和POST參數的傳送渠道(url還是requrest body)提出了要求。“標準答案”里關于參數大小的限制又是從哪來的呢?
在我大萬維網世界中,還有另一個重要的角色:運輸公司。不同的瀏覽器(發起http請求)和服務器(接受http請求)就是不同的運輸公司。 雖然理論上,你可以在車頂上無限的堆貨物(url中無限加參數)。但是運輸公司可不傻,裝貨和卸貨也是有很大成本的,他們會限制單次運輸量來控制風險,數據量太大對瀏覽器和服務器都是很大負擔。業界不成文的規定是,(大多數)瀏覽器通常都會限制url長度在2K個字節,而(大多數)服務器最多處理64K大小的url。超過的部分,恕不處理。如果你用GET服務,在request body偷偷藏了數據,不同服務器的處理方式也是不同的,有些服務器會幫你卸貨,讀出數據,有些服務器直接忽略,所以,雖然GET可以帶request body,也不能保證一定能被接收到哦。
好了,現在你知道,GET和POST本質上就是TCP鏈接,并無差別。但是由于HTTP的規定和瀏覽器/服務器的限制,導致他們在應用過程中體現出一些不同。
你以為本文就這么結束了?
這次剛剛開始,當你在網上找get和post的區別的時候,有沒有提到get和post一個重大區別,就是get產生一個數據包,post產生兩個數據包。
直白的說就是get方法請求時瀏覽器會把http header和data一起發送出去,然后服務器返回數據,而post請求時先發送header在發送data,需要發送兩次才會成功,理論上post消耗時間多一點,看起來get比post更加高效,所以雅虎團隊推薦實用get替換post來優化網站性能,但是這貌似是個坑,為什么呢?
1、get和post都有自己的語義,每個方法存在都是有他的意義的,
2、據某大佬研究,在網絡良好的情況下,發送一次數據包和兩次數據包的情況幾乎時一樣的,只有在網絡情況差的情況下兩次數據包在完整性的驗證上有點非常大。
3、并不是在所有的瀏覽器中post都發送兩次數據包,Firefox就發送一次。
看到現在,以后當面試官再問你get和post的區別的時候,你的內心是不是這樣的?
注:以上部分內容來源于網絡
總結
以上是生活随笔為你收集整理的post大小限制_作为一个程序员,面试中常问的get和post的区别,你真的知道吗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 参数 携带 跳转_微信小程序:页面跳转及
- 下一篇: qchart画完以后删除_冬天的夜晚很难