1、Get和Post在面試中一般都會(huì)問到,一般的區(qū)別:
(1)post更安全(不會(huì)作為url的一部分,不會(huì)被緩存、保存在服務(wù)器日志、以及瀏覽器瀏覽記錄中)
(2)post發(fā)送的數(shù)據(jù)更大(get有url長度限制)
(3)post能發(fā)送更多的數(shù)據(jù)類型(get只能發(fā)送ASCII字符)
(4)post比get慢
(5)post用于修改和寫入數(shù)據(jù),get一般用于搜索排序和篩選之類的操作(淘寶,支付寶的搜索查詢都是get提交),目的是資源的獲取,讀取數(shù)據(jù)
(6)等等很多...
以上回答,只是一些淺顯的回答。具體回答還要從了解http報(bào)文入手。
2、HTTP報(bào)文
它是HTTP應(yīng)用程序之間發(fā)送的數(shù)據(jù)塊。這些數(shù)據(jù)塊以一些文本形式的元信息開頭,這些信息描述了報(bào)文的內(nèi)容及含義,后面跟著可選的數(shù)據(jù)部分。這些報(bào)文都是在客戶端、服務(wù)器和代理之間流動(dòng)。
3、HTTP報(bào)文流動(dòng)方向
一次HTTP請(qǐng)求,HTTP報(bào)文會(huì)從“客戶端”流到“代理”再流到“服務(wù)器”,在服務(wù)器工作完成之后,報(bào)文又會(huì)從“服務(wù)器”流到“代理”再流到“客戶端”。
4、報(bào)文的語法和分類
所有的HTTP報(bào)文都可以分為兩類,請(qǐng)求報(bào)文和響應(yīng)報(bào)文。請(qǐng)求和響應(yīng)報(bào)文的基本報(bào)文結(jié)構(gòu)大致是相同的,只有起始行的語法有所不同。

4.1請(qǐng)求報(bào)文
一個(gè)HTTP請(qǐng)求報(bào)文由請(qǐng)求行(request line)、請(qǐng)求頭部(header)、空行和請(qǐng)求數(shù)據(jù)4個(gè)部分組成。
大致結(jié)構(gòu)是這樣的:
<request-line> //請(qǐng)求行
<headers> //請(qǐng)求頭部
<blank line> //空行
<request-body> //請(qǐng)求體
舉個(gè)簡單的例子:
POST /user HTTP/1.1 //請(qǐng)求行
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
User-agent: Mozilla/5.0. //以上是請(qǐng)求頭部
(此處必須有一空行) //空行分割header和請(qǐng)求內(nèi)容
name=world 請(qǐng)求體
-
請(qǐng)求行
請(qǐng)求行由三部分組成:請(qǐng)求方法,請(qǐng)求URL(不包括域名),HTTP協(xié)議版本。
請(qǐng)求方法比較多:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
最常用的是GET和POST。
-
請(qǐng)求方法
1. GET
傳遞參數(shù)長度受限制,因?yàn)閭鬟f的參數(shù)是直接表示在地址欄中,而特定瀏覽器和服務(wù)器對(duì)url的長度是有限制的。
因此,GET不適合用來傳遞私密數(shù)據(jù),也不適合拿來傳遞大量數(shù)據(jù)。
一般的HTTP請(qǐng)求大多都是GET。
2. POST
POST把傳遞的數(shù)據(jù)封裝在HTTP請(qǐng)求數(shù)據(jù)中,以名稱/值的形式出現(xiàn),可以傳輸大量數(shù)據(jù),對(duì)數(shù)據(jù)量沒有限制,但是服務(wù)器會(huì)有限制,比如php.ini的配置,不會(huì)顯示在URL中。
表單的提交用的是POST。
3. HEAD
HEAD跟GET相似,不過服務(wù)端接收到HEAD請(qǐng)求時(shí)只返回響應(yīng)頭,不發(fā)送響應(yīng)內(nèi)容。所以,如果只需要查看某個(gè)頁面的狀態(tài)時(shí),用HEAD更高效,因?yàn)槭∪チ藗鬏旐撁鎯?nèi)容的時(shí)間。
4. DELETE
刪除某一個(gè)資源。
5.OPTIONS
用于獲取當(dāng)前URL所支持的方法。若請(qǐng)求成功,會(huì)在HTTP頭中包含一個(gè)名為“Allow”的頭,值是所支持的方法,如“GET, POST”。
6.PUT
把一個(gè)資源存放在指定的位置上。
本質(zhì)上來講, PUT和POST極為相似,都是向服務(wù)器發(fā)送數(shù)據(jù),但它們之間有一個(gè)重要區(qū)別,PUT通常指定了資源的存放位置,而POST則沒有,POST的數(shù)據(jù)存放位置由服務(wù)器自己決定。
7.TRACE
回顯服務(wù)器收到的請(qǐng)求,主要用于測試或診斷。
8.CONNECT
CONNECT方法是HTTP/1.1協(xié)議預(yù)留的,能夠?qū)⑦B接改為管道方式的代理服務(wù)器。通常用于SSL加密服務(wù)器的鏈接與非加密的HTTP代理服務(wù)器的通信。
-
HTTP協(xié)議版本
1.HTTP/1.0
HTTP/1.0支持:GET、POST、HEAD三種HTTP請(qǐng)求方法。
2. HTTP/1.1
HTTP/1.1是當(dāng)前正在使用的版本。該版本默認(rèn)采用持久連接,并能很好地配合代理服務(wù)器工作。還支持以管道方式同時(shí)發(fā)送多個(gè)請(qǐng)求,以便降低線路負(fù)載,提高傳輸速度。
HTTP/1.1新增了:OPTIONS、PUT、DELETE、TRACE、CONNECT五種HTTP請(qǐng)求方法。
-
請(qǐng)求頭部
1.請(qǐng)求頭部由關(guān)鍵字/值對(duì)組成,每行一對(duì)
1.User-Agent : 產(chǎn)生請(qǐng)求的瀏覽器類型。
2.Accept : 客戶端希望接受的數(shù)據(jù)類型,比如 Accept:text/xml(application/json)表示希望接受到的是xml(json)類型。
3.Content-Type:發(fā)送端發(fā)送的實(shí)體數(shù)據(jù)的數(shù)據(jù)類型。
比如,Content-Type:text/html(application/json)表示發(fā)送的是html類型。
4.Host : 請(qǐng)求的主機(jī)名,允許多個(gè)域名同處一個(gè)IP地址,即虛擬主機(jī)。
Content-Type:服務(wù)器通過這個(gè)頭,回送數(shù)據(jù)的類型
Cache-Control:服務(wù)器通過這個(gè)頭,也可以控制瀏覽器不緩存數(shù)據(jù)。
Last-Modified:服務(wù)器通過這個(gè)頭,告訴瀏覽器當(dāng)前資源的緩存時(shí)間。
User-Agent:客戶機(jī)通過這個(gè)頭告訴服務(wù)器,客戶機(jī)的軟件環(huán)境。
Referer:客戶機(jī)通過這個(gè)頭告訴服務(wù)器,它是從哪個(gè)資源來訪問服務(wù)器的。(一般用于防盜鏈)
Accept:告訴服務(wù)器,客戶端支持的數(shù)據(jù)類型。
Cookie:客戶機(jī)通過這個(gè)頭告訴服務(wù)器,可以向服務(wù)器帶數(shù)據(jù)。
-
常見的Content-Type

