回覆列表
-
1 # 使用者1837478923255
-
2 # 使用者3114586111456
一、區別與應用: Form中的get和post方法,在資料傳輸過程中分別對應了HTTP協議中的GET和POST方法。
二者主要區別如下: 1、Get是用來從伺服器上獲得資料,而Post是用來向伺服器上傳遞資料。2、Get將表單中資料的按照variable=value的形式,新增...
POST和GET是不同的。
GET有如下幾個特點:
請求不應帶有請求體,伺服器應忽略/丟棄GET請求的請求體。GET介面不具有副作用。語義上,用於“讀取資源”。POST請求有如下特點:
POST介面不需要具有冪等性,請求方不應假設該介面具有冪等性。語義上,用於改寫/新建資源。POST具有create/update的語義,因此常被用於實現類似於“遠端過程呼叫”的目的。這麼做並不違反語義,畢竟linux下這麼玩的多了去了。
POST可以攜帶請求體,並且根據語義來說POST需要有請求體,沒有的話也是“建立空資源/將資源改寫為空”的語義。
POST不應被假設為具有冪等性,因此伺服器端常用這種方式告訴請求方,POST請求不能隨意重發,除非響應中明確要求重發(比如3xx)。
問“為什麼不用POST代替GET”是沒有意義的,就像“為什麼不用寫代替讀”一樣沒有意義。
和POST類似的請求是PUT,這兩者語義上實際是重合的,惟一的區別是,
PUT介面具有冪等性。這就對PUT作出了更嚴格的限制。
顯然通常而言我們更喜歡冪等的介面,但是有些時候我們也需要做一些不那麼trivial的事情。所以非冪等介面也是有存在的必要的。
不過冪等的POST介面也不一定非要改成PUT,具體是什麼,最終還是由語義決定的。
這些並不是約定,這些就是HTTP協議的一部分,只有雙方都遵守協議才能愉快得玩耍。比如說,你自己實現TCP client也可以不遵守TCP協議對序列號和ACK的規定,畢竟你想怎麼寫就怎麼寫嘛,但是,我們管這叫,bug。
同理,
具有副作用的GET handler,是bug。
GET請求發請求體的,是bug。
伺服器不丟棄GET的請求體的,是bug。