兩種 HTTP 請求方法:GET 和 POST
在客戶機和服務器之間進行請求-響應時,兩種最常被用到的方法是:GET 和 POST。
- GET?- 從指定的資源請求數據。
- POST?- 向指定的資源提交要被處理的數據
GET 方法
請注意,查詢字符串(名稱/值對)是在 GET 請求的 URL 中發送的:
/test/demo_form.asp?name1=value1&name2=value2
有關 GET 請求的其他一些注釋:
- GET 請求可被緩存
- GET 請求保留在瀏覽器歷史記錄中
- GET 請求可被收藏為書簽
- GET 請求不應在處理敏感數據時使用
- GET 請求有長度限制
- GET 請求只應當用于取回數據
POST 方法
請注意,查詢字符串(名稱/值對)是在 POST 請求的 HTTP 消息主體中發送的:
POST /test/demo_form.asp HTTP/1.1 Host: w3schools.com name1=value1&name2=value2
有關 POST 請求的其他一些注釋:
- POST 請求不會被緩存
- POST 請求不會保留在瀏覽器歷史記錄中
- POST 不能被收藏為書簽
- POST 請求對數據長度沒有要求
如果我告訴你,你死記硬背的這些所謂“標準答案”不是面試官想要的,你肯定不服,首先從安全性講,get和post都一樣,沒啥所謂的哪個更安全
get請求參數在url地址上,直接暴露,post請求的參數放body部分,按F12也直接暴露了,所以沒啥安全性可言
“GET參數通過URL傳遞,POST放在Request body中”這個其實也不準,post請求也可以沒body,也可以在url傳遞呢?
如果我告訴你get請求和post請求本質上沒區別,你肯定不信!
GET和POST有一個重大區別,簡單的說:
GET產生一個TCP數據包;POST產生兩個TCP數據包。
長的說:
對于GET方式的請求,瀏覽器會把http header和data一并發送出去,服務器響應200(返回數據);
而對于POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。
比較 GET 與 POST
下面的表格比較了兩種 HTTP 方法:GET 和 POST。
? | GET | POST |
---|---|---|
后退按鈕/刷新 | 無害 | 數據會被重新提交(瀏覽器應該告知用戶數據會被重新提交)。 |
書簽 | 可收藏為書簽 | 不可收藏為書簽 |
緩存 | 能被緩存 | 不能緩存 |
編碼類型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。為二進制數據使用多重編碼。 |
歷史 | 參數保留在瀏覽器歷史中。 | 參數不會保存在瀏覽器歷史中。 |
對數據長度的限制 | 是的。當發送數據時,GET 方法向 URL 添加數據;URL 的長度是受限制的(URL 的最大長度是 2048 個字符)。 | 無限制。 |
對數據類型的限制 | 只允許 ASCII 字符。 | 沒有限制。也允許二進制數據。 |
安全性 | 與 POST 相比,GET 的安全性較差,因為所發送的數據是 URL 的一部分。 在發送密碼或其他敏感信息時絕不要使用 GET ! | POST 比 GET 更安全,因為參數不會被保存在瀏覽器歷史或 web 服務器日志中。 |
可見性 | 數據在 URL 中對所有人都是可見的。 | 數據不會顯示在 URL 中。 |
其他 HTTP 請求方法
下面的表格列出了其他一些 HTTP 請求方法:
方法 | 描述 |
---|---|
HEAD | 與 GET 相同,但只返回 HTTP 報頭,不返回文檔主體。 |
PUT | 上傳指定的 URI 表示。 |
DELETE | 刪除指定資源。 |
OPTIONS | 返回服務器支持的 HTTP 方法。 |
CONNECT | 把請求連接轉換到透明的 TCP/IP 通道。 |