get請求和post請求的區別

2022-05-18 17:56:38 字數 1956 閱讀 2716

http最早被用來做瀏覽器與伺服器之間互動html和表單的通訊協議;後來又被被廣泛的擴充到介面格式的定義上。所以在討論get和post區別的時候,需要現確定下到底是瀏覽器使用的get/post還是用http作為介面傳輸協議的場景。

這裡特指瀏覽器中非ajax的http請求,即從html和瀏覽器誕生就一直使用的http協議中的get/post。瀏覽器用get請求來獲取乙個html頁面//css/js等資源;用post來提交乙個表單,並得到乙個結果的網頁。

get「讀取「乙個資源。比如get到乙個html檔案。反覆讀取不應該對訪問的資料有***。比如」get一下,使用者就下單了,返回訂單已受理「,這是不可接受的。這裡get沒有***被稱為「冪等「(idempotent)。

get因為是讀取,就可以對get請求的資料做快取。這個快取可以做到瀏覽器本身上(徹底避免瀏覽器發請求),也可以做到**上(如nginx),或者做到server端(協商快取,用etag,至少可以減少頻寬消耗)

post

在頁面裡標籤會定義乙個表單。點選其中的submit元素會發出乙個post請求讓伺服器做一件事。這件事往往是有***的,不是冪等的。

不冪等也就意味著不能隨意多次執行。因此也就不能快取。比如通過post下乙個單,伺服器建立了新的訂單,然後返回訂單成功的介面。這個頁面不能被快取。試想一下,如果post請求被瀏覽器快取了,那麼下單請求就可以不向伺服器發請求,而直接返回本地快取的「下單成功介面」,卻又沒有真的在伺服器下單。那是一件多麼滑稽的事情。

當然,伺服器的開發者完全可以把get實現為有***;把post實現為沒有***。只不過這和瀏覽器的預期不符。

get和post攜帶資料的格式也有區別。當瀏覽器發出乙個get請求時,就意味著要麼是使用者自己在瀏覽器的位址列輸入,要不就是點選了html裡a標籤的href中的url。所以其實並不是get只能用url,而是瀏覽器直接發出的get只能由乙個url觸發。所以沒辦法,get上要在url之外帶一些引數就只能依靠url上附帶querystring。但是http協議本身並沒有這個限制。

瀏覽器的post請求都來自表單提交。每次提交,表單的資料被瀏覽器用編碼到http請求的body裡。

瀏覽器在post乙個表單時,url上也可以帶引數,只要裡的url帶querystring就行。不過表單裡面的那些用等標籤經過使用者操作產生的資料會在body裡。

因此一般會說「get請求沒有body,只有url,請求資料放在url的querystring中;post請求的資料在body中「,但這種情況僅限於瀏覽器發請求的場景。

從http協議本身看,並沒有什麼限制說get一定不能沒有body,post就一定不能把參放到的querystring上。因此其實可以更加自由的去利用格式,只要請求的客戶端和伺服器端能夠約定好。

get請求的引數更傾向於放在url上,因此有更多機會被洩漏。比如攜帶私密資訊的url會展示在位址列上,還可以分享給第三方,就非常不安全了。此外,從客戶端到伺服器端,有大量的中間節點,包括閘道器,**等。他們的access log通常會輸出完整的url,比如nginx的預設access log就是如此。如果url上攜帶敏感資料,就會被記錄下來。但就算私密資料在body裡,也是可以被記錄下來的,因此如果請求要經過不信任的公網,避免洩密的唯一手段就是https

如果是用作介面,get實際上也可以帶body,post也可以在url上攜帶資料。所以實際上到底怎麼傳輸私密資料,要看具體場景具體分析。當然,絕大多數場景,用post + body裡寫私密資料是合理的選擇。get產生乙個tcp資料報,post產生兩個tcp資料報

對於get方式的請求,瀏覽器會把http header和data一併傳送出去,伺服器響應200(返回資料);

而對於post,瀏覽器先傳送header,伺服器響應100 continue,瀏覽器再傳送data,伺服器響應200 ok(返回資料)。

原文:

Get請求和Post請求區別

1.提交的資料型別 get為文字 post為文字和二進位制資料 2.提交的資料長度 get不超過255個字元 post沒有限制 3.提交資料的可見性 get作為url的一部分顯示在位址列裡 post作為請求的訊息體不可見 4.緩衝 get緩衝在瀏覽器url歷史狀態中 post不會被緩衝 5.表單中 ...

get請求和post請求區別

http請求方式有get post put delete等多種,最常用的就是get和post 多種請求方式 1 get請求一般用去請求獲取資料,post一般作為傳送資料到後台時使用2 get請求也可傳參到後台,但是其引數在瀏覽器的位址列的url中可見,所以私隱性安全性較差,且引數長度也是有限制的 p...

get請求和post請求的區別

使用http協議將客戶端的請求傳送到伺服器端有哪兩種方式?請簡述它們的區別 1 get是從伺服器上獲取資料,post是向伺服器傳送資料。2 在客戶端,get方式在通過url提交資料,資料在url中可以看到 post方式,資料放置在html header內提交。3 對於get方式,伺服器端用reque...