一、 了解Web及網(wǎng)絡(luò)基礎(chǔ)
TCP/IP協(xié)議族按層次可以分為下面四層:
1. 應(yīng)用層
決定了向用戶提供應(yīng)用服務(wù)時通信的活動,TCP/IP協(xié)議族內(nèi)預(yù)存了各類通用的應(yīng)用服務(wù)衰齐,比如:FTP(文件傳輸協(xié)議)和DNS(域名系統(tǒng))服務(wù)就是其中兩類淆攻,HTTP協(xié)議也處于該層。
2. 傳輸層
對上層應(yīng)用提供處于網(wǎng)絡(luò)連接中的兩臺計算機(jī)之間的數(shù)據(jù)傳輸。在傳輸層有兩個性質(zhì)不同的協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報協(xié)議)
3. 網(wǎng)絡(luò)層
用來處理在網(wǎng)絡(luò)上流動的數(shù)據(jù)包,數(shù)據(jù)包是網(wǎng)絡(luò)的傳輸最小數(shù)據(jù)單位赦肋,該層規(guī)定了通過怎樣的路徑(所謂的傳輸路線)到達(dá)對方計算機(jī),并把數(shù)據(jù)包傳送給對方励稳。與對方計算機(jī)之間通過多臺計算機(jī)或網(wǎng)絡(luò)設(shè)備進(jìn)行傳輸時金砍,網(wǎng)絡(luò)層所起的作用就是在眾多的選項(xiàng)內(nèi)選擇一條傳輸路線。
4. 鏈路層
用來處理連接網(wǎng)絡(luò)的硬件部分麦锯,包括控制操作系統(tǒng),硬件的設(shè)備驅(qū)動琅绅,NIC扶欣,及光纖等物理可見部分(還包括連接器等一切傳輸媒介),硬件上的范疇均在鏈路層的作用范圍之內(nèi)千扶。
利用TCP/IP協(xié)議族進(jìn)行網(wǎng)絡(luò)通信時料祠,會通過分層順序與對方進(jìn)行通信,發(fā)送端從應(yīng)用層往下走澎羞,接收端則往應(yīng)用層往上走,就拿發(fā)送端的客戶端在應(yīng)用層(HTTP協(xié)議)發(fā)出一個想看某個Web頁面的HTTP請求為例髓绽,如下圖示:
發(fā)送端在層與層之間傳輸數(shù)據(jù)時,每經(jīng)過一層時必定會被打上一個該層所屬的首部信息妆绞,反之顺呕,接收端在層與層傳輸數(shù)據(jù)時,每經(jīng)過一層時會把對應(yīng)的首部消去括饶,這種把數(shù)據(jù)信息包裝起來的做法稱為封裝株茶。
負(fù)責(zé)傳輸?shù)腎P協(xié)議:作用是把各種數(shù)據(jù)包傳送給對方,其指明了節(jié)點(diǎn)被分配到的地址图焰,而MAC地址是指網(wǎng)卡所屬的固定地址启盛,IP間的通信依賴MAC地址,在網(wǎng)絡(luò)上技羔,通信的雙方在同一局域網(wǎng)內(nèi)的情況較少僵闯,通常是經(jīng)過多臺計算機(jī)和網(wǎng)絡(luò)設(shè)備中轉(zhuǎn)才能連接到對方,在中轉(zhuǎn)時藤滥,會利用下一站中轉(zhuǎn)設(shè)備的MAC地址來搜索下一個中轉(zhuǎn)目標(biāo)鳖粟,這時,會采用ARP協(xié)議(ARP是一種用以解析地址的協(xié)議超陆,根據(jù)通信方的IP地址就可以反查出對應(yīng)的MAC地址)牺弹。例子如圖:
TCP協(xié)議為了準(zhǔn)確無誤的將數(shù)據(jù)送達(dá)目標(biāo)處浦马,TCP協(xié)議采用了三次握手策略,其握手過程中用了三個標(biāo)記:FLAG-SYN和ACK,該過程如圖:
注意:若在握手過程中某個階段莫名中斷张漂,TCP協(xié)議會再次以相同的順序發(fā)送相同的數(shù)據(jù)包晶默。
DNS服務(wù)是和HTTP協(xié)議一樣位于應(yīng)用層的協(xié)議,它提供域名到IP地址之間的解析服務(wù)其兩者關(guān)系如圖:
各種協(xié)議與HTTP協(xié)議的關(guān)系就如圖所示:
URI用字符標(biāo)識某一互聯(lián)網(wǎng)資源航攒,而URL表示資源的地點(diǎn)(互聯(lián)網(wǎng)上所處的位置)磺陡,故URL是URI的子集。
URI格式通常包括以下幾個:
- 登錄信息
- 服務(wù)器地址(IP或域名)
- 服務(wù)器端口號
- 帶層次的文件路徑
- 查詢字符串
- 片段標(biāo)識
URI格式例子如圖:
- 黑色:協(xié)議方案名
- 紅色:登陸信息(認(rèn)證)
- 淺綠色:服務(wù)器地址
- 淺藍(lán)色:服務(wù)器端口號
- 紫色:帶層次的文件路徑
- 深藍(lán)色:查詢字符串
- 深綠色:片段標(biāo)識符
二漠畜、 簡單的HTTP協(xié)議
請求報文:是由請求方法币他,請求URI,協(xié)議版本憔狞,可選的請求首部字段和內(nèi)容實(shí)體構(gòu)成的蝴悉。
響應(yīng)報文:基本上由協(xié)議版本,狀態(tài)碼(表示請求成功或失敗的數(shù)字代碼)瘾敢,用以解釋狀態(tài)碼的原因短語拍冠,可選的響應(yīng)首部字段以及實(shí)體主體構(gòu)成。
HTTP是一種不保存狀態(tài)的協(xié)議簇抵,即不保留之前一切的請求或響應(yīng)報文的信息庆杜,為了解決這問題,許多網(wǎng)站引入了Cookie技術(shù)碟摆,例如:許多登陸網(wǎng)站就是用Cookie技術(shù)來保持登陸狀態(tài)晃财。
告知服務(wù)器意圖的HTTP方法有以下幾個:
- GET:獲取資源,如果請求的資源是文本典蜕,那就保持原樣返回断盛,如果是像CGI那樣的程序,則返回經(jīng)過執(zhí)行后的輸出結(jié)果愉舔。
- POST:主要用來傳輸實(shí)體的主體郑临,而不是獲取響應(yīng)的主體內(nèi)容。
- PUT:傳輸文件屑宠,要求請求報文中包含文件內(nèi)容厢洞,但是HTTP/1.1PUT方法自身不帶驗(yàn)證機(jī)制,任何人都可以上傳文件典奉,存在安全性問題躺翻,故一般有開發(fā)此功能的Web網(wǎng)站都會配合Web應(yīng)用程序的驗(yàn)證機(jī)制,如:REST機(jī)制卫玖。
- HEAD:不獲取返回報文主體部分公你,而是獲取其URI的有效性及資源更新的日期時間等首部字段。
- DELETE:用來刪除文件假瞬,但是HTTP/1.1Delete方法自身也不帶驗(yàn)證機(jī)制陕靠,任何人都可以刪除文件迂尝,存在安全性問題,故一般有開發(fā)此功能的Web網(wǎng)站都會配合Web應(yīng)用程序的驗(yàn)證機(jī)制剪芥,如:REST機(jī)制垄开。
- OPTIONS:用來查詢針對請求URI指定的資源。
- TRACE:在用其發(fā)送請求時税肪,在Max-Forwards首部字段中填入數(shù)值溉躲,每經(jīng)過一個服務(wù)器端就將該數(shù)字減1,當(dāng)數(shù)值剛好減到0時益兄,就停止繼續(xù)傳輸锻梳,最后接收到請求的服務(wù)器端則返回狀態(tài)碼200OK的響應(yīng),因此可以查詢發(fā)送出去的請求是怎樣被加工修改的净捅。
- CONNECT:要求在與代理服務(wù)器通信時建立隧道疑枯,實(shí)現(xiàn)用隧道協(xié)議進(jìn)行TCP通信,主要使用SSL和TLS協(xié)議把通信內(nèi)容加密后經(jīng)網(wǎng)絡(luò)隧道傳輸蛔六。
HTTP持久連接:keep-alive(持久連接)的特點(diǎn)是神汹,只要任意一端沒有明確提出斷開連接,則保持TCP連接狀態(tài)古今,好處在于減少了TCP連接的重復(fù)建立和斷開所造成的額外開銷,減輕了服務(wù)器端的負(fù)載滔以,也減少了開銷的那部分時間捉腥,是HTTP請求和響應(yīng)能夠更早的結(jié)束。
管線化技術(shù)可以讓客戶端同時并行發(fā)送多個請求你画,而不需要一個接一個地等待響應(yīng)抵碟。
HTTP是無狀態(tài)協(xié)議優(yōu)勢在于它減少服務(wù)器的CPU及內(nèi)存資源的消耗,但它不能保持之前的狀態(tài)進(jìn)行請求處理坏匪,這樣需要在登陸認(rèn)證的Web頁面中那個拟逮,每次請求 跳轉(zhuǎn)頁面都需要再次認(rèn)證登陸或附上請求認(rèn)證參數(shù),因此為了解決這個問題适滓,可以引用Cookie技術(shù)敦迄,該過程如圖:
HTTP錯誤代碼表
所有 HTTP 狀態(tài)代碼及其定義。
代碼 | 指示 |
---|---|
2xx | 成功 |
200 | 正常凭迹;請求已完成罚屋。 |
201 | 正常;緊接 POST 命令嗅绸。 |
202 | 正常脾猛;已接受用于處理,但處理尚未完成鱼鸠。 |
203 | 正常猛拴;部分信息 — 返回的信息只是一部分羹铅。 |
204 | 正常;無響應(yīng) — 已接收請求愉昆,但不存在要回送的信息职员。 |
3xx | 重定向 |
301 | 已移動 — 請求的數(shù)據(jù)具有新的位置且更改是永久的。 |
302 | 已找到 — 請求的數(shù)據(jù)臨時具有不同 URI撼唾。 |
303 | 請參閱其它 — 可在另一 URI 下找到對請求的響應(yīng)廉邑,且應(yīng)使用 GET 方法檢索此響應(yīng)。 |
304 | 未修改 — 未按預(yù)期修改文檔倒谷。 |
305 | 使用代理 — 必須通過位置字段中提供的代理來訪問請求的資源哟绊。 |
306 | 未使用 — 不再使用;保留此代碼以便將來使用谜诫。 |
4xx | 客戶機(jī)中出現(xiàn)的錯誤 |
400 | 錯誤請求 — 請求中有語法問題碴卧,或不能滿足請求。 |
401 | 未授權(quán) — 未授權(quán)客戶機(jī)訪問數(shù)據(jù)抖格。 |
402 | 需要付款 — 表示計費(fèi)系統(tǒng)已有效诺苹。 |
403 | 禁止 — 即使有授權(quán)也不需要訪問。 |
404 | 找不到 — 服務(wù)器找不到給定的資源雹拄;文檔不存在收奔。 |
407 | 代理認(rèn)證請求 — 客戶機(jī)首先必須使用代理認(rèn)證自身。 |
415 | 介質(zhì)類型不受支持 — 服務(wù)器拒絕服務(wù)請求滓玖,因?yàn)椴恢С终埱髮?shí)體的格式坪哄。 |
5xx | 服務(wù)器中出現(xiàn)的錯誤 |
500 | 內(nèi)部錯誤 — 因?yàn)橐馔馇闆r,服務(wù)器不能完成請求势篡。 |
501 | 未執(zhí)行 — 服務(wù)器不支持請求的工具翩肌。 |
502 | 錯誤網(wǎng)關(guān) — 服務(wù)器接收到來自上游服務(wù)器的無效響應(yīng)。 |
503 | 無法獲得服務(wù) — 由于臨時過載或維護(hù)禁悠,服務(wù)器無法處理請求念祭。 |
代碼 | 指示 |
---|---|
400 | 請求無效 |
401.1 | 未授權(quán):登錄失敗 |
401.2 | 未授權(quán):服務(wù)器配置問題導(dǎo)致登錄失敗 |
401.3 | ACL 禁止訪問資源 |
401.4 | 未授權(quán):授權(quán)被篩選器拒絕 |
401.5 | 未授權(quán):ISAPI 或 CGI 授權(quán)失敗 |
403 | 禁止訪問 |
403 | 對 Internet 服務(wù)管理器 (HTML) 的訪問僅限于 Localhost |
403.1 | 禁止訪問:禁止可執(zhí)行訪問 |
403.2 | 禁止訪問:禁止讀訪問 |
403.3 | 禁止訪問:禁止寫訪問 |
403.4 | 禁止訪問:要求 SSL |
403.5 | 禁止訪問:要求 SSL 128 |
403.6 | 禁止訪問:IP 地址被拒絕 |
403.7 | 禁止訪問:要求客戶證書 |
403.8 | 禁止訪問:禁止站點(diǎn)訪問 |
403.9 | 禁止訪問:連接的用戶過多 |
403.10 | 禁止訪問:配置無效 |
403.11 | 禁止訪問:密碼更改 |
403.12 | 禁止訪問:映射器拒絕訪問 |
403.13 | 禁止訪問:客戶證書已被吊銷 |
403.15 | 禁止訪問:客戶訪問許可過多 |
403.16 | 禁止訪問:客戶證書不可信或者無效 |
403.17 | 禁止訪問:客戶證書已經(jīng)到期或者尚未生效 |
404.1 | 無法找到 Web 站點(diǎn) |
404 | 無法找到文件 |
405 | 資源被禁止 |
406 | 無法接受 |
407 | 要求代理身份驗(yàn)證 |
410 | 永遠(yuǎn)不可用 |
412 | 先決條件失敗 |
414 | 請求 - URI 太長 |
500 | 內(nèi)部服務(wù)器錯誤 |
500.100 | 內(nèi)部服務(wù)器錯誤 - ASP 錯誤 |
500.11 | 服務(wù)器關(guān)閉 |
500.12 | 應(yīng)用程序重新啟動 |
500.13 | 服務(wù)器太忙 |
500.14 | 應(yīng)用程序無效 |
500.15 | 不允許請求 global.asa Error |
501 | 未實(shí)現(xiàn) |
502 | 網(wǎng)關(guān)錯誤 |