2.1http協(xié)議解析
? ? ? ?HTTP:超文本傳輸協(xié)議,是一種規(guī)范了瀏覽器與服務(wù)器之間互相通信的規(guī)則。
2.1.1發(fā)起http請求
? ? ? ?瀏覽器地址欄輸入一個URL就發(fā)起了http請求钦铁。URL(統(tǒng)一資源定位符)即網(wǎng)頁地址。
URL的標(biāo)準(zhǔn)如下:
協(xié)議://服務(wù)器IP[:端口]/路徑/[?查詢]
在某些方面而言萧芙,瀏覽器在http協(xié)議方面只不過多了HTML渲染的功能阱冶,讓用戶看到更直觀的界面醋安。
2.1.2HTTP協(xié)議詳解
? ? ? ?HTTP是一種無狀態(tài)的協(xié)議侥啤。無狀態(tài)是指web瀏覽器與web服務(wù)器之間不需要建立持久的鏈接,這意味著當(dāng)一個客戶端向服務(wù)器端發(fā)出請求茬故,然后web服務(wù)器返回響應(yīng)(Response)盖灸,連接就被關(guān)閉了。在服務(wù)器端不保留連接有關(guān)信息磺芭。HTTP請求只能由客戶端發(fā)起赁炎,而服務(wù)器不能主動向客戶端發(fā)送數(shù)據(jù)。
? ? ? ?HTTP遵循請求(Request)/應(yīng)答(Response)模型钾腺。
通過實(shí)例來學(xué)習(xí)HTTP請求與響應(yīng)
1.HTTP請求與響應(yīng)徙垫。
(1)HTTP請求
? ? ? ?HTTP請求包括三部分,分別是請求行(請求方法)放棒,請求頭(消息報頭)和請求正文姻报。
POST /login.php HTTP/1.1 //請求行
Host: www.xxser.com //請求頭
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87
//空白行,表示請求頭結(jié)束
Username=admin&password=admin //請求正文
? ? ? ?請求行由三部分組成间螟,第一部分說明是POST請求吴旋。第二部分/login.php 說明是該域名根目錄下的login.php损肛。第三部分使用的是HTTP1.1版本。
? ? ? ?第二行至空白行為HTTP中的請求頭(消息頭)荣瑟。其中Host代表請求的主機(jī)地址治拿,User-Agent代表瀏覽器的標(biāo)識。
(2)HTTP響應(yīng)
? ? ? ?HTTP響應(yīng)也由三部分內(nèi)容組成笆焰。分別是響應(yīng)行劫谅,響應(yīng)頭(消息報頭)和響應(yīng)正文(消息主題)。
HTTP/1.1 200 OK //響應(yīng)行
Date: Sun, 28 Jan 2018 09:55:48 GMT //響應(yīng)頭
Server: BWS/1.0
Content-Length: 97
Content-Type: text/html; charset=utf-8
Cache-Control: private
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Content-Encoding:gzip
Set-Cookie: _m7e_session=a797ede0c2a3193d03c77d875e462e3f; path=/; expires=Sun, 28 Jan 2018 15:55:48 -0000; HttpOnly
Connection: Keep-Alive
//空白行代表響應(yīng)頭結(jié)束
<html> //響應(yīng)主題又叫消息主題
<head><title>··················
? ? ? ?HTTP響應(yīng)的第一行為響應(yīng)行嚷掠,其中有HTTP版本捏检,狀態(tài)嗎(200)以及消息ok。
? ? ? ?第二行至末尾的空白為響應(yīng)頭不皆,由服務(wù)器向客戶端發(fā)送贯城。
? ? ? ?消息報頭之后是響應(yīng)正文,是服務(wù)器端向客戶端發(fā)送的HTML數(shù)據(jù)粟焊。
2.HTTP請求方法
? ? ? ?HTTP請求的方法非常多冤狡,以GEt孙蒙,POST最常見项棠。
(1)GET
? ? ? ?GET方法用戶獲取請求頁面的指定信息(以實(shí)體的格式)。如果請求資源為動態(tài)腳本(非HTML)挎峦,那么返回文本是web容器解析后的HTML源代碼香追,而不是源文件。例如請求index.jsp,返回的不是index.jsp的源文件坦胶,而是解析后的html代碼透典。
GET /index.php?id=1 HTTP/1.1
HOST: www.xxser.com
? ? ? ?使用GET請求index.php,并且id參數(shù)為1顿苇,在服務(wù)器端監(jiān)本語言中可以選擇性地接手這些參數(shù)峭咒,比如id=1&name=admin,一般都是由開發(fā)者內(nèi)定好的參數(shù)項(xiàng)目才會接收纪岁,比如開發(fā)者只接收id參數(shù)項(xiàng)目凑队,若加了其他參數(shù)項(xiàng),如:
index.php?id=1&username=admin //多個參數(shù)以“&”分隔
服務(wù)器端腳本不會理會你加入的內(nèi)容幔翰,依然只會接收id參數(shù)漩氨,并且去查詢數(shù)據(jù),最終向服務(wù)器端發(fā)送解析過的HTML數(shù)據(jù)遗增,不會因?yàn)槟愕母蓴_而亂套叫惊。
(2)POST
? ? ? ?post方法與GET類似,但最大的區(qū)別在于做修,GET方法沒有請求內(nèi)容霍狰,而POST是有請求內(nèi)容的抡草。POSt請求最多用于向服務(wù)器發(fā)送大量數(shù)據(jù)。GET有大序镜ⅰ(長度)限制渠牲,并且GET請求會將發(fā)送的數(shù)據(jù)顯示在瀏覽器端,但是POST是不會的步悠。
3.HTTP狀態(tài)碼
HTTP/1.1 200 ok //響應(yīng)行
HTTP協(xié)議中狀態(tài)碼由三維數(shù)字組成签杈,第一位數(shù)字定義了響應(yīng)的類別,且只有以下五種鼎兽。
- 1xx:信息提示答姥,表示成功已被成功接收,繼續(xù)處理谚咬。范圍100~101.
- 2xx:成功鹦付,服務(wù)器成功地處理了請求。其范圍為200~206.
- 3xx:重定向择卦,重定向狀態(tài)碼用于告訴客戶端敲长,它訪問的資源已被移動,并告訴客戶端新的資源地址位置秉继。這時沒瀏覽器將重新對新資源發(fā)起請求祈噪。其范圍300~305.
- 4xx:客戶端錯誤狀態(tài)碼,又是客戶端會發(fā)送一些服務(wù)器無法處理的東西尚辑。范圍400~415.
- 5xx:又是客戶端發(fā)送一條有效請求辑鲤,但web服務(wù)器自身出錯了。5xx是用來描述服務(wù)器內(nèi)部錯誤的杠茬,其范圍為500~505月褥。
常見的狀態(tài)碼描述如下。
200:客戶端請求成功瓢喉,是最常見的狀態(tài)宁赤。
302:重定向。
404:請求資源不存在栓票,是最常見的狀態(tài)决左。
400:客戶端請求語法錯誤,不能被服務(wù)器所理解逗载。
401:請求未經(jīng)授權(quán)哆窿。
403:服務(wù)器收到請求,但是拒絕提供服務(wù)厉斟。
500:服務(wù)器內(nèi)部錯誤挚躯,是最常見的狀態(tài)。
503:服務(wù)器當(dāng)前不能處理客戶端的請求擦秽,一段時間后可能恢復(fù)正常码荔。
4.HTTP消息
? ? ? ?HTTP消息又稱為HTTP頭漩勤,由四部分組成,分別是請求頭缩搅,響應(yīng)頭越败,普通頭和實(shí)體頭。
(1)請求頭
? ? ? ?請求頭只出現(xiàn)在HTTP請求中硼瓣,請求報頭允許客戶端向服務(wù)器端傳遞請求的附加信息和客戶端自身的信息究飞。
①Host
? ? ? ?Host請求報頭域主要用于指定被請求資源的Interbet主機(jī)和端口號,例如:HOST:www.xxser.com:801
②User-Agent
? ? ? ?User-Agent請求報頭域允許客戶端將他的操作系統(tǒng)堂鲤,瀏覽器和其他屬性告訴服務(wù)器亿傅。
③Refere
? ? ? ?Referer包含一個URL,代表當(dāng)前訪問URL的上一個URL瘟栖,也就是說用戶是從什么地方來到當(dāng)前頁面葵擎。
④Cookies
? ? ? ?Cookies是非常重要的請求頭,她是一段文本半哟,常用來表示請求者身份等酬滤。
⑤Range
? ? ? ?Range可以請求實(shí)體的部分內(nèi)容,多線程下載一定會用到此請求頭寓涨。
⑥X-forweard-for
? ? ? ?X-forweard-for即XXF頭盯串,它代表請求端的IP,可以有多個缅茉,中間由逗號隔開嘴脾。
⑦Accept
? ? ? ?Accept請求報頭域用于指定客戶端接手那些MIME類型的信息男摧,如Accept:text/html蔬墩,表明客戶端希望接收HTML文本。
⑧Accept-Charset請求報頭域用于指定客戶端接收的字符集耗拓。例如:Accept-Charset:iso-8859-1拇颅,gb2312。如果在請求消息中設(shè)置這個域乔询,默認(rèn)是任何字符集都可以接收樟插。
(2)響應(yīng)頭
? ? ? ?響應(yīng)頭是服務(wù)器根據(jù)請求向客戶端發(fā)送的HTTP頭。
①Server
? ? ? ?服務(wù)器所使用的Web服務(wù)器名稱竿刁,如Server:Apache/1.3.6(Unix)黄锤,攻擊者通過查看此頭,可以探測web服務(wù)器名稱食拜。所以鸵熟,建議服務(wù)器端修改此頭信息。
②Set-Cookie
? ? ? ?向客戶端設(shè)置Cookie负甸,通過查看此頭流强,可以清楚看到服務(wù)器向客戶端發(fā)送的Cooie信息痹届。
③Last-Modified
? ? ? ?服務(wù)器通過這個頭告訴瀏覽器,資料的最后修改時間打月。
④Location
? ? ? ?服務(wù)器通過這個頭告訴瀏覽器去訪問那個頁面队腐,瀏覽器接收到這個請求之后,通常會立刻訪問localtion頭所指向的頁面奏篙。這個頭通常配合302狀態(tài)碼使用柴淘。
⑤Refresh
? ? ? ?服務(wù)器通過Refresh頭告訴瀏覽器定時刷新瀏覽器。
(3)普通頭
? ? ? ?在普通報頭中秘通,有少數(shù)報頭域用于所有請求和響應(yīng)消息 悠就,但并不用于被傳輸?shù)膶?shí)體,只用于傳輸?shù)南ⅰ?br>
例如:Date充易,表示消息產(chǎn)生的日期和時間梗脾。Connection,允許發(fā)送指定連接的選項(xiàng)盹靴。例如炸茧,指定連接是連續(xù)的,或者指定連接“close”選項(xiàng)稿静,通知服務(wù)器梭冠,在響應(yīng)完成后,關(guān)閉連接改备。Cache-Control控漠,用于指定緩存指令,緩存指令是單向的悬钳,且是獨(dú)立的盐捷。
注意:普通報頭了解即可。
(4)實(shí)體頭
? ? ? ?請求和響應(yīng)消息都可以傳送一個實(shí)體頭默勾。實(shí)體頭定義了關(guān)于實(shí)體正文和請求所表示的資源的元信息碉渡。元信息也就是實(shí)體內(nèi)容的屬性,包括實(shí)體信息類型母剥、長度滞诺、壓縮方法、最后一次修改時間等环疼。常見的實(shí)體頭如下习霹。
①Content-Type
? ? ? ?Content-Type實(shí)體頭用于向接收方指示實(shí)體的介質(zhì)類型。
②Content-Encoding
? ? ? ?Content-Encoding頭被用作媒體類型的修飾符炫隶,它的值指示了已經(jīng)被應(yīng)用到實(shí)體正文的附加內(nèi)容的編碼淋叶,因而要獲得中Content-Type報頭域所引用的媒體類型,必須采用相應(yīng)的解碼機(jī)制等限。
③Content-Length
? ? ? ?Content-Length實(shí)體報頭用于指明實(shí)體正文的長度爸吮,以字節(jié)方式儲存的十進(jìn)制數(shù)字來表示芬膝。
④Last-Modified
? ? ? ?Last-Modified實(shí)體報頭用于指示資源的最后修改日期和時間。
2.1.4HTTP協(xié)議與HTTPS協(xié)議的區(qū)別
? ? ? ?HTTPS協(xié)議是以安全為目標(biāo)的HTTP通道形娇,其實(shí)就是HTTP的“升級”版本锰霜,只是它單純的比HTTP協(xié)議更安全。
? ? ? ?HTTPS的安全基礎(chǔ)是SSL桐早,即在HTTP下加入SSL層癣缅。也就是HTTPS通過安全傳輸機(jī)制進(jìn)行數(shù)據(jù)傳輸,這種機(jī)制可保護(hù)網(wǎng)絡(luò)傳送的所有數(shù)據(jù)的隱秘性與完整性哄酝,可以降低非侵入性攔截攻擊的可能性友存。
HTTP協(xié)議與HTTPS協(xié)議的主要區(qū)別如下:
- HTTP是超文本傳輸協(xié)議,信息是明文傳輸陶衅,HTTPS則是具有安全性的SSL加密傳輸協(xié)議屡立。
- HTTP與HTTPS協(xié)議使用的是完全不同的連接方式,HTTP采用80端口連接搀军,而HTTPS則是443端口膨俐。
- HTTPS協(xié)議需要到ca申請證書,一般免費(fèi)的證書很少罩句,需要交費(fèi)焚刺,也有些web容器提供,如TOMCAT门烂。而HTTP協(xié)議卻不需要乳愉。
- HTTP連接相對簡單,是無狀態(tài)的屯远,而HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的課進(jìn)行加密傳輸蔓姚、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,相對來說氓润,它要比HTTP協(xié)議更安全赂乐。
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?本文大部分內(nèi)容摘自web安全深度剖析薯鳍,特為啄木鳥網(wǎng)絡(luò)安全工作室新社員編寫咖气,適合小白快速學(xué)習(xí)使用。