一、HTTP概述 1.Web服務(wù)器是Web資源(Web resource)的宿主,資源可以是靜態(tài)文件或動態(tài)內(nèi)容 2.MIME類型(Multipurpose Internet Mail Extension,多用途因特網(wǎng)郵件擴(kuò)展),Web服務(wù)器會為所有HTTP對象數(shù)據(jù)附加一個MIME類型,當(dāng)瀏覽器從服務(wù)器取回一個對象時,會去查看相關(guān)的MIME類型 3.統(tǒng)一資源標(biāo)識符(Uniform Resource Identifier,URI),標(biāo)識并定位信息資源,有兩種形式:URL和URN 4.統(tǒng)一資源定位符(URL)是資源標(biāo)識符最常見的形式 5.統(tǒng)一資源名(URN),作為特定內(nèi)容的唯一名稱使用的,與目前的資源所在地?zé)o關(guān),很少使用 6.一個HTTP事務(wù)由一條(從客戶端發(fā)往服務(wù)器的)請求命令和一個(從服務(wù)器發(fā)回客戶端的)響應(yīng)結(jié)果組成,這種通信是通過名為HTTP報文(HTTP message)的格式化數(shù)據(jù)塊進(jìn)行的,包括:方法、狀態(tài)碼以及多個對象 7.HTTP報文是由一行一行的簡單字符串組成的,分為請求報文和響應(yīng)報文,包括:起始行、首部字段、主體 8.HTTP協(xié)議位于TCP的上層,HTTP使用TCP來傳輸其報文數(shù)據(jù) 9.Web的一些結(jié)構(gòu)組件:代理、緩存、網(wǎng)關(guān)、隧道、Agent代理 二、URL與資源 1.URL是瀏覽器尋找信息時所需的資源位置,是人們對HTTP和其他協(xié)議的常用訪問點(diǎn):一個人將瀏覽器指向一個URL,瀏覽器就會在幕后發(fā)送適當(dāng)?shù)膮f(xié)議報文來獲取人們所期望的資源 2.大多數(shù)URL都有同樣的“方案<scheme>://服務(wù)器位置<host> /路徑<path> ”結(jié)構(gòu): <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag> 3.Web常用方案:http、https、mailto、ftp、rtsp,rtspu、file、news、telnet 三、HTTP報文 1.HTTP報文是在HTTP應(yīng)用程序之間發(fā)送的數(shù)據(jù)塊,這些數(shù)據(jù)塊以一些文本形式的元信息(meta-information)開頭 2.HTTP使用術(shù)語流入(inbound)和流出(outbound)來描述事務(wù)處理(transaction)的方向,報文流入源商服務(wù)器,工作完成之后,會流回用戶的Agent代理中 3.HTTP報文是簡單的格式化數(shù)據(jù)塊,每條報文都包含一條來自客戶端的請求,或者一條來自服務(wù)器的響應(yīng),由三個部分組成:對報文進(jìn)行描述的起始行(start line)、包含屬性的首部(header)塊,以及可選的、包含數(shù)據(jù)的主體(body)部分 4.所有的HTTP報文都可以分為:請求報文(request message)和響應(yīng)報文(response message),請求報文會向Web服務(wù)器請求一個動作,響應(yīng)報文會將請求的結(jié)果返回給客戶端
<method> <request-URL> <version> <headers> <entity-body>
<version> <status> <resaon-phrase> <headers> <entity-body> 5.HTTP定義了一組安全方法,GET和HEAD方法都被認(rèn)為是安全的,意味著使用GET或HEAD方法的HTTP請求都不會產(chǎn)生什么動作,但這是由WEB開發(fā)者決定的 6.TRACE方法允許客戶端在最終將請求發(fā)送給服務(wù)器時,看看它變成了什么樣子,主要用于診斷,不能帶有實(shí)體的主體部分,響應(yīng)的實(shí)體主體部分包含了響應(yīng)服務(wù)器收到的請求的精確副本 7.OPTIONS方法請求Web服務(wù)器告知其支持的各種功能,可以詢問服務(wù)器通常支持哪些方法,或者對某些特殊資源支持哪些方法 8.擴(kuò)展方法,不是在正式規(guī)范中定義的,可能大部分服務(wù)器或客戶端并不支持:LOCK、MKCOL、COPY、MOVE 9.狀態(tài)碼:
10.首部:
四、連接管理 1.HTTP要傳送一條報文時,會以流的形式將報文數(shù)據(jù)的內(nèi)容通過一條找開的TCP連接按序傳輸,TCP收到數(shù)據(jù)流之后,會將數(shù)據(jù)流砍成被稱作段的小數(shù)據(jù)塊,并將段封裝在IP分組中,通過因特網(wǎng)進(jìn)行傳輸 2.TCP是通過端口號來保持所有連接的正確運(yùn)行的 3.HTTP緊挨著TCP,位于其上層,所以HTTP事務(wù)的性能在很大程度上取決于底層TCP通道的性能 4.在事務(wù)處理結(jié)束之后仍然保持在打開狀態(tài)的TCP連接被稱為持久連接,HTTP/1.1(或各種HTTP/1.0增強(qiáng)版)允許HTTP設(shè)備在事務(wù)處理結(jié)束之后將TCP連接保持在打開狀態(tài),以便未來的HTTP請求重用現(xiàn)存的連接 5.HTTP/1.0-Keep Alive連接:客戶端必須發(fā)送一個Connection:Keep-Alive請求首部來激活,使用Proxy-Connection解決啞代理問題, 6.HTTP/1.1的持久連接在默認(rèn)情況是激活的,除非顯式使用Connection:close;HTTP/1.1停止了對keep-alive連接的支持 7.HTTP/1.1允許在持久連接上可選地使用請求管道,在響應(yīng)到達(dá)之前,可以將多條請求放入隊(duì)列,當(dāng)?shù)谝粭l請求通過網(wǎng)絡(luò)流向地球另一端的服務(wù)器時,第二條和第三條請求也可以開始發(fā)送了,在高時延網(wǎng)絡(luò)條件下,這樣做可以降低網(wǎng)絡(luò)的環(huán)回時間;不應(yīng)該用管道化的方式發(fā)送會產(chǎn)生副作用的請求(如POST) 8.即使在非錯誤情況下,連接也可以在任意時刻關(guān)閉,HTTP應(yīng)用程序要做好正確處理非預(yù)期關(guān)閉的準(zhǔn)備 9.如果一個事務(wù),不管執(zhí)行一次還是很多次,得到的結(jié)果都相同,這個事務(wù)就是冪等的 五、Web服務(wù)器 1.Web服務(wù)器做些什么:建立連接、接收請求、處理請求、訪問資源、構(gòu)建響應(yīng)、發(fā)送響應(yīng)、處理事務(wù)處理過程 六、代理 1.Web代理(proxy)服務(wù)器是網(wǎng)絡(luò)的中間實(shí)體,代理位于客戶端和服務(wù)器之間,扮演“中間人”的角色,在各端點(diǎn)之間來回傳送HTTP報文 2.單個客戶端專用的代理被稱為私有代理,眾多客戶端共享的代理被稱為公共代理 3.代理連接的是兩個或多個使用相同協(xié)議的應(yīng)用程序,而網(wǎng)關(guān)連接的則是兩個或多個使用不同協(xié)議的端點(diǎn),網(wǎng)關(guān)扮演的是“協(xié)議轉(zhuǎn)換器”的角色,即使客戶端和服務(wù)器使用的是不同的協(xié)議,客戶端也可以通過它完成與服務(wù)器之間的事務(wù)處理 4.代理的作用:兒童過濾器、文檔訪問控制、安全防火墻、Web緩存、反向代理、內(nèi)容路由器、轉(zhuǎn)碼器、匿名者 5.代理服務(wù)器的部署:出口代理、訪問(入口)代理、反向代理、網(wǎng)絡(luò)交換代理 6.Via首部字段包含一個由逗號分隔的路標(biāo)(waypoint),每個路標(biāo)都表示一個獨(dú)立的代理服務(wù)器或網(wǎng)關(guān),且包含與那個中間節(jié)點(diǎn)的協(xié)議和地址有關(guān)的信息 7.TRACE方法,用戶可以跟蹤代理鏈傳輸?shù)恼埱髨笪?,觀察報文經(jīng)過了哪些代理,以及每個代理是如何對請求報文進(jìn)行修改的,對代理的調(diào)試非常有用 七、緩存 1.If-Modified-Since添加到請求中去,只有在緩存了對象的副本之后,又對其進(jìn)行了修改的情況下,才發(fā)送此對象 2.緩存的處理步驟:接收、解析、查詢、新鮮度檢測、創(chuàng)建響應(yīng)、發(fā)送、日志 3.通過HTTP/1.1的Cache-Control首部和HTTP/1.0的Expires首部來指定過期日期,Cache-Control:max-age=100000是相對日期,從文檔第一次生成開始,Expires是絕對日期 4.If-Modified-Since:<date>,如果指定日期之后文檔被修改過了,就執(zhí)行請求的方法,可以與Last-Modified服務(wù)器響應(yīng)首部配合使用 5.If-None-Match:<tags>,服務(wù)器可以為文檔提供特殊的標(biāo)簽(ETag),如果已緩存標(biāo)簽與服務(wù)器文檔中的標(biāo)簽有所不同,就會執(zhí)行所請求的方法 6.HTTP/1.1支持“弱驗(yàn)證器”,如果只對內(nèi)容進(jìn)行了少量修改,就允許服務(wù)器聲明那是“足夠好”的等價體 7.控制緩存的能力:
八、網(wǎng)關(guān)、隧道及中繼 1.應(yīng)用程序可以(通過HTTP或者其他已定義的接口)請求網(wǎng)關(guān)來處理某條請求,網(wǎng)關(guān)可以提供一條響應(yīng) 2.通用網(wǎng)關(guān)接口(Common Gateway Interface,CGI)是一個標(biāo)準(zhǔn)接口集,Web服務(wù)器可以用它來裝載程序以響應(yīng)對特定URL的HTTP請求,并收集程序的輸出數(shù)據(jù),將其放在HTTP響應(yīng)中回送 3.Web隧道(Web tunnel)允許用戶通過HTTP連接發(fā)送非HTTP流量,這樣就可以在HTTP上捎帶其他協(xié)議數(shù)據(jù)了 4.CONNECT方法請求隧道網(wǎng)關(guān)創(chuàng)建一條到達(dá)任意目的服務(wù)器端口的TCP連接,并對客戶端和服務(wù)器之間的后繼數(shù)據(jù)進(jìn)行盲轉(zhuǎn)發(fā) 5.HTTP中繼(relay)是沒有完全遵循HTTP規(guī)范的簡單HTTP代理,中繼負(fù)責(zé)處理HTTP中建立連接的部分,然后對字節(jié)進(jìn)行盲轉(zhuǎn)發(fā) 九、Web機(jī)器人 1.爬蟲爬行時要避免環(huán)路 2.拒絕機(jī)器人訪問標(biāo)準(zhǔn):robots.txt文件 3.robots.txt文件:User-Agent: <robot-name>指定User-Agent首部;Disallow和Allow,禁止或允許訪問的路徑; 4.使得robot-control標(biāo)簽:<META NAME="ROBOTS" CONTENT="NOINDEX | NOFOLLOW | INDEX | FOLLOW | NOARCHIVE | ALL | NONE"/> 十、HTTP-NG 十一、客戶端識別與cookie機(jī)制 1.HTTP首部:
2.產(chǎn)生cookie的服務(wù)器可以向Set-Cookie響應(yīng)首部添加一個Domain屬性來控制哪些站點(diǎn)可以看到那個cookie 3.可以通過path屬性列出的URL路徑前綴下所有cookie都是有效的 十二、基本認(rèn)證機(jī)制 1.HTTP原生的質(zhì)詢/響應(yīng)(challenge/response)框架:Web應(yīng)用程序收到一條HTTP請求報文時,服務(wù)器沒有按照請求執(zhí)行動作,而是以一個”認(rèn)證質(zhì)詢“進(jìn)行響應(yīng)(返回401響應(yīng)),要求用戶提供一些保密信息來說明他是誰,從而對其進(jìn)行質(zhì)詢。用戶戶再次發(fā)起請求時,要附上保密證書(用戶名和密碼) 2.基本認(rèn)證:服務(wù)器可以拒絕一個事務(wù),質(zhì)詢客戶端,請用戶提供有效的用戶名和密碼,服務(wù)器會返回301狀態(tài)碼,而不是200狀態(tài)碼來初始化認(rèn)證質(zhì)詢,并用WWW-Authenticate響應(yīng)首部指定要訪問的安全域,瀏覽器收到質(zhì)詢時,會打開 一個對話框,用戶輸入用戶名和密碼,然后將用戶名和密碼稍加擾碼,再用Authorization請求首部回送給服務(wù)器 3.基本認(rèn)證的安全缺陷:
十三、摘要認(rèn)證 1.摘要認(rèn)證遵循的是“絕不通過網(wǎng)絡(luò)發(fā)磅密碼”,客戶端不會發(fā)送密碼,而是會發(fā)送一個“指紋”或密碼的“摘要”,這是密碼的不可逆擾碼,客戶端和服務(wù)器都知道這個密碼,因此服務(wù)器可以驗(yàn)證所提供的摘要是否與密碼相匹配 2.摘要認(rèn)證的核心就是對公共信息、保密信息和有時限的隨機(jī)值這個組合的單向摘要 3.安全問題:首部篡改、重放攻擊、多重認(rèn)證機(jī)制、詞典攻擊、惡意代理攻擊和中間人攻擊、選擇明文攻擊、存儲密碼 十四、安全HTTP 1.HTTPS在HTTP下面提供了一個傳輸級的密碼安全層——可以使用SSL,也可以使用其后繼者——傳輸層安全(Transport Layer Security, TLS) 2.數(shù)據(jù)簽名是附加在報文上的特殊加密校驗(yàn)碼 3.HTTPS沒有將未加密的HTTP報文發(fā)送給TCP,它在將HTTP報文發(fā)送給TCP之前,先將其發(fā)送給了一個安全層,進(jìn)行加密 4.SSL握手:交換協(xié)議版本號;選擇一個兩端都了解的密碼;對兩端的身份進(jìn)行認(rèn)證;生成臨時的會話密鑰,以便加密信道 十五、實(shí)體和編碼 1.HTTP/1.1實(shí)體首部:
2.除非使用了分塊編碼,否則Content-Length首部就是帶有實(shí)體主體的報文必須使用的,為了能夠檢測出服務(wù)器崩潰而導(dǎo)致的報文截尾,并對共享持久連接的多個報文進(jìn)行正確分段 3.內(nèi)容編碼:gzip、compress、deflate、identity 4.傳輸編碼,作用在實(shí)體主體上的可逆變換,與內(nèi)容的格式無關(guān),是為了改變報文中的數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)姆绞?/p> 5.Transfer-Encoding,告知接收方為了可靠地傳輸報文,已經(jīng)對其進(jìn)行了何種編碼 6.TE,用在請求首部中,告知服務(wù)器可以使用哪些傳輸編碼擴(kuò)展 7.傳輸編碼目前僅有分塊編碼,把報文分割為若干個大小已知的塊,塊之間是緊挨著發(fā)送的 8.范圍請求,允許客戶端實(shí)際上只請求文檔的一部分,或者說某個范圍 9.差異編碼是HTTP協(xié)議的一個擴(kuò)展,通過交換對象改變的部分而不是完整的對象來優(yōu)化傳輸性能 十六、國際化 1.Web服務(wù)器通過在Content-Type首部中使用charset參數(shù)把MIME字符集標(biāo)記發(fā)送給客戶端,可以在HTML內(nèi)容的的META標(biāo)簽指定字符集 2.Content-Language描述實(shí)體的目標(biāo)受眾語言,不僅限于文本文檔 3.可以在Accept-Language首部中放入多個語言標(biāo)記以枚舉所支持的全部語言及其優(yōu)先順序 4.語言標(biāo)記,第一個子標(biāo)記標(biāo)準(zhǔn)化的語言記號,第二個子標(biāo)記國家記號,第三個及以后沒有特殊規(guī)則,如:en_us,zh_cn 5.URL編碼就是對特殊字符進(jìn)行ASC2的十六位編碼 十七、內(nèi)容協(xié)商與轉(zhuǎn)碼 1.內(nèi)容協(xié)商,讓客戶端和服務(wù)器作決定發(fā)送什么內(nèi)容給客戶端最適合,包括客戶端驅(qū)動協(xié)商、服務(wù)器驅(qū)動協(xié)商以及透明協(xié)商 2.透明協(xié)商機(jī)制試圖從服務(wù)器上去除服務(wù)器驅(qū)動協(xié)商所需的負(fù)載,并用中間代理來代理客戶端以使與客戶端的報文交換最小化,服務(wù)器在響應(yīng)中發(fā)送Vary首部,以告知中間節(jié)點(diǎn)需要使用哪些請求首部進(jìn)行內(nèi)容協(xié)商 十八、Web主機(jī)托管 1.Host首部描述了所請求的資源所在的因特網(wǎng)主機(jī)和端口號 十九、發(fā)布系統(tǒng) 二十、重定向與負(fù)載均衡 1.重定向包括:HTTP重定向、DNS重定向、任播尋址、IP MAC轉(zhuǎn)發(fā)、IP地址轉(zhuǎn)發(fā)(NAT)、網(wǎng)元控制協(xié)議(NECP) 2.代理重定向:顯式瀏覽器配置、代理自動配置(PAC協(xié)議)、Web代理自動發(fā)現(xiàn)協(xié)議(WPAD、DHCP) 3.WCCP重定向,可以使路由器將Web流量重定向到代理緩存中去,WCCP負(fù)責(zé)路由器和緩存服務(wù)器之間的通信,這樣路由器就可以對緩存進(jìn)行驗(yàn)證,在緩存之間進(jìn)行負(fù)載均衡,并將特定類型的流量發(fā)送給特定的緩存了 4.ICP(因特網(wǎng)緩存協(xié)議)允許緩存在其兄弟緩存中查找命中內(nèi)容,如果某個緩存中沒有HTTP報文所請求的內(nèi)容,可以查明內(nèi)容是否在附近的兄弟緩存中 5.CARP(緩存陣列路由協(xié)議),是ICP的一個替代協(xié)議 6.HTCP(超文本緩存協(xié)議)允許兄弟緩存之間通過URL和所有的請求及響應(yīng)首部來相互查詢文檔是否存在,以降低錯誤命中的可能 二十一、日志記錄與使用情況跟蹤 1.通常會記錄的字段:HTTP方法、客戶端和服務(wù)器的HTTP版本、所請求資源的URL、響應(yīng)的HTTP狀態(tài)碼、請求和響應(yīng)報文的尺寸、事務(wù)開始時的時間戳、Referer首部和User-Agent首部 |
|