超文字傳輸協議(http)的設計目的是保證客戶端與伺服器之間的通訊。
http 的工作方式是客戶端與伺服器之間的請求-應答協議。
在客戶機和伺服器之間進行請求-響應時,兩種最常被用到的方法是:get 和 post。
get-從指定的資源請求資料。用於請求伺服器傳送某個資源。(查詢)
post-向指定的資源提交要被處理的資料。用於向伺服器提交資料,比如完成表單資料的提交,將資料提交給伺服器處理。(修改)
get請求的資料會附在url之後(就是把資料放置在http協議頭中),以?分割url和傳輸資料,引數之間以&相連,如:
login.action?name=admin&password=123456&verify=%e4%bd%a0%e5%a5%bd
如果資料是英文本母或數字,則原樣傳送;如果是空格,轉換為+;如果是中文或其他字元,則直接把字串用base64加密,得出如:%e4%bd%a0%e5%a5%bd,其中%xx中的xx為該符號以16進製表示的ascii碼值。
使用get方法時,瀏覽器會快取你的位址等資訊,留下歷史記錄和cookie。
get是安全(安全僅僅指非修改資訊)的。僅僅是獲取資源資訊,就像資料庫查詢一樣,不會修改和增加資料,不會影響資源的狀態。
get是冪等的。冪等是指對同乙個url的多個請求應該返回同樣的結果。
post 是將表單中的資料放在 form 的資料體中,按照變數和值相對應的方式,傳遞到 action 所指向 url。
post請求方式是既不冪等又不安全,首先post請求方式往資料庫中提交資料的,因此會改變資料庫中的資料。其次,post請求方式每次獲得的結果都有可能不一樣,因為post請求是作用在上一級的url上的,則每一次請求都會新增乙份新資源(這也是post和put方式的最大區別,put方式是冪等的)。
如果乙個方法重複執行多次,產生的效果是一樣的,那就是idempotent的。在http中,put被定義為idempotent的方法,post則不是。
乙個部落格系統提供乙個web api,模式是 http://superblogging/blogs/post/ 。很簡單,將替換為我們的blog名字,往這個uri傳送乙個http put或者post請求,http的body部分就是博文,這是乙個很簡單的rest api例子。我們應該用put方法還是post方法?取決於這個rest服務的行為是否是idempotent的,假如我們傳送兩個http://superblogging/blogs/post/sample請求,伺服器端是什麼樣的行為?如果產生了兩個部落格帖子,那就說明這個服務不是idempotent的,因為多次使用產生了***;如果後乙個請求把第乙個請求覆蓋掉了,那這個服務就是idempotent的。前一種情況,應該使用post方法,後一種情況,應該使用put方法。
參考:
我的實習日誌 2
7.9 今天是實習開始的第八天,今天老師繼續給我們複習 c語言的知識,在內容上也加深了一步,讓我們徹底感到絕望,c語言真的忘得差不多了。像巨集定義 define 不過巨集定義命名時,盡量能夠清晰的表明其用途!還講了許多表示式和基本語句,if,while for 等迴圈語句的使用,還有就是 int,c...
日誌中的HTTP狀態碼都代表什麼?
作seo時,我們經常會在日誌上看到類似這樣的 這裡面需要知道的,就是那個奇怪的數字 200 另外那個數字表示抓取的檔案大小 200 就是http狀態碼。成功2 成功處理了請求的狀態碼。200 伺服器已成功處理了請求並提供了請求的網頁。204 伺服器成功處理了請求,但沒有返回任何內容。重定向3 每次請...
日誌中的HTTP狀態碼都代表什麼?
作seo時,我們經常會在日誌上看到類似這樣的 這裡面需要知道的,就是那個奇怪的數字 200 另外那個數字表示抓取的檔案大小 200 就是http狀態碼。seo過程中最常見的http狀態碼有 其他經常碰到的http狀態碼列表如下 http狀態碼 摘要說明 成功2 成功處理了請求的狀態碼。200 伺服器...