
一、 了解Web及網(wǎng)絡(luò)基礎(chǔ)
TCP/IP協(xié)議族按層次可以分為下面四層:
1. 應(yīng)用層
決定了向用戶(hù)提供應(yīng)用服務(wù)時(shí)通信的活動(dòng),TCP/IP協(xié)議族內(nèi)預(yù)存了各類(lèi)通用的應(yīng)用服務(wù),比如:FTP(文件傳輸協(xié)議)和DNS(域名系統(tǒng))服務(wù)就是其中兩類(lèi),HTTP協(xié)議也處于該層。
2. 傳輸層
對(duì)上層應(yīng)用提供處于網(wǎng)絡(luò)連接中的兩臺(tái)計(jì)算機(jī)之間的數(shù)據(jù)傳輸。在傳輸層有兩個(gè)性質(zhì)不同的協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶(hù)數(shù)據(jù)報(bào)協(xié)議)
3. 網(wǎng)絡(luò)層
用來(lái)處理在網(wǎng)絡(luò)上流動(dòng)的數(shù)據(jù)包,數(shù)據(jù)包是網(wǎng)絡(luò)的傳輸最小數(shù)據(jù)單位,該層規(guī)定了通過(guò)怎樣的路徑(所謂的傳輸路線)到達(dá)對(duì)方計(jì)算機(jī),并把數(shù)據(jù)包傳送給對(duì)方。與對(duì)方計(jì)算機(jī)之間通過(guò)多臺(tái)計(jì)算機(jī)或網(wǎng)絡(luò)設(shè)備進(jìn)行傳輸時(shí),網(wǎng)絡(luò)層所起的作用就是在眾多的選項(xiàng)內(nèi)選擇一條傳輸路線。
4. 鏈路層
用來(lái)處理連接網(wǎng)絡(luò)的硬件部分,包括控制操作系統(tǒng),硬件的設(shè)備驅(qū)動(dòng),NIC,及光纖等物理可見(jiàn)部分(還包括連接器等一切傳輸媒介),硬件上的范疇均在鏈路層的作用范圍之內(nèi)。
利用TCP/IP協(xié)議族進(jìn)行網(wǎng)絡(luò)通信時(shí),會(huì)通過(guò)分層順序與對(duì)方進(jìn)行通信,發(fā)送端從應(yīng)用層往下走,接收端則往應(yīng)用層往上走,就拿發(fā)送端的客戶(hù)端在應(yīng)用層(HTTP協(xié)議)發(fā)出一個(gè)想看某個(gè)Web頁(yè)面的HTTP請(qǐng)求為例,如下圖示:

發(fā)送端在層與層之間傳輸數(shù)據(jù)時(shí),每經(jīng)過(guò)一層時(shí)必定會(huì)被打上一個(gè)該層所屬的首部信息,反之,接收端在層與層傳輸數(shù)據(jù)時(shí),每經(jīng)過(guò)一層時(shí)會(huì)把對(duì)應(yīng)的首部消去,這種把數(shù)據(jù)信息包裝起來(lái)的做法稱(chēng)為封裝。
負(fù)責(zé)傳輸?shù)腎P協(xié)議:作用是把各種數(shù)據(jù)包傳送給對(duì)方,其指明了節(jié)點(diǎn)被分配到的地址,而MAC地址是指網(wǎng)卡所屬的固定地址,IP間的通信依賴(lài)MAC地址,在網(wǎng)絡(luò)上,通信的雙方在同一局域網(wǎng)內(nèi)的情況較少,通常是經(jīng)過(guò)多臺(tái)計(jì)算機(jī)和網(wǎng)絡(luò)設(shè)備中轉(zhuǎn)才能連接到對(duì)方,在中轉(zhuǎn)時(shí),會(huì)利用下一站中轉(zhuǎn)設(shè)備的MAC地址來(lái)搜索下一個(gè)中轉(zhuǎn)目標(biāo),這時(shí),會(huì)采用ARP協(xié)議(ARP是一種用以解析地址的協(xié)議,根據(jù)通信方的IP地址就可以反查出對(duì)應(yīng)的MAC地址)。例子如圖:

