Get和Post是什麼?
HTTP定義了與服務器交互的不同方法,最常用的方法有四種Put,Delete、post,get,即增刪改查。
1.Get,它用於獲取信息,它只是獲取、查詢數據,也就是說它不會修改服務器上的數據,從這點來講,它是數據安全的,而稍後會提到的Post它是可以修改數據的,所以這也是兩者差別之一了。
2.Post,它是可以向服務器發送修改請求,從而修改服務器的,比方說,我們要在論壇上回貼、在博客上評論,這就要用到Post了,當然它也是可以僅僅獲取數據的。
3.Delete 刪除數據。可以通過Get/Post來實現。用的不多。
4.Put,增加、放置數據,可以通過Get/Post來實現。用的不多。
Get和Post的區別是什麼?
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 是什麼?它們是 HTTP請求協議的請求方法。
HTTP 又是基於TCP/IP的關於數據如何在萬維網中如何通信的協議。
所以 GET/POST 實際上都是 TCP 鏈接。
也就是說,GET和 POST 所做的事其實是一樣的,如果你給 GET 加上請求數據,給 POST 加上 URL 參數,這在技術上是完全可行的,事實上確實有一些人為了貪圖方便在更新資源時用了GET,因為用POST必須要到FORM(表單),這樣會麻煩一點(但是強烈不建議這樣子做!!!)。
既然 GET 和 POST 的底層都是 TCP,那麼為什麼 HTTP 還要特別將它們區分出來呢?
其實可以想象一下,如果我們直接使用 TCP 進行數據的傳輸,那麼無論是單純獲取資源的請求還是修改服務器資源的請求在外觀上看起來都是 TCP 鏈接,這樣就非常不利於進行管理。所以在 HTTP 協議中,就會對這些不同的請求設置不同的類別進行管理,例如單純獲取資源的請求就規定為 GET、修改服務器資源的請求就規定為 POST,並且也對它們的請求報文的格式做出了相應的要求(例如請求參數 GET 位於 URL 而 POST 則位於請求數據中)。
當然,如果我們想將 GET 的請求參數放置在請求數據中或者將 POST 的請求數據放置在 URL 中,這是完全可以的,雖然這樣子做並不符合 HTTP 的規範。但是這樣子做是否能得到我們期望的響應數據呢?答案是未必,這取決於服務器的行為。
以 GET 方法在請求數據中放置請求參數為例,有些服務器會將請求數據中的參數讀出,在這種情況下我們依然能獲得我們期望的響應數據;而有些服務器則會選擇直接忽略,這種情況下我們就無法獲取期望的響應數據了。
所以,對於 GET 和 POST 的區別,總結來說就是:它們的本質都是 TCP 鏈接,並無區別。但是由於 HTTP 的規定以及瀏覽器/服務器的限制,導致它們在應用過程中可能會有所不同。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/275299.html