網絡基礎查缺補漏及實際應用思考:HTTP + GET POST + cookie session token

今天又是划水長知識的一天。。。

在知乎看了些網絡基礎知識,我個人看到問題回答不充分的點貼出來了,小夥伴可以一起查缺補漏:

 

HTTP相關

爲什麼客戶端發出第四次揮手的確認報文後要等2MSL的時間才能釋放TCP連接?

這裏同樣是要考慮丟包的問題,如果第四次揮手的報文丟失,服務端沒收到確認ack報文就會重發第三次揮手的報文,這樣報文一去一回最長時間就是2MSL,所以需要等這麼長時間來確認服務端確實已經收到了。

如果已經建立了連接,但是客戶端突然出現故障了怎麼辦?

TCP設有一個保活計時器,客戶端如果出現故障,服務器不能一直等下去,白白浪費資源。服務器每收到一次客戶端的請求後都會重新復位這個計時器,時間通常是設置爲2小時,若兩小時還沒有收到客戶端的任何數據,服務器就會發送一個探測報文段,以後每隔75秒鐘發送一次。若一連發送10個探測報文仍然沒反應,服務器就認爲客戶端出了故障,接着就關閉連接。


GET POST

GET和POST區別

說道GET和POST,就不得不提HTTP協議,因爲瀏覽器和服務器的交互是通過HTTP協議執行的,而GET和POST也是HTTP協議中的兩種方法。

HTTP全稱爲Hyper Text Transfer Protocol,中文翻譯爲超文本傳輸協議,目的是保證瀏覽器與服務器之間的通信。HTTP的工作方式是客戶端與服務器之間的請求-應答協議。

HTTP協議中定義了瀏覽器和服務器進行交互的不同方法,基本方法有4種,分別是GET,POST,PUT,DELETE。這四種方法可以理解爲,對服務器資源的查,改,增,刪。

  • GET:從服務器上獲取數據,也就是所謂的查,僅僅是獲取服務器資源,不進行修改。
  • POST:向服務器提交數據,這就涉及到了數據的更新,也就是更改服務器的數據。
  • PUT:英文含義是放置,也就是向服務器新添加數據,就是所謂的增。
  • DELETE:從字面意思也能看出,這種方式就是刪除服務器數據的過程。

GET和POST區別

  1. Get是不安全的,因爲在傳輸過程,數據被放在請求的URL中;Post的所有操作對用戶來說都是不可見的。 但是這種做法也不時絕對的,大部分人的做法也是按照上面的說法來的,但是也可以在get請求加上 request body,給 post請求帶上 URL 參數。
  2. Get請求提交的url中的數據最多隻能是2048字節,這個限制是瀏覽器或者服務器給添加的,http協議並沒有對url長度進行限制,目的是爲了保證服務器和瀏覽器能夠正常運行,防止有人惡意發送請求。Post請求則沒有大小限制。
  3. Get限制Form表單的數據集的值必須爲ASCII字符;而Post支持整個ISO10646字符集。
  4. Get執行效率卻比Post方法好。Get是form提交的默認方法。
  5. GET產生一個TCP數據包;POST產生兩個TCP數據包。

對於GET方式的請求,瀏覽器會把http header和data一併發送出去,服務器響應200(返回數據);
而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。

 

cookie session token 

什麼是cookie

cookie是由Web服務器保存在用戶瀏覽器上的小文件(key-value格式),包含用戶相關的信息。客戶端向服務器發起請求,如果服務器需要記錄該用戶狀態,就使用response向客戶端瀏覽器頒發一個Cookie。客戶端瀏覽器會把Cookie保存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給服務器。服務器檢查該Cookie,以此來辨認用戶身份。

什麼是session

session是依賴Cookie實現的。session是服務器端對象

session 是瀏覽器和服務器會話過程中,服務器分配的一塊儲存空間。服務器默認爲瀏覽器在cookie中設置 sessionid,瀏覽器在向服務器請求過程中傳輸 cookie 包含 sessionid ,服務器根據 sessionid 獲取出會話中存儲的信息,然後確定會話的身份信息。

cookie與session區別

  • 存儲位置與安全性:cookie數據存放在客戶端上,安全性較差,session數據放在服務器上,安全性相對更高;
  • 存儲空間:單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie,session無此限制
  • 佔用服務器資源:session一定時間內保存在服務器上,當訪問增多,佔用服務器性能,考慮到服務器性能方面,應當使用cookie。

什麼是Token

Token的引入:Token是在客戶端頻繁向服務端請求數據,服務端頻繁的去數據庫查詢用戶名和密碼並進行對比,判斷用戶名和密碼正確與否,並作出相應提示,在這樣的背景下,Token便應運而生。

Token的定義:Token是服務端生成的一串字符串,以作客戶端進行請求的一個令牌,當第一次登錄後,服務器生成一個Token便將此Token返回給客戶端,以後客戶端只需帶上這個Token前來請求數據即可,無需再次帶上用戶名和密碼。

使用Token的目的:Token的目的是爲了減輕服務器的壓力,減少頻繁的查詢數據庫,使服務器更加健壯。

Token 是在服務端產生的。如果前端使用用戶名/密碼向服務端請求認證,服務端認證成功,那麼在服務端會返回 Token 給前端。前端可以在每次請求的時候帶上 Token 證明自己的合法地位

session與token區別

  • session機制存在服務器壓力增大,CSRF跨站僞造請求攻擊,擴展性不強等問題;
  • session存儲在服務器端,token存儲在客戶端
  • token提供認證和授權功能,作爲身份認證,token安全性比session好;
  • session這種會話存儲方式方式只適用於客戶端代碼和服務端代碼運行在同一臺服務器上,token適用於項目級的前後端分離(前後端代碼運行在不同的服務器下)

以上內容出自知乎:https://zhuanlan.zhihu.com/p/141396896


—————— 我是分界線 ——————

思考

1. 當接口數據量巨大的時候用get請求做GZIP壓縮,post就不可以。

2. 保護接口信息不被發現的話可以客戶端加時間戳、加密、再base64。例如:http"//www.x.com/5687983568/fdfdas -> 加密 -> base64。

3.想到了再補充。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章