HTTP请求方式和幂等性
http請求方式
1.什么是冪等性 (post如何保證明冪等性大問題)
冪等性概念:冪等通俗來說是指不管進行多少次重復操作,都是實現(xiàn)相同的結(jié)果。
2.REST請求中哪些是冪等操作
GET,PUT,DELETE都是冪等操作,而POST不是,以下進行分析:
首先GET請求很好理解,對資源做查詢多次,此實現(xiàn)的結(jié)果都是一樣的。
PUT請求的冪等性可以這樣理解,將A修改為B,它第一次請求值變?yōu)榱薆,再進行多次此操作,最終的結(jié)果還是B,與一次執(zhí)行的結(jié)果是一樣的,所以PUT是冪等操作。
同理可以理解DELETE操作,第一次將資源刪除后,后面多次進行此刪除請求,最終結(jié)果是一樣的,將資源刪除掉了。
POST不是冪等操作,因為一次請求添加一份新資源,二次請求則添加了兩份新資源,多次請求會產(chǎn)生不同的結(jié)果,因此POST不是冪等操作。
3.根據(jù)冪等性區(qū)分POST與PUT的使用
了解REST后很長一段時間不能明確區(qū)分PUT和POST的區(qū)別,在使用時很容易混淆,完全可根據(jù)idempotent(冪等性)做區(qū)分。
舉一個簡單的例子,假如有一個博客系統(tǒng)提供一個Web API,模式是這樣http://superblogging/blogs/{blog-name},很簡單,將{blog-name}替換為我們的blog名字,往這個URI發(fā)送一個HTTP PUT或者POST請求,HTTP的body部分就是博文,這是一個很簡單的REST API例子。
4.我們應(yīng)該用PUT方法還是POST方法?
取決于這個REST服務(wù)的行為是否是idempotent的,假如我們發(fā)送兩個http://superblogging/blogs/post/Sample請求,服務(wù)器端是什么樣的行為?如果產(chǎn)生了兩個博客帖子,那就說明這個服務(wù)不是idempotent的,因為多次使用產(chǎn)生了副作用了嘛;如果后一個請求把第一個請求覆蓋掉了,那這個服務(wù)就是idempotent的。前一種情況,應(yīng)該使用POST方法,后一種情況,應(yīng)該使用PUT方法。
5.get與post請求的區(qū)別,post的安全性體現(xiàn)在那里,是否可以發(fā)現(xiàn)他的請求內(nèi)容
1.GET和POST本質(zhì)上都是TCP鏈接,所以它們本質(zhì)上并沒有區(qū)別
2.GET和POST有一個重大區(qū)別:GET產(chǎn)生一個TCP數(shù)據(jù)包;POST產(chǎn)生兩個TCP數(shù)據(jù)包。但并不是所有瀏覽器都會在POST中發(fā)送兩次包,Firefox就只發(fā)送一次。
3.GET和POST的最直觀區(qū)別是:GET把參數(shù)包含在URL中,POST通過request body傳遞參數(shù)。
6.GET和POST表面上的區(qū)別:
① get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù)。
get 和 post只是一種傳遞數(shù)據(jù)的方式,get也可以把數(shù)據(jù)傳到服務(wù)器,他們的本質(zhì)都是發(fā)送請求和接收結(jié)果。只是組織格式和數(shù)據(jù)量上面有差別
② get是把參數(shù)數(shù)據(jù)隊列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)各個字段一一對應(yīng),在URL中可以看到。post是通過HTTP post機制,將表單內(nèi)各個字段與其內(nèi)容放置在HTML HEADER內(nèi)一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
③ 對于get方式,服務(wù)器端用Request.QueryString獲取變量的值,對于post方式,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)。
④ get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。 post基本沒有限制。
⑤ get安全性非常低,post安全性較高。 因為參數(shù)直接暴露在URL上,所以不建議使用get請求來傳遞敏感信息。
⑥ GET在瀏覽器回退時是無害的,而POST會再次提交請求。
⑦GET請求只能進行url編碼,而POST支持多種編碼方式。
⑧ GET請求會被瀏覽器主動緩存,而POST不會,除非手動設(shè)置。GET請求參數(shù)會被完整保留在瀏覽器歷史記錄里,而POST中的參數(shù)不會被保留
⑨ GET請求在URL中傳送的參數(shù)是有長度限制的,而POST沒有。對參數(shù)的數(shù)據(jù)類型,GET只接受ASCII字符,而POST沒有限制。
7.Post為什么安全
我認為post,更安全一些,因為get傳輸方式將在URL中顯示參數(shù),更容易引發(fā)一些“不懷好意”人的興趣,例如上邊出現(xiàn)了username和userpwd等特殊字符時,更容易給他們一些興趣。雖然可以編碼,當是也是可以解碼的。而post則對方看不見,即使一些高手截獲這些信息,也需要它篩選還有解碼,相對來說比get方法更加安全。當然是沒有絕對的安全的。
HTTP協(xié)議中提到GET是安全的方法(safe method),其意思是說GET方法不會改變服務(wù)器端數(shù)據(jù),所以不會產(chǎn)生副作用。如果是該用POST的地方用了GET,又說GET不安全,那GET也太冤枉了。也就是說,只要我們正確選擇使用GET和POST,那么GET是安全的。
其實沒啥安全不安全的,如果針對前端安全 xss csrf等來講,post確實比前者安全。如果從tcp協(xié)議上來講,http都是明文,都裸著的
總結(jié)
以上是生活随笔為你收集整理的HTTP请求方式和幂等性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用连接linux的工具,收藏必备
- 下一篇: 【经典算法实现 14】阿克曼函数(手动推