HTTP方法的詳解

2021-09-14 05:18:25 字數 2311 閱讀 6714

get

get方法用來請求訪問已被url識別的資源

delete

從伺服器上刪除某些資源檔案

head

只想獲取伺服器返回的響應頭資訊(響應主體內容不需要獲取)

post

put 向伺服器中增加指定的資源檔案

不管是哪一種請求方式,客戶端都可以把資訊傳遞給伺服器,伺服器也可以把資訊返回給客戶端,只是get系列一般以獲取為主(給的少,拿的多)而post系列一般以推送為主(給的多,拿回來的少)

get和post系列請求,在專案在專案實戰中有很多區別

1 get傳遞給伺服器內容一般沒有post請求傳遞給伺服器的內容多

原因:get請求傳遞給伺服器內容一般都是基於url位址問號傳遞引數的,來實現的。而post請求一般都是基於『設定請求主體』來實現的。各大瀏覽器都有自己的最大url長度的限制(谷歌:8kb,火狐:7kb ie:2kb),超過限制長度的部分,瀏覽器會自動擷取,導致傳遞給伺服器的資料缺失

理論上post請求通過請求主體傳遞是沒有大小限制的。真實專案為了保證傳輸的速率,我們也會限制大小(比如,上傳或者資料我們都會做大小限制)

2 get請求很容易出現快取(這個快取不可控:一般我們都不需要),而post不會出現快取(除非自己做特殊處理,一般不會做)

原因:get是通過url問號傳參傳遞給伺服器資訊,而post設定請求主體

設定請求主體不會出現快取,而url就會

settime(()=>)

})

解決方案:

settime(()=>,很簡單,將替換為我們的blog名字,往這個uri傳送乙個http put或者post請求,http的body部分就是博文,這是乙個很簡單的rest api例子。我們應該用put方法還是post方法?取決於這個rest服務的行為是否是idempotent的,假如我們傳送兩個http://superblogging/blogs/post/sample請求,伺服器端是什麼樣的行為?如果產生了兩個部落格帖子,那就說明這個服務不是idempotent的,因為多次使用產生了***了嘛;如果後乙個請求把第乙個請求覆蓋掉了,那這個服務就是idempotent的。前一種情況,應該使用post方法,後一種情況,應該使用put方法

get和post的區別

get和post本質上就是tcp連線,沒有差別,但是由於http的規定和瀏覽器/伺服器的限定導致他們在應用過程中體現出一些不同

首先引入***和冪等的概念

***是指對伺服器上的資源做出改變,搜尋是無***的,註冊是有***的

冪等是指傳送m和n次請求(兩者不同都大於1),伺服器上的資源的狀態一直,比如註冊10個賬號和11個賬號是不冪等的,對文章進行更改10次和11次是冪等,因為前者多了乙個賬號(資源),後者只是更新同乙個資源

get,put,delete都是冪等操作,而post不是,以下進行分析:

首先get請求很好理解,對資源做查詢多次,此實現的結果都是一樣的。

put請求的冪等性可以這樣理解,將a修改為b,它第一次請求值變為了b,再進行多次此操作,最終的結果

還是b,與一次執行的結果是一樣的,所以put是冪等操作。

同理可以理解delete操作,第一次將資源刪除後,後面多次進行此刪除請求,最終結果是一樣的,將資源刪除掉了。

post不是冪等操作,因為一次請求新增乙份新資源,二次請求則新增了兩份新資源,多次請求會產生不同的結果,

因此post不是冪等操作。

在規範的應用上說get多用於無***,冪等的場景,例如搜尋關鍵了。post多用於***,不冪等的場景,例如註冊

get產生乙個資料報,post產生兩個資料報?

http協議中沒有明確說明post會產生兩個tcp資料報,而且實際測試發現,header和body不會分開傳送

所以header和body分開傳送只是部分瀏覽器和框架的請求方法,不屬於post必然行為

對於get方式,瀏覽器會把http header和data一併傳送出去,然後返回200

對於post來說,瀏覽器先傳送header,伺服器響應100 瀏覽器在傳送data。返回200

對染post需要兩步,開起來get更高效,但是不能用get來代替post來優化網路效能:

get請求能快取,post不能

post相對get安全一點點,因為get請求都包含在url中(當然你也可以寫在body裡面),且被瀏覽器儲存歷史記錄,post不會,但是在抓包的情況下都是一樣的

url長度限制,會影響get請求,但是這個是有瀏覽器規定的

因為get的請求都包含在url中,url無限長,對瀏覽器解析不友好。

post支援更多的編碼型別且不對資料型別限制

get只允許ascii post沒限制,也允許二進位制

HTTP請求方法詳解

get get方法意思是獲取被請求uri request uri 指定的資訊 以實體的格式 如果請求 uri涉及到乙個資料生成過程,那麼這個過程生成的資料應該被作為實體在響應中返回而不是 過程的源文字,除非源文字恰好是過程的輸出。如果請求訊息包含 if modified since,if unmod...

HTTP請求方法詳解

1 get獲取資源 用來請求已經被 uri所標識的資源 要查詢的內容需要用encodeurlcomponent 進行編碼 2 post傳輸實體文字在 uri所標識的資源後附加新的資料 3 head獲取報文首部 用來請求已經被 uri所標識的資源的響應訊息報頭 4 put傳輸檔案 傳輸檔案,要求在請求...

HTTP請求方法詳解

http請求方法詳解 請求方法 指定了客戶端想對指定的資源 伺服器作何種操作 下面我們介紹http 1.1中可用的請求方法 get 獲取資源 get方法用來請求已被uri識別的資源。指定的資源經伺服器端解析後返回響應內容 也就是說,如果請求的資源是文字,那就保持原樣返回 如果是cgi 通用閘道器介面...