成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聽我講完GET、POST原理,面試官給我倒了杯卡布奇諾

開發 前端
我相信大家在不管是學習,工作或者面試中,肯定會碰到或被問到HTTP相關的知識,今天我們來聊聊有哪些HTTP請求方式,以及區別吧!

[[399731]]

大家好,我是狼王,一個愛打球的程序員

我相信大家在不管是學習,工作或者面試中,肯定會碰到或被問到HTTP相關的知識,今天我們來聊聊有哪些HTTP請求方式,以及區別吧!

小伙伴們寫過接口或者使用過網頁開發者模式的,肯定對以下的內容不陌生

沒錯,這些就是HTTP請求的方式

有一次面試的時候也被問到了這個問題,下面我會以面試的形式呈現給大家,那么就讓我把大家拉到面試的現場吧!

持續的腳步聲,由遠及近,隨之會議室的門被推開了,我起身定睛一看面試官,他那發際線即將觸碰到后腦勺,大框黑邊眼鏡也掩蓋不住那黝黑的眼圈,顯得格外的程序員,穿著也非常不拘一格,上半身是襯衣西服,下半身是牛仔褲配拖鞋。

[[399734]]

我心中的默念:真大佬,無疑了!

隨后面試官就讓我坐下,面試就正式拉開帷幕!

自我介紹以及其他問題此處省略1w字...

面試官:平時開發過程中,你們常用的HTTP請求方法都有哪些啊?

我:是這樣的,HTTP/1.1協議中共定義了八種方法,有時也叫動作,來表明Request-URL指定的資源不同的操作方式

  1. 在HTTP1.0中,定義了三種請求方法:GET, POST 和 HEAD方法。
  2. 在HTTP1.1中,新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT方法 但我們常用的一般就是GET和POST請求。

面試官:嗯,那你說說GET和POST請求都有哪些區別呢?(果然進套了,看你小子有幾斤幾兩)

[[399735]]

我:(我假裝被難住,然后思考了一會兒說)這個。。。沒有特別去關注過,但是按照我的理解,大概有這么幾種區別吧:

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

面試官心里:(沒關注過,那你還背的一條不差。跟我擱這兒裝杯呢?看我怎么教育你。)

[[399736]]

面試官:那Get請求有Request body么?如果有的話參數可以像Post請求一樣放在里面么?

:(吼吼,看來有機會把我昨天精心準備的東西給他扯半小時了[手動撓頭] 讓開,我要開始放大招了)

[[399737]]

其實吧,GET和POST在本質上沒有區別,都是HTTP協議中的兩種發送請求的方法。而HTTP呢,是基于TCP/IP的關于數據如何在萬維網中如何通信的協議。

  • 萬維網:簡稱WWW,是World Wide Web的簡稱,也稱為Web、3W等

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

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

舉個栗子吧:(嗯?栗子?好餓,待會兒面試完去買點)

[[399738]]

TCP就像汽車,我們用TCP來運輸數據,它很可靠,從來不會發生丟件少件的現象。

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

為了避免這種情況發生,交通規則HTTP誕生了。HTTP給汽車運輸設定了好幾個服務類別,包括GET, POST, PUT等等,

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

如果是POST請求,就要在車上貼上POST的標簽,并把貨物放在車廂里(request body中)。

當然,你也可以在用GET的時往車廂內偷偷藏點貨物,但這并不不光彩;也可以在POST的時候在車頂上也放一些數據,也會讓人覺得傻乎乎的。

[[399739]]

HTTP只是個行為準則,而GET和POST本質上就是TCP鏈接,并無差別。但是由于HTTP的規定和瀏覽器/服務器的限制,導致他們在應用過程中體現出一些不同。

面試官心里:(哎呀,這小子還真的了解這塊兒啊,看來是我誤會他了,難道遇到了大佬?)

[[399740]]

面試官:你說的不錯,那你剛才說的URL中傳送參數的長度限制在Get和Post中都是怎么樣的呢?

我:其實在Web中啊,還有另一個重要的角色:運輸公司。

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

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

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

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

所以,雖然GET可以帶request body,卻不能保證一定能被接收到。

面試官:(看來理論確實是掌握的不錯,讓我考考他實際應用)那GET 方法參數寫法是固定的嗎?

我:在約定中,我們的參數是寫在?后面,用&分割。就像下面這樣:

http://ip:port/test/getHelloWorld?username=langwang&age=26&sex=2

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

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

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

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

我:有人說POST 比 GET 安全,因為數據在地址欄上不可見。

然而,從傳輸的角度來說,他們都是不安全的,因為 HTTP 在網絡上是明文傳輸的,只要在網絡節點上捉包,就能完整地獲取數據報文。

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

面試官:嗯,不錯不錯,看來你對HTTP協議這塊兒還是有一定了解的,那么你知道Get、Post請求發送的數據包有什么不同嗎?

我:(看來這面試官是非要是把我問倒才滿意啊?可惜可惜。看我套路他一波)

面試官,實不相瞞,我上家公司加班比較多,最近剛簽完離職,貴公司是我面得第一家公司,所以準備的不充分,這樣吧,我大致談談我的理解吧,不對的地方您見諒。

