# HTTP 請求方法requests method(POST、GET、PUT、PATCH、DELETE、OPTIONS、HEAD) ###### tags: `restful api` `AJAX` Method Idempotent解說請參考([restful api 串接 0](https://hackmd.io/nYwH9-OiSXWzVrlSZH8uWw)) | HTTP | Method Idempotent | Safe | | :-- | :-- |:--:| | POST| no |no| | GET | yes | yes | | PUT| yes |no| | PATCH| no |no| | DELETE| yes |no| | OPTIONS| yes |yes| | HEAD| yes |yes| w3schools [HTTP Request Methods](https://www.w3schools.com/tags/ref_httpmethods.asp) 對以上七種Methods解說 ### POST **POST is used to send data to a server to create/update a resource.** The data sent to the server with POST is stored in the request body of the HTTP request: ``` POST /test/demo_form.php HTTP/1.1 Host: w3schools.com name1=value1&name2=value2 ``` **POST is one of the most common HTTP methods.** **Some other notes on POST requests:** * POST requests are never cached * POST requests do not remain in the browser history * POST requests cannot be bookmarked * POST requests have no restrictions on data length **POST用於新建/更新data到server 傳送到server的data是存在http請求者端身上** * POST requests 不會放在緩存資料裡 * POST requests 不保存在瀏覽器歷史紀錄 * POST requests 無法添加到書籤 * POST requests 對數據長度沒有限制 MDZ [HTTP requests](https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Methods/POST) 進一步解說 A POST request is typically sent via an HTML form and results in a change on the server. In this case, the content type is selected by putting the adequate string in the enctype attribute of the <form> element or the formenctype attribute of the <input> or <button> elements: POST request 通常通過HTML表單發送,並導致服務器資料被修改.通過將適當的字符串放在<form><input> or <button> 元素的編碼型別,來選擇內容類型. ### GET **GET is used to request data from a specified resource.** **GET is one of the most common HTTP methods.** Note that the query string (name/value pairs) is sent in the URL of a GET request: `/test/demo_form.php?name1=value1&name2=value2` **Some other notes on GET requests:** * GET requests can be cached * GET requests remain in the browser history * GET requests can be bookmarked * GET requests should never be used when dealing with sensitive data * GET requests have length restrictions * GET requests are only used to request data (not modify) GET requests 通常用於從指定資源請求數據 請注意,查詢字符串(名稱/值對)是在GET請求的URL中發送的: * GET requests 可以被緩存 * GET requests 保存在瀏覽器記錄歷史中 * GET requests 可以添加到書籤 * GET requests 不該使用於處理敏感資料 * GET requests 有長度限制 * GET requests 僅用於請求數據(不可修改) ### PUT **PUT is used to send data to a server to create/update a resource.** The difference between POST and PUT is that PUT requests are idempotent. That is, calling the same PUT request multiple times will always produce the same result. In contrast, calling a POST request repeatedly have side effects of creating the same resource multiple times. PUT用於將數據發送到伺服器以建立/更新資源 POST和PUT之間的區別在於PUT請求是冪等的。 也就是說,多次調用相同的PUT請求將始終產生相同的結果。 相反,重複調用POST請求具有多次創建相同資源的副作用。 POST和PUT都可以更新伺服器資源,更改指定URI的語義,但更改方式不同 以電腦資料更新方式來舉例 **POST**:在資料夾裡面新增一個新的檔案,來達到新增目的.所以calling a POST request repeatedly have side effects of creating the same resource multiple times.重複調用POST請求具有多次創建相同資源的副作用。 PUT:從A點複製一份,覆蓋掉B點原有資料,因為A還是=B,不管操作幾次複製貼上,A和B都是一樣,結果不變的,所以PUT是冪等的. ### PATCH 修改部分功能 ### [GET vs. POST](https://www.w3schools.com/tags/ref_httpmethods.asp) 比較 | | GET | **POST** | | :-- | :-- | :-- | | BACK button/Reload| Harmless |Data will be re-submitted (the browser should alert the user that the data are about to be re-submitted)| | Bookmarked| Can be bookmarked |Cannot be bookmarked| | Cached| Can be cached |Not cached| | Encoding type| noapplication/x-www-form-urlencoded |application/x-www-form-urlencoded or multipart/form-data. Use multipart encoding for binary data| | History| Parameters remain in browser history |Parameters are not saved in browser history| | Restrictions on data length| Yes, when sending data, the GET method adds the data to the URL; and the length of a URL is limited (maximum URL length is 2048 characters)|No restrictions| | Restrictions on data type| Only ASCII characters allowed |No restrictions. Binary data is also allowed| | Security| GET is less secure compared to POST because data sent is part of the URL Never use GET when sending passwords or other sensitive information! |POST is a little safer than GET because the parameters are not stored in browser history or in web server logs| | Visibility| Data is visible to everyone in the URL |Data is not displayed in the URL| | | GET | **POST** | | :-- | :-- | :-- | | 上一步按鈕/重整| 無害 |數據將被重新提交(瀏覽器應警告用戶數據將被重新提交)| | 加入書籤| 可以加入書籤 |不可加入書籤| | 緩存| 可以緩存 |不可緩存| | 編碼方式| noapplication/x-www-form-urlencoded |application/x-www-form-urlencoded or multipart/form-data. 對二進制數據使用分段編碼| | 歷史紀錄| 參數保留在瀏覽器歷史記錄中 |參數不保留在瀏覽器歷史記錄中| | 數據長度限制| 是的,在發送數據時,GET methods將數據添加到URL。 並且網址的長度受到限制(最大網址長度為2048個字符)|無限制| | 數據類型限制| 只允許使用ASCII字符 |無限制。 二進制數據也被允許| | 安全性| 與POST相比,GET的安全性較差,因為發送的數據是URL的一部分,在發送密碼或其他敏感信息時切勿使用GET! |POST比GET安全一些,因為參數未存儲在瀏覽器歷史記錄或Web服務器日誌中| | 能見性| 網址中的所有人都可以看到數據 |數據未顯示在URL中|