1. 程式人生 > >http中get,post,put,delete方法的用法以及區別

http中get,post,put,delete方法的用法以及區別

round 歷史記錄 情況 註意 http 就是 限制 長度限制 超過

http協議是一種在網絡中進行文件傳送遵循的協議。一種無狀態的協議、http協議服務器端不跟瀏覽器端建立長久的通信連接. 建立http通信之後,服務端將文件內容傳送給瀏覽器端接收就完成一次請求。當然一個頁面,往往由多個http請求構成、圖片,CSS等資源的請求~可能是一個頁面進行多個http請求之後得到的結果。

GET: 發送一個請求來取得服務器上的某一資源。資源通過一組HTTP頭和呈現據(如HTML文本,或者圖片或者視頻等)返回給客戶端.

POST: 向服務器提交數據.

最直觀的區別:

1).GET把參數包含在URL中,POST通過request body傳遞參數;

2).GET在瀏覽器回退時是無害的,而POST會再次提交請求;

3).GET產生的URL地址可以被Bookmark,而POST不可以;

4).GET請求會被瀏覽器主動cache,而POST不會,除非手動設置;

5). GET請求只能進行url編碼,而POST支持多種編碼方式;

6).GET請求參數會被完整保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留;

7).GET請求在URL中傳送的參數是有長度限制的,而POST沒有限制;

8). 對參數的數據類型,GET只接受ASCII字符,而POST沒有限制;

9).GET比POST更不安全,因為參數直接暴露在URL上,所以不能用來傳遞敏感信息;

本質區別:

首先GET和POST請求都是HTTP協議中的兩種發送請求的方法,而HTTP是基於TCP/IP的關於數據如何在萬維網中如何通信的協議,HTTP的底層是TCP/IP。所以GET和POST的底層也是TCP/IP,也就是說,GET/POST都是TCP鏈接。GET和POST能做的事情是一樣一樣的。你要給GET加上request body,給POST帶上url參數,技術上是完全行的通的。

1).雖然理論上GET和POST請求在使用上可以沒有區別,但是不同的瀏覽器(發起http請求)和服務器(接受http請求)會限制單次傳送數據了來控制風險,數據量太大對瀏覽器和服務器都是很大負擔。業界不成文的規定是,(大多數)瀏覽器通常都會限制url長度在2K個字節,而(大多數)服務器最多處理64K大小的url。超過的部分,恕不處理。如果你用GET服務,在request body偷偷藏了數據,不同服務器的處理方式也是不同的,有些服務器會幫你卸貨,讀出數據,有些服務器直接忽略,所以,雖然GET可以帶request body,也不能保證一定能被接收到.

2).GET產生一個TCP數據包;POST產生兩個TCP數據包;

對於GET方式的請求,瀏覽器會把http header和data一並發送出去,服務器響應200(返回數據);而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。因為POST需要兩步,時間上消耗的要多一點,看起來GET比POST更有效。因此Yahoo團隊有推薦用GET替換POST來優化網站性能。

GET和POST使用時註意:

1). GET與POST都有自己的語義,不能隨便混用。

2). 據研究,在網絡環境好的情況下,發一次包的時間和發兩次包的時間差別基本可以無視。而在網絡環境差的情況下,兩次包的TCP在驗證數據包完整性上,有非常大的優點。

3). 並不是所有瀏覽器都會在POST中發送兩次包,Firefox就只發送一次。

http中get,post,put,delete方法的用法以及區別