TCP協(xié)議為了準(zhǔn)確無(wú)誤的將數(shù)據(jù)送達(dá)目標(biāo)處,TCP協(xié)議采用了三次握手策略,其握手過(guò)程中用了三個(gè)標(biāo)記:FLAG-SYN和ACK,該過(guò)程如圖:

注意:若在握手過(guò)程中某個(gè)階段莫名中斷,TCP協(xié)議會(huì)再次以相同的順序發(fā)送相同的數(shù)據(jù)包。
DNS服務(wù)是和HTTP協(xié)議一樣位于應(yīng)用層的協(xié)議,它提供域名到IP地址之間的解析服務(wù)其兩者關(guān)系如圖:

各種協(xié)議與HTTP協(xié)議的關(guān)系就如圖所示:

URI用字符標(biāo)識(shí)某一互聯(lián)網(wǎng)資源,而URL表示資源的地點(diǎn)(互聯(lián)網(wǎng)上所處的位置),故URL是URI的子集。
URI格式通常包括以下幾個(gè):
- 登錄信息
- 服務(wù)器地址(IP或域名)
- 服務(wù)器端口號(hào)
- 帶層次的文件路徑
- 查詢(xún)字符串
- 片段標(biāo)識(shí)
URI格式例子如圖:

- 黑色:協(xié)議方案名
- 紅色:登陸信息(認(rèn)證)
- 淺綠色:服務(wù)器地址
- 淺藍(lán)色:服務(wù)器端口號(hào)
- 紫色:帶層次的文件路徑
- 深藍(lán)色:查詢(xún)字符串
- 深綠色:片段標(biāo)識(shí)符
二、 簡(jiǎn)單的HTTP協(xié)議
請(qǐng)求報(bào)文:是由請(qǐng)求方法,請(qǐng)求URI,協(xié)議版本,可選的請(qǐng)求首部字段和內(nèi)容實(shí)體構(gòu)成的。
響應(yīng)報(bào)文:基本上由協(xié)議版本,狀態(tài)碼(表示請(qǐng)求成功或失敗的數(shù)字代碼),用以解釋狀態(tài)碼的原因短語(yǔ),可選的響應(yīng)首部字段以及實(shí)體主體構(gòu)成。


HTTP是一種不保存狀態(tài)的協(xié)議,即不保留之前一切的請(qǐng)求或響應(yīng)報(bào)文的信息,為了解決這問(wèn)題,許多網(wǎng)站引入了Cookie技術(shù),例如:許多登陸網(wǎng)站就是用Cookie技術(shù)來(lái)保持登陸狀態(tài)。
告知服務(wù)器意圖的HTTP方法有以下幾個(gè):
- GET:獲取資源,如果請(qǐng)求的資源是文本,那就保持原樣返回,如果是像CGI那樣的程序,則返回經(jīng)過(guò)執(zhí)行后的輸出結(jié)果。
- POST:主要用來(lái)傳輸實(shí)體的主體,而不是獲取響應(yīng)的主體內(nèi)容。
- PUT:傳輸文件,要求請(qǐng)求報(bào)文中包含文件內(nèi)容,但是HTTP/1.1PUT方法自身不帶驗(yàn)證機(jī)制,任何人都可以上傳文件,存在安全性問(wèn)題,故一般有開(kāi)發(fā)此功能的Web網(wǎng)站都會(huì)配合Web應(yīng)用程序的驗(yàn)證機(jī)制,如:REST機(jī)制。
- HEAD:不獲取返回報(bào)文主體部分,而是獲取其URI的有效性及資源更新的日期時(shí)間等首部字段。
- DELETE:用來(lái)刪除文件,但是HTTP/1.1Delete方法自身也不帶驗(yàn)證機(jī)制,任何人都可以刪除文件,存在安全性問(wèn)題,故一般有開(kāi)發(fā)此功能的Web網(wǎng)站都會(huì)配合Web應(yīng)用程序的驗(yàn)證機(jī)制,如:REST機(jī)制。
- OPTIONS:用來(lái)查詢(xún)針對(duì)請(qǐng)求URI指定的資源。
- TRACE:在用其發(fā)送請(qǐng)求時(shí),在Max-Forwards首部字段中填入數(shù)值,每經(jīng)過(guò)一個(gè)服務(wù)器端就將該數(shù)字減1,當(dāng)數(shù)值剛好減到0時(shí),就停止繼續(xù)傳輸,最后接收到請(qǐng)求的服務(wù)器端則返回狀態(tài)碼200OK的響應(yīng),因此可以查詢(xún)發(fā)送出去的請(qǐng)求是怎樣被加工修改的。
- CONNECT:要求在與代理服務(wù)器通信時(shí)建立隧道,實(shí)現(xiàn)用隧道協(xié)議進(jìn)行TCP通信,主要使用SSL和TLS協(xié)議把通信內(nèi)容加密后經(jīng)網(wǎng)絡(luò)隧道傳輸。
HTTP持久連接:keep-alive(持久連接)的特點(diǎn)是,只要任意一端沒(méi)有明確提出斷開(kāi)連接,則保持TCP連接狀態(tài),好處在于減少了TCP連接的重復(fù)建立和斷開(kāi)所造成的額外開(kāi)銷(xiāo),減輕了服務(wù)器端的負(fù)載,也減少了開(kāi)銷(xiāo)的那部分時(shí)間,是HTTP請(qǐng)求和響應(yīng)能夠更早的結(jié)束。