-
空行
請(qǐng)求頭之后是一個(gè)空行,通知服務(wù)器以下不再有請(qǐng)求頭
-
請(qǐng)求體
GET沒有請(qǐng)求體,POST有。
與請(qǐng)求數(shù)據(jù)相關(guān)的最常使用的請(qǐng)求頭是 Content-Type 和 Content-Length 。
4.2 響應(yīng)報(bào)文
1. HTTP響應(yīng)報(bào)文和請(qǐng)求報(bào)文的結(jié)構(gòu)差不多,也是由四個(gè)部分組成。
<status-line> //狀態(tài)行
<headers> //消息報(bào)頭
<blank line> //空行
<response-body> //響應(yīng)體
2.狀態(tài)行
狀態(tài)行也由三部分組成:服務(wù)器HTTP協(xié)議版本,響應(yīng)狀態(tài)碼,狀態(tài)碼的文本描述
格式:HTTP-Version Status-Code Reason-Phrase CRLF
比如:HTTP/1.1 200 OK
狀態(tài)碼:由3位數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類別
1.1xx:指示信息,表示請(qǐng)求已接收,繼續(xù)處理。
2.2xx:成功,表示請(qǐng)求已被成功接受,處理。
200 OK:客戶端請(qǐng)求成功
204 No Content:無內(nèi)容。服務(wù)器成功處理,但未返回內(nèi)容。一般用在只是客戶端向服務(wù)器發(fā)送信息,而服務(wù)器不用向客戶端返回什么信息的情況。不會(huì)刷新頁面。
206 Partial Content:服務(wù)器已經(jīng)完成了部分GET請(qǐng)求(客戶端進(jìn)行了范圍請(qǐng)求)。響應(yīng)報(bào)文中包含Content-Range指定范圍的實(shí)體內(nèi)容
3.3xx:重定向
301 Moved Permanently:永久重定向,表示請(qǐng)求的資源已經(jīng)永久的搬到了其他位置。
302 Found:臨時(shí)重定向,表示請(qǐng)求的資源臨時(shí)搬到了其他位置
303 See Other:臨時(shí)重定向,應(yīng)使用GET定向獲取請(qǐng)求資源。303功能與302一樣,區(qū)別只是303明確客戶端應(yīng)該使用GET訪問
307 Temporary Redirect:臨時(shí)重定向,和302有著相同含義。POST不會(huì)變成GET
304 Not Modified:表示客戶端發(fā)送附帶條件的請(qǐng)求(GET方法請(qǐng)求報(bào)文中的IF…)時(shí),條件不滿足。返回304時(shí),不包含任何響應(yīng)主體。雖然304被劃分在3XX,但和重定向一毛錢關(guān)系都沒有
4.4xx:客戶端錯(cuò)誤
400 Bad Request:客戶端請(qǐng)求有語法錯(cuò)誤,服務(wù)器無法理解。
401 Unauthorized:請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用。
403 Forbidden:服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)
404 Not Found:請(qǐng)求資源不存在。比如,輸入了錯(cuò)誤的url
415 Unsupported media type:不支持的媒體類型
5.5xx:服務(wù)器端錯(cuò)誤,服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求
500 Internal Server Error:服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤。
503 Server Unavailable:服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常。