面試官:沒關系,按你的理解聊聊就行。(這小子沒準備就說成這樣,我的好好考慮一下,別錯失了先機,失去一個能為公司加班的人才)

我:嗯嗯,是這樣的,GET請求時產生一個TCP數據包;POST請求時產生兩個TCP數據包。

  1. GET:瀏覽器會把http header和data一并發送出去,服務器響應200(返回數據);
  2. POST:瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 OK(返回數據)。

就像是GET只需要汽車跑一趟就把貨送到了,而POST得跑兩趟,第一趟,先去和服務器打個招呼老鐵,我等下要送一批貨來,你們準備接收一下哈,然后再回頭把貨送過去。

因為POST需要兩步,理論上時間上消耗的要多一點,看起來GET比POST更有效。但并不是,后來發現原來是個坑。在我看來:

  1. GET與POST都有自己的語義,不能隨便混用。
  2. 據研究,在網絡環境好的情況下,發一次包的時間和發兩次包的時間差別基本可以無視。而在網絡環境差的情況下,兩次包的TCP在驗證數據包完整性上,有非常大的優點。
  3. 并不是所有瀏覽器都會在POST中發送兩次包,Firefox就只發送一次。我去年用Chrome瀏覽器測試發現也是只發送一次,所以我認為Get、POST性能差可以人為忽略。

面試官:嗯,你說的很不錯,那你稍微等一下啊。

:(難道還有變故?這波操作難道被發現了我在套路面試官?不應該啊)

五分鐘后,面試官拿著一杯飲料走了進來。。。。

面試官:你嘗嘗這咖啡味道如何?(自古套路得人心,學好了)

我喝了一口,豎起大拇指說到:面試官,這是正宗的卡布奇諾啊,我平時就喜歡喝,可惜太貴了。。

咦?我進來之前沒有看到你們這有咖啡店呀,這是?

面試官嘴角上翹,微微一笑,露出了潔白的兩顆大門牙說到:

我看你簡歷說你愛喝咖啡,巧了,我們公司有專門的水吧,福利之一就是是每天免費一杯咖啡或飲料。以后你可以經常喝了。

我:那您的意思是,我面試過了是么,太好了!對了水吧每天幾點下班吶?跟開發一個點兒么?(不會是因為經常加班才免費喝咖啡吧,我得試探試探)

面試官:哈哈是啊,水吧一直都是按點下班,咱們公司如果有人加班的話,可以自己去水吧做著喝就行,加班時間都是免費的。你這兒沒問題的話,我看下周一就入職吧。

我:好的,面試官,我回去考慮下,到時候和您聯系,再見!

至此,本次關于HTTP請求方式,以及GET和POST的區別相關的面試就結束啦,感謝大家的觀看!

好了。今天就說到這了,我還會不斷分享自己的所學所想,希望我們一起走在成功的道路上!

 

責任編輯:姜華 來源: 狼王編程
相關推薦

2021-01-18 10:48:51

DockerRedisMySQL

2023-01-30 15:39:40

GETHTTP

2024-03-05 10:33:39

AOPSpring編程

2024-08-22 10:39:50

@Async注解代理

2025-03-07 00:00:10

2020-12-09 10:29:53

SSH加密數據安全

2023-08-02 08:48:11

C#碟片算法

2024-02-29 16:49:20

volatileJava并發編程

2020-09-07 06:28:37

Nginx靜態負載均衡動態負載均衡

2024-08-12 17:36:54

2023-12-27 18:16:39

MVCC隔離級別幻讀

2025-04-16 00:00:01

JWT客戶端存儲加密令

2024-08-29 16:30:27

2024-11-19 15:13:02

2020-04-23 14:09:13

URI挖坑前端

2020-07-22 08:05:44

中間人攻擊

2021-01-23 12:22:59

位運算編程語言開發

2024-03-28 10:37:44

IoC依賴注入依賴查找

2024-07-31 08:28:37

DMAIOMMap

2024-03-14 14:56:22

反射Java數據庫連接
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久国产精品精品国产色婷婷 | 亚洲最大的黄色网址 | 中文字幕在线一区二区三区 | 色播视频在线观看 | 国产丝袜一区二区三区免费视频 | 一区二区三区视频在线 | 久久综合av | 日韩一区二区黄色片 | 成人自拍视频 | 狠狠狠色丁香婷婷综合久久五月 | 免费看a| 福利二区 | av黄色在线观看 | 日本不卡一区 | 欧美日一区二区 | 日韩精品免费在线观看 | 日韩网站在线观看 | 亚洲日日| 一区二区三区在线 | 欧美视频三区 | 国产成人精品一区二区三区在线 | 国产免费观看久久黄av片涩av | 日韩影音| 亚洲视频在线看 | 黄色免费三级 | 秋霞电影一区二区 | 国产成人精品一区二区三区在线 | 精品国产一区二区三区成人影院 | 亚洲国产视频一区二区 | 精品自拍视频 | 亚洲人成在线播放 | 日本一区二区影视 | 久久久久久久97 | 欧美一区二区三区四区视频 | 国产xxx在线观看 | www.99精品 | 在线日韩福利 | 视频在线亚洲 | 成人一级黄色毛片 | 国产在线高清 | 欧美日韩黄色一级片 |