一. HTTP簡介
HTTP(Hypertext transfer protocol)超文本傳輸協(xié)議,是一種詳細(xì)規(guī)定了瀏覽器和萬維網(wǎng)服務(wù)器之間互相同行,通過互聯(lián)網(wǎng)傳文檔的數(shù)據(jù)傳送協(xié)議.
HTTP可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少,他不僅保證了計算機(jī)正確快速的傳輸文檔,還確定傳輸文檔中的那一部分,以及那部分內(nèi)容首先顯示等.
HTTP協(xié)議是一個應(yīng)用層協(xié)議,有請求和響應(yīng)構(gòu)成,是一個標(biāo)準(zhǔn)的客戶端服務(wù)器模型,HTTP協(xié)議是一個無狀態(tài)的協(xié)議.
HTTP默認(rèn)的端口號是80,HTTPS的端口號是443.
二. URL和URI
(一)URI:統(tǒng)一資源標(biāo)識符
Web上可用的每種資源如HTML文檔蕴忆、圖像三圆、視頻片段低散、程序等都是一個來URI來定位的,URI一般由三部組成:
訪問資源的命名機(jī)制
存放資源的主機(jī)名
資源自身的名稱浮毯,由路徑表示杨伙,著重強(qiáng)調(diào)于資源。
(二)URL:統(tǒng)一資源定位符
URL是Internet上用來描述信息資源的字符串,主要用在各種WWW客戶程序和服務(wù)器程序上儡司,特別是著名的Mosaic。采用URL可以用一種統(tǒng)一的格式來描述各種信息資源余指,包括文件捕犬、服務(wù)器的地址和目錄等。URL一般由三部組成:
協(xié)議(或稱為服務(wù)方式)
存有該資源的主機(jī)IP地址(有時也包括端口號)
主機(jī)資源的具體地址或听。如目錄和文件名等
三. HTTP請求
HTTP的請求報文由3部分組成,分別是:請求行,請求頭,請求正文
1. GET方法
//請求行 格式:請求方式 請求地址? 協(xié)議名稱/版本
GET /http/userLogin.php?username=wanlum&password=123456 HTTP/1.1
//請求頭
Host: localhost
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://localhost/day02-http&ajax/4-code/02-http/userLogin.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8
//請求正文
username=json&password=123456
2. POST方法
//請求行 格式:請求方式 請求地址? 協(xié)議名稱/版本
POST /http/userLogin.php HTTP/1.1
//請求頭
代表主機(jī)名稱
Host: localhost
代表是否開啟長鏈接
Connection: keep-alive
代表請求內(nèi)容的長度(中文一個占三個字節(jié))
Content-Length: 31
是否開啟緩存? ? 開啟緩存 但是立即刪除
Cache-Control: max-age=0
域名的源
Origin: http://localhost
安全請求
Upgrade-Insecure-Requests: 1
用戶代理
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
告訴服務(wù)器請求內(nèi)容是表單的url的編碼
Content-Type: application/x-www-form-urlencoded
瀏覽器告訴服務(wù)器我能接受的內(nèi)容的類型
image/png image/jpg? audio/mp3? 我們把這樣的格式? 大類型/具體類型? 叫做MIME類型
作用是告訴對方用什么樣的方式去解析內(nèi)容
Accept: text/html,application/xhtml+xml,application/xml;q=0.9, image/webp,image/apng,*/*;q=0.8
當(dāng)前的頁面是從那個頁面跳轉(zhuǎn)過來的()
Referer: http://localhost/http/userLogin.html
瀏覽器告訴服務(wù)器能接受的內(nèi)容的壓縮格式
Accept-Encoding: gzip, deflate,
瀏覽器告訴服務(wù)器我所能接受的語言
Accept-Language: zh-CN,zh;q=0.8
//請求正文
username=json&password=123456
四. HTTP響應(yīng)
HTTP的請求報文由3部分組成,分別是:請求行,請求頭,請求正文
//響應(yīng)行 格式:協(xié)議/版本號 狀態(tài)碼? 狀態(tài)碼描述
HTTP/1.1 200 OK
//響應(yīng)頭
Date: Fri, 07 Jul 2017 06:44:11 GMT
Server: Apache/2.2.21 (Win32) PHP/5.3.10
網(wǎng)站用什么技術(shù)開發(fā)的
X-Powered-By: PHP/5.3.10
響應(yīng)內(nèi)容的長度
Content-Length: 60
長連接的時間? 5s以后算超時? 超時之后 開始嘗試鏈接 嘗試一次max-1? 直到100被減完了 就不再嘗試了
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
服務(wù)器告訴瀏覽器我給你的內(nèi)容的格式
Content-Type: text/html
//響應(yīng)正文
Array ( [username] => json[password] => 123456 )
五. HTTP狀態(tài)碼
狀態(tài)代碼有三位數(shù)字組成誉裆,第一個數(shù)字定義了響應(yīng)的類別顿颅,共分五種類別:
1xx:指示信息--表示請求已接收,繼續(xù)處理
2xx:成功--表示請求已被成功接收足丢、理解粱腻、接受
3xx:重定向--要完成請求必須進(jìn)行更進(jìn)一步的操作
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現(xiàn)
5xx:服務(wù)器端錯誤--服務(wù)器未能實現(xiàn)合法的請求
常見狀態(tài)碼:
200 OK? ? ? ? ? ? ? ? ? ? ? ? //客戶端請求成功
400 Bad Request? ? ? ? ? ? ? //客戶端請求有語法錯誤斩跌,不能被服務(wù)器所理解
401 Unauthorized? ? ? ? ? ? //請求未經(jīng)授權(quán),這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden? ? ? ? ? ? ? ? //服務(wù)器收到請求耀鸦,但是拒絕提供服務(wù)
404 Not Found? ? ? ? ? ? ? ? //請求資源不存在柬批,eg:輸入了錯誤的URL
500 Internal Server Error? ? //服務(wù)器發(fā)生不可預(yù)期的錯誤
503 Server Unavailable? ? ? ? //服務(wù)器當(dāng)前不能處理客戶端的請求,一段時間后可能恢復(fù)正常
六. HTTP請求方法
GET? ? 請求指定的頁面信息袖订,并返回實體主體氮帐。
HEAD? ? 類似于get請求,只不過返回的響應(yīng)中沒有具體的內(nèi)容上沐,用于獲取報頭。
POST? ? 向指定資源提交數(shù)據(jù)進(jìn)行處理請求(例如提交表單或者上傳文件)参咙。數(shù)據(jù)被包含在請求體中。POST請求可能會導(dǎo)致新的資源的建立和/或已有資源的修改蕴侧。
PUT? ? 從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容。
DELETE? ? ? 請求服務(wù)器刪除指定的頁面戈盈。
CONNECT? ? HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
OPTIONS? ? 允許客戶端查看服務(wù)器的性能谆刨。
TRACE? ? 回顯服務(wù)器收到的請求,主要用于測試或診斷痊夭。
七. 關(guān)于HTTP協(xié)議的面試題
1. 請簡要描述在客戶端瀏覽器中輸入域名之后,到用戶看到頁面的整個過程.
(1) 將域名發(fā)送到DNS服務(wù)器,DNS服務(wù)器解析域名,DNS服務(wù)器將域名解析成IP地址
(2) DNS服務(wù)器將IP地址傳入到瀏覽器中.
(3) 瀏覽器通過收到的IP地址,給Web服務(wù)器發(fā)送請求.
(4) Web服務(wù)器解析收到的請求信息,將響應(yīng)信息傳遞回瀏覽器
2. HTTP的三次握手.
在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù)她我,采用三次握手建立一個連接迫横。
第一次握手:建立連接時酝碳,客戶端發(fā)送syn包(syn=j)到服務(wù)器矾踱,并進(jìn)入SYN_SEND狀態(tài)疏哗,等待服務(wù)器確認(rèn)呛讲;
第二次握手:服務(wù)器收到syn包返奉,必須確認(rèn)客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k)芽偏,即SYN+ACK包,此時服務(wù)器進(jìn)入SYN_RECV狀態(tài)污尉;
第三次握手:客戶端收到服務(wù)器的SYN+ACK包膀哲,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1)被碗,此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài)蛮放,完成三次握手奠宜。 完成三次握手包颁,客戶端與服務(wù)器開始傳送數(shù)據(jù).
3. GET方法和POST方法的區(qū)別.
GET提交的數(shù)據(jù)會放在URL之后,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連,而POST方法會把數(shù)據(jù)放在請求正文中.
GET提交的數(shù)據(jù)大小有限制,最多只有1024個字節(jié),而POST方法體檢的數(shù)據(jù)沒有限制.
GET方法提交數(shù)據(jù),因為通過URL傳遞關(guān)系,所以不能傳遞例如用戶密碼和用戶名等涉及用戶隱私的信息. 相對的,POST方法比GET方法安全.