參考文獻(xiàn)
http://android.jobbole.com/85218/
http://www.w3school.com.cn/tags/html_ref_httpmethods.asp
https://www.zhihu.com/question/28586791
總是被問及get和post的區(qū)別,感覺每個(gè)人的回答都有些許不同.借此機(jī)會(huì)把相關(guān)的知識(shí)和要點(diǎn)進(jìn)行一些總結(jié).
HTTP請(qǐng)求
要講到get和post的區(qū)別,首先需要對(duì)http請(qǐng)求的相關(guān)知識(shí)有一定的理解.
什么是HTTP
HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于從萬維網(wǎng)(WWW:World Wide Web )服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。
最常見的一個(gè)HTTP請(qǐng)求就是我們打開瀏覽器輸入一個(gè)網(wǎng)址,這樣的操作就是一個(gè)標(biāo)準(zhǔn)的get請(qǐng)求過程,瀏覽器請(qǐng)求url地址的內(nèi)容,呈現(xiàn)給終端用戶進(jìn)行展示.
HTTP請(qǐng)求的傳送過程

借用他人的圖片,其中很詳細(xì)的闡述了一次http請(qǐng)求傳送過程的7個(gè)步驟.只有在建立連接之后才能實(shí)現(xiàn)相互間的通信.
通過這個(gè)圖看一看到,建立tcp連接需要三次傳輸(即常說的三次握手).在進(jìn)行消息傳送之前需要雙發(fā)確認(rèn)都能發(fā)送并接收消息.
- 瀏覽器向服務(wù)器發(fā)送一個(gè)請(qǐng)求
- 服務(wù)器收到請(qǐng)求告知瀏覽器,可以收到
- 瀏覽器回復(fù)服務(wù)器我亦能收到你發(fā)送的內(nèi)容
經(jīng)過雙方確知之后表示連接建立成功.然后就可以進(jìn)行消息發(fā)送了.
HTTP報(bào)文
建立連接之后就開始內(nèi)容的傳輸.可以通過chrome瀏覽器的開發(fā)者工具查看請(qǐng)求的信息(注意瀏覽器顯示的報(bào)文信息是格式化過的).
報(bào)文分為請(qǐng)求報(bào)文和相應(yīng)報(bào)文.為了講解get和post的區(qū)別,報(bào)文相關(guān)的知識(shí)必須要有所了解.因?yàn)樵诮档秸?qǐng)求傳遞參數(shù)的時(shí)候需要用到.
HTTP報(bào)文格式

從客戶端發(fā)往Web服務(wù)器的HTTP報(bào)文稱為請(qǐng)求報(bào)文(request message),從服務(wù)器發(fā)往客戶端的報(bào)文稱為響應(yīng)報(bào)文(response message).HTTP請(qǐng)求和響應(yīng)報(bào)文的格式很類似.
HTTP 報(bào)文包括以下三個(gè)部分:
- 報(bào)文起始行
報(bào)文的第一行就是起始行,在請(qǐng)求報(bào)文中用來說明用什么方式向什么地址做請(qǐng)求,在響應(yīng)報(bào)文中說明返回的狀態(tài)信息(成功、失敗等) - 報(bào)文頭部
起始行后面跟隨報(bào)文的頭部信息(可以沒有).每個(gè)頭部字段都包含一個(gè)名字和一個(gè)值,為了便于解析,兩者之間用冒號(hào)(:)來分隔.報(bào)文頭部以一個(gè)空行結(jié)束. - 報(bào)文體
空行之后的內(nèi)容被認(rèn)定為報(bào)文體,其中包含了所有類型的數(shù)據(jù).請(qǐng)求主體中包括了要發(fā)送給 Web 服務(wù)器的數(shù)據(jù);響應(yīng)主體中裝載了要返回給客戶端的數(shù)據(jù).起始行和頭部都是文本形式且都是結(jié)構(gòu)化的,而主體則不同,主體中可以包含任意的二進(jìn)制數(shù)據(jù)(比如圖片、視頻、音軌、軟件程序)或者文本信息.報(bào)文體中的數(shù)據(jù)以什么形式解析可以在報(bào)文頭的Content-type屬性中進(jìn)行指定.
GET和POST請(qǐng)求
在發(fā)送HTTP請(qǐng)求的時(shí)候,可以在請(qǐng)求行中指定請(qǐng)求的方式.最常見的是GET和POST,當(dāng)然還有其他的(PUT,DELETE,PATCH等等).
- GET - 從指定的資源請(qǐng)求數(shù)據(jù)。
- POST - 向指定的資源提交要被處理的數(shù)據(jù)
w3schools上以一個(gè)表格的形式列出了兩者的區(qū)別

通過表格可以看到兩者的區(qū)別.確切的講這些應(yīng)該算是實(shí)現(xiàn)形式上的區(qū)別,發(fā)送GET或者POST請(qǐng)求時(shí)應(yīng)該使用的方法.
GET的語義是請(qǐng)求獲取指定的資源.GET方法是安全、冪等、可緩存的(除非有 Cache-ControlHeader的約束),GET方法的報(bào)文主體沒有任何語義.
POST的語義是根據(jù)請(qǐng)求負(fù)荷(報(bào)文主體)對(duì)指定的資源做出處理,具體的處理方式視資源類型而不同.POST不安全,不冪等,不可緩存.
冪等
冪等(idempotent、idempotence)是一個(gè)數(shù)學(xué)與計(jì)算機(jī)學(xué)概念,常見于抽象代數(shù)中。
在編程中.一個(gè)冪等操作的特點(diǎn)是其任意多次執(zhí)行所產(chǎn)生的影響均與一次執(zhí)行的影響相同。冪等函數(shù),或冪等方法,是指可以使用相同參數(shù)重復(fù)執(zhí)行,并能獲得相同結(jié)果的函數(shù)。這些函數(shù)不會(huì)影響系統(tǒng)狀態(tài),也不用擔(dān)心重復(fù)執(zhí)行會(huì)對(duì)系統(tǒng)造成改變。
百度百科