POST和GET的區別?
POST和GET是什么?
POST和GET是HTTP請求的兩種方式,都可實現將數據從瀏覽器向服務器發送帶參數的請求。
HTTP請求底層協議都是TCP/IP,所以兩者沒有本質的區別。
HTTP
HTTP是什么
HTTP:超文本傳輸協議。所有的WWW文件都必須遵守這個標准。
HTTP向服務器發送請求是TCP連接。HTTP服務器收到請求后向客戶端返回一個狀態行 比如“HTTP/1.1 200 OK”和
HTTP請求的組成
HTTP由四部分組成:
- 請求行(request line):用於說明請求類型、要訪問的資源路徑、HTTP版本號(GET /index.html HTTP/1.1)
- 請求頭部(header):用於說明服務器要使用的附加信息
- 一個空行
- 請求數據(body):任意添加的數據
【圖1.1 HTTP請求結構 圖片來自https://www.runoob.com/http/http-messages.html】
eg:
GET /books/?sex=man&name=Professional HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
這里是空行
------------------------------------------------------------------------------
POST /index.html HTTP/1.1 請求方法 url 協議/版本號 Host: localhost 主機地址 User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 發送請求的應用程序名稱 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,zh;q=0.5 通知服務端可以發送的語言 Accept-Encoding: gzip, deflate 通知服務端可以發送的數據壓縮格式 Connection: keep-alive Referer: <a target=_blank href="http://localhost/" style="color: rgb(51, 102, 153); text-decoration: none;">http://localhost/</a> Content-Length:25 Content-Type:application/x-www-form-urlencoded 請求空行 標志着請求頭結束,請求正文(請求體)的開始 username=aa&password=1234
GET方法
GET是獲取的意思,顧名思義就是獲取信息。
GET是默認的HTTP請求方法。
GET方法把參數通過key/value形式存放在URL里面,如果參數是英文數字原樣顯示,如果是中文或者其他字符加密(Base64)URL長度一般有限制所以GET方法的參數長度不能太長。由於參數顯示再地址欄所以不安全,一般需要保密的請求不使用GET。
POST方法
POST是郵件的意思,顧名思義就像一封信一樣將參數放在信封里面傳輸。它用於修改服務器上的數據,一般這些數據是應該保密的,就像信件一樣,信的內容只能收信的人看見。例入當用戶輸入賬號和密碼登錄時賬號和密碼作為參數通過HTTP請求傳輸到服務器,這時候肯定不能用GET方法將賬號密碼直接顯示再URL上,這時候就應該用POST方法保證數據的保密性。
POST和GET的區別
- GET提交的數據放在URL中,POST則不會。這是最顯而易見的差別。這點意味着GET更不安全(POST也不安全,因為HTTP是明文傳輸抓包就能獲取數據內容,要想安全還得加密)
- GET回退瀏覽器無害,POST會再次提交請求(GET方法回退后瀏覽器再緩存中拿結果,POST每次都會創建新資源)
- GET提交的數據大小有限制(是因為瀏覽器對URL的長度有限制,GET本身沒有限制),POST沒有
- GET可以被保存為書簽,POST不可以。這一點也能感受到。
- GET能被緩存,POST不能
- GET只允許ASCII字符,POST沒有限制
- GET會保存再瀏覽器歷史記錄中,POST不會。這點也能感受到。
總之,兩者之間沒有本質區別,區別就在於數據存儲的位置。各自有適用環境,根據需求選擇合適的方法即可。
還有哪些HTTP請求方法
GET和POST是最常用的HTTP請求方式。還有其他的請求方式。我沒用過其他的,我只說我知道的把。以后遇到了再補充。
- PUT:
- HEAD
- DELETE
- ...