(冪等:在編程中一個冪等操做的特色是其任意屢次執行所產生的影響均與一次執行的影響相同。)php
結論先行:GET 和POST 方法沒有本質區別,僅報文格式不一樣。html
GET和POST只是HTTP協議中的兩種請求方式,而HTTP協議是基於TCP/IP的應用層協議,不管GET仍是POST,用的都是同一個傳輸層協議,因此在傳輸上,沒有區別。編程
報文格式上:瀏覽器
//easy demo
GET /index.php?name=qiming.c&age=22 HTTP/1.1
Host: localhost
POST /index.php HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
name=qiming.c&age=22
複製代碼
兩種方法本質上是TCP鏈接,沒有差異。也就是說,不按規範來也能夠,能夠在URL上寫參數,而後用POST,也能夠在body上寫參數,而後方法用GET,固然,這須要服務端的支持。緩存
在約定中,通常咱們的參數是寫在 ? 後面,用 & 分割。安全
咱們知道,解析報文的過程是經過獲取 TCP 數據,用正則等工具從數據中獲取 Header 和 Body,從而提取參數。bash
也就是說,咱們能夠本身約定參數的寫法,只要服務端可以解釋出來就行,一種比較流行的寫法是這樣 :服務器
http://www.example.com/user/name/yourname/age/22
複製代碼
從傳輸的角度來講,他們都是不安全的,由於 HTTP 在網絡上是明文傳輸,只要在網絡節點上抓包,就能完整地獲取數據報文。網絡
要想安全傳輸,就只有加密,也就是 HTTPS。app
其實HTTP協議自己並無對URL和BODY的長度限制,對URL限制的大可能是瀏覽器和服務端本身限制的。
瀏覽器緣由就不說了,服務器是由於處理長 URL 要消耗比較多的資源,爲了性能和安全(防止惡意構造長 URL 來攻擊)考慮,會給 URL 長度加限制。
有些文章中提到,POST 請求會將 Header 和 Body 分開發送,先發送 Header,服務端返回 100 狀態碼再發送 Body。
HTTP 協議中也並無明確說明 POST 會產生兩個 TCP 數據包,並且實際測試(Chrome)發現,Header 和 Body 不會分開發送。
因此,Header 和 Body 分開發送是部分瀏覽器或框架的請求方法,不屬於 Post的必然行爲。