信安学习之路
web(world wide web)即全球廣域網(wǎng),也稱為萬維網(wǎng),它是一種基于超文本和HTTP的,全球性的,動(dòng)態(tài)交互式的,跨平臺(tái)的分布式圖形信息系統(tǒng)。是建立在internet上的一種網(wǎng)絡(luò)服務(wù),為瀏覽者在internet上查找和瀏覽信息提供了圖形化的,易于訪問的直觀界面,其中的文檔及超級(jí)鏈接internet上的信息節(jié)點(diǎn)組織成一個(gè)互為關(guān)聯(lián)的網(wǎng)狀結(jié)構(gòu)。簡單來說,web是web頁面的載體,我們通過瀏覽器上網(wǎng)都是web。
http請(qǐng)求類型
HTTP協(xié)議中共定義了八種方法或者叫“動(dòng)作”來表明對(duì)Request—URI 指定的資源的不同操作方式,以下為常用的6種:
.OPTIONS: 返回服務(wù)器所支持的HTTP請(qǐng)求方法。
.HEAD: 與GET請(qǐng)求相一致的響應(yīng),但只返回頭部信息,響應(yīng)體將不會(huì)被返回。
.GET: 向特定的資源發(fā)出請(qǐng)求。 (url回車)
.POST: 向指定資源位置上傳其最新內(nèi)容。
.PUT: 向指定資源位置上傳其最新內(nèi)容。
.DELETE: 請(qǐng)求服務(wù)器刪除指定資源。
Get 與 Post 區(qū)別
url可見性
.Get傳參方式是通過地址欄URL傳遞,是可以直接看到get傳遞的參數(shù),get把請(qǐng)求的數(shù)據(jù)在URL后通過?連接,通過&進(jìn)行參數(shù)分割。
.Post傳參方式參數(shù)URL不可見,post將從參數(shù)存放在HTTP的包體內(nèi)。
傳輸數(shù)據(jù)大小
.Get傳遞數(shù)據(jù)是通過URL進(jìn)行傳遞,對(duì)傳遞的數(shù)據(jù)長度是受到URL大小的限制,URL最大長度是2048個(gè)字節(jié)。
.Post沒有長度限制。
后退頁面
.Get后退不會(huì)有影響,Post后退會(huì)重新進(jìn)行提交
Get與 Post 的區(qū)別
緩存
. Get請(qǐng)求可以被緩存,請(qǐng)求的記錄會(huì)留在歷史記錄中。
.post不可以被緩存,請(qǐng)求不會(huì)留在歷史記錄。
編碼方式
.Get請(qǐng)求只URL編碼。
.Post支持多種編碼方式。
字符類型
.Get只支持ASCII字符。
.Post沒有字符類型限制。
三、http 請(qǐng)求/響應(yīng)包介紹
1.域名解析
瀏覽器會(huì)解析域名(主機(jī)名)得到對(duì)應(yīng)的IP地址,那怎么解析到對(duì)應(yīng)的IP地址?
瀏覽器自身的DNS緩存(時(shí)間短,一分鐘,1000條緩存)如果有該域名對(duì)應(yīng)的條目且沒有過期則解析到此結(jié)束;
沒有找到對(duì)應(yīng)的條目,瀏覽器會(huì)搜索操作系統(tǒng)自身的DNS緩存,如果有該域名對(duì)應(yīng)的條目且沒有過期則解析到此結(jié)束;
沒有找到對(duì)應(yīng)的條目,嘗試讀取hosts文件(位于C:\Windows\System32\drivers\etc),如果有該域名對(duì)應(yīng)的條目且沒有過期則解析成功;
在hosts文件中沒有找到對(duì)應(yīng)的條目,瀏覽器發(fā)起一個(gè)DNS的系統(tǒng)調(diào)用,就會(huì)向本地配置的首選DNS服務(wù)器(運(yùn)營商提供,也可以使用像Google提供的DNS服務(wù)器)發(fā)起域名解析請(qǐng)求(通過的是UDP協(xié)議向DNS的53端口發(fā)起請(qǐng)求,遞歸請(qǐng)求,運(yùn)營商的DNS服務(wù)器必須得提供給我們?cè)撚蛎腎P地址),運(yùn)營商的DNS服務(wù)器首先查找自身的緩存,找到對(duì)應(yīng)的條目,且沒有過期,則解析成功。沒有找到對(duì)應(yīng)的條目,則有運(yùn)營商的DNS代我們?yōu)g覽器發(fā)起迭代DNS解析請(qǐng)求,它首先是會(huì)找根域的DNS的IP地址(這個(gè)DNS服務(wù)器都內(nèi)置13臺(tái)根域的DNS的IP地址),然后進(jìn)一步請(qǐng)求;
正常情況下通過這四步基本就能解析域名獲得IP了。
2.發(fā)起TCP3次握手
拿到域名對(duì)應(yīng)的IP地址之后,User-Agent(指瀏覽器)會(huì)以一個(gè)隨機(jī)的端口(1024<端口<65535)向服務(wù)器的WEB程序的80端口發(fā)起TCP連接請(qǐng)求。連接請(qǐng)求(原始的http請(qǐng)求經(jīng)過TCP/IP4層模型的層層封包)到達(dá)服務(wù)器端后(通過各種路由設(shè)備,局域網(wǎng)內(nèi)除外),進(jìn)入到網(wǎng)卡,然后進(jìn)入內(nèi)核的TCP/IP協(xié)議(用于識(shí)別該連接請(qǐng)求,解封包,一層一層的剝開),還有可能要經(jīng)過Netfilter防火墻(屬于內(nèi)核的模塊)的過濾,最終到達(dá)WEB層
3.建立TCP連接后發(fā)起HTTP請(qǐng)求
經(jīng)過TCP3次握手之后,瀏覽器發(fā)起了http的請(qǐng)求
4.服務(wù)器端響應(yīng)http請(qǐng)求,瀏覽器得到html代碼
服務(wù)器端WEB程序接收到http請(qǐng)求以后,就開始處理該請(qǐng)求,處理之后就返回給瀏覽器html文件
5.瀏覽器解析html代碼,并請(qǐng)求html代碼中的資源
解析html代碼,遇到 js/css/image 等靜態(tài)資源,就向服務(wù)器端去請(qǐng)求下載(多線程下載,瀏覽器的線程數(shù)不一樣),利用 keep—alive特性,建立一次HTTP連接,可以請(qǐng)求多個(gè)資源,所以請(qǐng)求成功顯示的順序并不一定是代碼里面的順序。
瀏覽器在請(qǐng)求靜態(tài)資源的時(shí)(未過期情況下),向服務(wù)器端發(fā)起一個(gè)http請(qǐng)求(詢問自從上一次修改時(shí)間到現(xiàn)在有沒有對(duì)資源進(jìn)行修改),如果服務(wù)器端返回304狀態(tài)碼(告訴瀏覽器服務(wù)器端沒有修改),瀏覽器會(huì)直接讀取本地的該資源的緩存文件。
6.瀏覽器對(duì)以頁面進(jìn)行渲染呈現(xiàn)給用戶
瀏覽器利用自己內(nèi)部的工作機(jī)制,把請(qǐng)求到的靜態(tài)資源和html代碼進(jìn)行渲染,渲染之后呈現(xiàn)給用戶
請(qǐng)求/響應(yīng)正文
組成
一個(gè)HTTP請(qǐng)求報(bào)文由四個(gè)部分組成:請(qǐng)求行,請(qǐng)求頭部,空行,請(qǐng)求數(shù)據(jù)。
服務(wù)器端響應(yīng)http請(qǐng)求,瀏覽器得到html代碼
請(qǐng)求行由請(qǐng)求方法字段,URL字段和HTTP協(xié)議版本字段3個(gè)字段組成,它們用空格分隔。比如GET/data/info.html HTTP/1.1
方法字段就是HTTP使用的請(qǐng)求方法,比如常見的GET/POST
其中HTTP協(xié)議版本有兩種:HTTP1.0/HTTP1.1 可以這樣區(qū)別:
HTTP1.0對(duì)于每一個(gè)連接都只能傳送一個(gè)請(qǐng)求和響應(yīng),請(qǐng)求就會(huì)關(guān)閉,HTTP1.0沒有Host字段;而HTTP1.1在同一個(gè)連接中可以傳送多個(gè)請(qǐng)求和響應(yīng),多個(gè)請(qǐng)求可以重疊和同時(shí)進(jìn)行,HTTP1.1必須有Host字段。
空行
它的作用是通過一個(gè)空行,告訴服務(wù)器請(qǐng)求頭部到此為止。
請(qǐng)求數(shù)據(jù)
若方法字段是GET,則此項(xiàng)為空,沒有數(shù)據(jù)
若方法字段是POST,則通常來說此處放置的就是要提交的數(shù)據(jù)
比如要使用的POST方面提交一個(gè)表單,其中有user字段中數(shù)據(jù)為“admin”,passwor字段為123456,那嗎這里的請(qǐng)求數(shù)據(jù)就是 user=admin&password=123456,使用&來連接各個(gè)字段。
5.HTTP響應(yīng)報(bào)文
響應(yīng)行
響應(yīng)行一般由協(xié)議版本,狀態(tài)碼及其描述組成 比如 HTTP/1.1 200 OK
其中協(xié)議版本HTTP/1.1或者HTTP/1.0,200就是它的狀態(tài)碼,ok則是它的描述
響應(yīng)頭
響應(yīng)頭用于描述服務(wù)器的基本信息,以及數(shù)據(jù)的描述,服務(wù)器通過這些數(shù)據(jù)的描述信息,可以通知客戶端如何處理等一會(huì)兒它回送的數(shù)據(jù)。
設(shè)置HTTP響應(yīng)頭往往和狀態(tài)碼結(jié)合起來。例如,有好幾個(gè)表示“文檔位置已經(jīng)改變”的狀態(tài)代碼都伴隨著一個(gè)Location頭,而401(Unauthorized)狀態(tài)代碼則必須伴隨一個(gè)WWW-Authenticate頭。然而,即使在沒有設(shè)置特殊含義的狀態(tài)代碼時(shí),指定應(yīng)答頭也是很有用的。應(yīng)答頭可以用來完成:設(shè)置Cookie,指定修改日期,指示瀏覽器按照指定的間隔刷新頁面,聲明文檔的長度以便利用持久HTTP連接,…等等許多其他任務(wù)
響應(yīng)體
響應(yīng)體就是響應(yīng)的消息體,如果是純數(shù)據(jù)就是返回純數(shù)據(jù),如果請(qǐng)求的是HTML頁面,那么返回的就是HTML代碼,如果是JS就是JS代碼,如此之類。
響應(yīng)報(bào)文格式
總結(jié)
- 上一篇: PHP开发支付宝微信个人免签支付接口实例
- 下一篇: ts 使用数组 拼接成对象展示