管線化技術(shù)可以讓客戶(hù)端同時(shí)并行發(fā)送多個(gè)請(qǐng)求,而不需要一個(gè)接一個(gè)地等待響應(yīng)。
HTTP是無(wú)狀態(tài)協(xié)議優(yōu)勢(shì)在于它減少服務(wù)器的CPU及內(nèi)存資源的消耗,但它不能保持之前的狀態(tài)進(jìn)行請(qǐng)求處理,這樣需要在登陸認(rèn)證的Web頁(yè)面中那個(gè),每次請(qǐng)求 跳轉(zhuǎn)頁(yè)面都需要再次認(rèn)證登陸或附上請(qǐng)求認(rèn)證參數(shù),因此為了解決這個(gè)問(wèn)題,可以引用Cookie技術(shù),該過(guò)程如圖:


HTTP錯(cuò)誤代碼表
所有 HTTP 狀態(tài)代碼及其定義。
| 代碼 | 指示 |
|---|---|
| 2xx | 成功 |
| 200 | 正常;請(qǐng)求已完成。 |
| 201 | 正常;緊接 POST 命令。 |
| 202 | 正常;已接受用于處理,但處理尚未完成。 |
| 203 | 正常;部分信息 — 返回的信息只是一部分。 |
| 204 | 正常;無(wú)響應(yīng) — 已接收請(qǐng)求,但不存在要回送的信息。 |
| 3xx | 重定向 |
| 301 | 已移動(dòng) — 請(qǐng)求的數(shù)據(jù)具有新的位置且更改是永久的。 |
| 302 | 已找到 — 請(qǐng)求的數(shù)據(jù)臨時(shí)具有不同 URI。 |
| 303 | 請(qǐng)參閱其它 — 可在另一 URI 下找到對(duì)請(qǐng)求的響應(yīng),且應(yīng)使用 GET 方法檢索此響應(yīng)。 |
| 304 | 未修改 — 未按預(yù)期修改文檔。 |
| 305 | 使用代理 — 必須通過(guò)位置字段中提供的代理來(lái)訪問(wèn)請(qǐng)求的資源。 |
| 306 | 未使用 — 不再使用;保留此代碼以便將來(lái)使用。 |
| 4xx | 客戶(hù)機(jī)中出現(xiàn)的錯(cuò)誤 |
| 400 | 錯(cuò)誤請(qǐng)求 — 請(qǐng)求中有語(yǔ)法問(wèn)題,或不能滿(mǎn)足請(qǐng)求。 |
| 401 | 未授權(quán) — 未授權(quán)客戶(hù)機(jī)訪問(wèn)數(shù)據(jù)。 |
| 402 | 需要付款 — 表示計(jì)費(fèi)系統(tǒng)已有效。 |
| 403 | 禁止 — 即使有授權(quán)也不需要訪問(wèn)。 |
| 404 | 找不到 — 服務(wù)器找不到給定的資源;文檔不存在。 |
| 407 | 代理認(rèn)證請(qǐng)求 — 客戶(hù)機(jī)首先必須使用代理認(rèn)證自身。 |
| 415 | 介質(zhì)類(lèi)型不受支持 — 服務(wù)器拒絕服務(wù)請(qǐng)求,因?yàn)椴恢С终?qǐng)求實(shí)體的格式。 |
| 5xx | 服務(wù)器中出現(xiàn)的錯(cuò)誤 |
| 500 | 內(nèi)部錯(cuò)誤 — 因?yàn)橐馔馇闆r,服務(wù)器不能完成請(qǐng)求。 |
| 501 | 未執(zhí)行 — 服務(wù)器不支持請(qǐng)求的工具。 |
| 502 | 錯(cuò)誤網(wǎng)關(guān) — 服務(wù)器接收到來(lái)自上游服務(wù)器的無(wú)效響應(yīng)。 |
| 503 | 無(wú)法獲得服務(wù) — 由于臨時(shí)過(guò)載或維護(hù),服務(wù)器無(wú)法處理請(qǐng)求。 |
| 代碼 | 指示 |
|---|---|
| 400 | 請(qǐng)求無(wú)效 |
| 401.1 | 未授權(quán):登錄失敗 |
| 401.2 | 未授權(quán):服務(wù)器配置問(wèn)題導(dǎo)致登錄失敗 |
| 401.3 | ACL 禁止訪問(wèn)資源 |
| 401.4 | 未授權(quán):授權(quán)被篩選器拒絕 |
| 401.5 | 未授權(quán):ISAPI 或 CGI 授權(quán)失敗 |
| 403 | 禁止訪問(wèn) |
| 403 | 對(duì) Internet 服務(wù)管理器 (HTML) 的訪問(wèn)僅限于 Localhost |
| 403.1 | 禁止訪問(wèn):禁止可執(zhí)行訪問(wèn) |
| 403.2 | 禁止訪問(wèn):禁止讀訪問(wèn) |
| 403.3 | 禁止訪問(wèn):禁止寫(xiě)訪問(wèn) |
| 403.4 | 禁止訪問(wèn):要求 SSL |
| 403.5 | 禁止訪問(wèn):要求 SSL 128 |
| 403.6 | 禁止訪問(wèn):IP 地址被拒絕 |
| 403.7 | 禁止訪問(wèn):要求客戶(hù)證書(shū) |
| 403.8 | 禁止訪問(wèn):禁止站點(diǎn)訪問(wèn) |
| 403.9 | 禁止訪問(wèn):連接的用戶(hù)過(guò)多 |
| 403.10 | 禁止訪問(wèn):配置無(wú)效 |
| 403.11 | 禁止訪問(wèn):密碼更改 |
| 403.12 | 禁止訪問(wèn):映射器拒絕訪問(wèn) |
| 403.13 | 禁止訪問(wèn):客戶(hù)證書(shū)已被吊銷(xiāo) |
| 403.15 | 禁止訪問(wèn):客戶(hù)訪問(wèn)許可過(guò)多 |
| 403.16 | 禁止訪問(wèn):客戶(hù)證書(shū)不可信或者無(wú)效 |
| 403.17 | 禁止訪問(wèn):客戶(hù)證書(shū)已經(jīng)到期或者尚未生效 |
| 404.1 | 無(wú)法找到 Web 站點(diǎn) |
| 404 | 無(wú)法找到文件 |
| 405 | 資源被禁止 |
| 406 | 無(wú)法接受 |
| 407 | 要求代理身份驗(yàn)證 |
| 410 | 永遠(yuǎn)不可用 |
| 412 | 先決條件失敗 |
| 414 | 請(qǐng)求 - URI 太長(zhǎng) |
| 500 | 內(nèi)部服務(wù)器錯(cuò)誤 |
| 500.100 | 內(nèi)部服務(wù)器錯(cuò)誤 - ASP 錯(cuò)誤 |
| 500.11 | 服務(wù)器關(guān)閉 |
| 500.12 | 應(yīng)用程序重新啟動(dòng) |
| 500.13 | 服務(wù)器太忙 |
| 500.14 | 應(yīng)用程序無(wú)效 |
| 500.15 | 不允許請(qǐng)求 global.asa Error |
| 501 | 未實(shí)現(xiàn) |
| 502 | 網(wǎng)關(guān)錯(cuò)誤 |