關於post與get的詳細總結
近日,對爬蟲的使用增多,總結在日常使用中的一些問題,其中get與post的問題是最需要重點總結的。
首先,在以往的使用經驗中,get與post是最常用的兩種請求方式,最直觀的區別就是get會將參數放在url中嗎,而post通過requestbody傳遞參數,
此外,GET可後退,可刷新,可收藏,可以保存在瀏覽器的歷史記錄,以及服務器的日誌中,同時GET只允許ASCII字符,因此需要進行轉碼,同時,最重要
的是GET長度有限制,最大長度為2K,而POST並沒有長度的限制,
有以上的認知所得,日常使用中,post相對於get更加安全,然而真正的http中卻並不是我所以為的。
無論是get請求還是post請求,其對服務器的請求在根本上都是根據tcp協議進行通信的,因此,在網絡通信中,無論是GET還是POST,他們做的事都是一
樣的,即GET也可以打上Request Body,POST也可以帶上URL參數。因此,get與post的區別到底是如何生產的?
查閱資料之後發現,HTML標準中有如下定義,但是這是http標準對於http協議的用法的約定,並不能當作get與POST的區別
在URL長度上進行限制主要是以下兩個原因造成的,
1.瀏覽器,早期的ie瀏覽器會對url長度進行限制,這項限制並不是只針對GET,而是針對所有請求的url,然而現在的瀏覽器並不會對長度進行限制,但是對url進行長度限制已經成為了習慣
2.服務器,當URL長度過長的時候,對服務器也是很大的消耗,因此大部分的服務器為了安全考慮,都會對url長度進行限制,這個限制也是針對url,對
GET和POST並沒有區別。
到此,GET與POST的區別難道真的只是獲取數據和提交數據的區別嗎,在上網查閱資料之後,發現GET和POST在底層還是有一些區別的:
GET請求只會產生一個數據包,而POST會產生兩個數據包,第一個數據包和服務器建立鏈接,服務器回復100,然後瀏覽器再次發送第二個數據包。在網絡情況好的情況下,這兩種在網絡通信上無論是速度還是數據的完整性並沒有是明確區別,但是在網絡不好的時候,使用POST可以更好的保護數據的完整性。
最後需要註意的是並不是所有的瀏覽器的POST都會發送兩次數據包, Firefox的POST就只會發送一次數據包
關於post與get的詳細總結