1.1 HTTP——因特網(wǎng)的多媒體信使
HTTP使用的是可靠的數(shù)據(jù)傳輸協(xié)議,可以從遍布全世界的Web服務(wù)器上將這些信息快迅速、便捷凌彬、可靠地搬移到人們桌面上的Web瀏覽器上去吗铐。
1.2 Web客戶端和服務(wù)器
web內(nèi)容都是存儲(chǔ)在Web服務(wù)器上的。Web服務(wù)器所使用的是HTTP協(xié)議乌叶,因此經(jīng)常會(huì)被稱為HTTP服務(wù)器。這些HTTP服務(wù)器存儲(chǔ)了因特網(wǎng)中的數(shù)據(jù),如果HTTP客戶端發(fā)出請(qǐng)求的話伯铣。它們會(huì)提供數(shù)據(jù)÷秩遥客戶端向服務(wù)器發(fā)送HTTP請(qǐng)求腔寡,服務(wù)器會(huì)在HTTP響應(yīng)中回送所請(qǐng)求的數(shù)據(jù)。HTTP客戶端和HTTP服務(wù)器共同構(gòu)成了萬維網(wǎng)的基本組件蜡感。
瀏覽一個(gè)頁面時(shí)(http://www.oreilly.com/index.html),瀏覽器會(huì)向服務(wù)器www.oreilly.com發(fā)送一條HTTP請(qǐng)求蹬蚁。服務(wù)器會(huì)去尋找所期望的對(duì)象(index.html),如果成功郑兴,就將對(duì)象犀斋、對(duì)象類型、對(duì)象長(zhǎng)度以及其它一些信息放在HTTP響應(yīng)中發(fā)送給客戶端情连。
1.3 資源
Web服務(wù)器是Web資源的宿主叽粹。最簡(jiǎn)單的Web資源就是Web服務(wù)器文件系統(tǒng)中的靜態(tài)文件。這些文件可以包含任意內(nèi)容:文本文件、HTML文件虫几、微軟的Word文件锤灿、Adobe的Acrobat文件、JPEG圖片文件辆脸、AVI電影文件但校,或所有其他你能夠想到格式。
但資源不一定非的是靜態(tài)文件啡氢。資源還可以是根據(jù)需要生成內(nèi)容的軟件程序状囱。這些動(dòng)態(tài)內(nèi)容資源可以根據(jù)你的身份、所請(qǐng)求的信息或每天的不同時(shí)段來產(chǎn)生內(nèi)容倘是。
1.3.1 媒體類型
因特網(wǎng)上有數(shù)千種不同的數(shù)據(jù)類型亭枷,HTTP仔細(xì)地給每種要通過Web傳輸?shù)膶?duì)象都打上了名為MIME類型的數(shù)據(jù)格式標(biāo)簽。最初設(shè)計(jì)MIME是為了解決在不同的電子郵件系統(tǒng)之間搬移報(bào)文時(shí)存在的問題搀崭。MIME在電子郵件系統(tǒng)中工作的非常好叨粘,因此HTTP也采納了它,用它來描述并標(biāo)記多媒體內(nèi)容瘤睹。
Web服務(wù)器會(huì)為所有HTTP對(duì)象數(shù)據(jù)附加一個(gè)MIME類型升敲。當(dāng)Web瀏覽器從服務(wù)器中取回一個(gè)對(duì)象時(shí),會(huì)去查看相關(guān)的MIME類型默蚌,看看它是否知道應(yīng)該如何處理這個(gè)對(duì)象冻晤。大多數(shù)瀏覽器都可以處理數(shù)百種常見的對(duì)象類型:顯示圖片文件、簡(jiǎn)析并格式化HTML文件绸吸、通過計(jì)算機(jī)聲卡播放音頻文件鼻弧,或者運(yùn)行外部插件軟件來處理特殊格式的數(shù)據(jù)。
MIME類型是一種文本標(biāo)記锦茁,表示一種主要的對(duì)象類型和一個(gè)特定的子類型攘轩,中間由一條斜杠來分隔。
HTML格式的文本文檔由test/html類型來標(biāo)記码俩。
JPEG格式的圖片為image/jpeg類型度帮。
1.3.2 URI
每個(gè)Web服務(wù)器資源都有一個(gè)名字,這樣客戶端就可以說明它們感興趣的資源是什么了稿存。服務(wù)器資源名被稱為統(tǒng)一資源標(biāo)識(shí)符(URI)笨篷,在世界范圍內(nèi)唯一標(biāo)識(shí)并定位信息資源。
URI有兩種形式瓣履,分別稱為URL和URN率翅。
1.3.3 URL
統(tǒng)一資源定位符(URL)是資源標(biāo)識(shí)符最常見的形式。URL描述了一臺(tái)特定服務(wù)器上某資源的特定位置袖迎。它們可以明確說明如何從一個(gè)精確冕臭、固定的位置獲取資源腺晾。
包含三個(gè)部分:
(1)方案,說明訪問資源的協(xié)議類型辜贵,通常為http協(xié)議
(2)服務(wù)器的因特網(wǎng)地址
(3)指定了Web服務(wù)器上的某個(gè)資源
1.3.4 URN
統(tǒng)一資源名(URN) 在實(shí)驗(yàn)階段悯蝉,未大范圍使用。
1.4 事務(wù)
客戶端是怎么通過HTTP與Web服務(wù)器及其資源進(jìn)行事務(wù)處理的托慨。
一個(gè)HTTP事務(wù)由一條(從客戶端發(fā)往服務(wù)器的)請(qǐng)求命令和一個(gè)(從服務(wù)器發(fā)回客戶端的)響應(yīng)結(jié)果組成鼻由。這種通信是通過名為HTTP報(bào)文(HTTP message)的格式化數(shù)據(jù)塊進(jìn)行的。
1.4.1 方法
HTTP支持幾種不同的請(qǐng)求命令榴芳,這些命令被稱為HTTP方法(HTTP method)嗡靡。每條HTTP請(qǐng)求報(bào)文都包含一個(gè)方法。這些方法會(huì)告訴服務(wù)器要執(zhí)行什么動(dòng)作窟感。
以下列出五種常見的HTTP方法
GET? 從服務(wù)器向客戶端發(fā)送命名資源
PUT? ?將來自客戶端的數(shù)據(jù)存儲(chǔ)到一個(gè)命名的服務(wù)器資源中去
DELETE? ? 從服務(wù)器中刪除命名資源
POST? 將客戶端數(shù)據(jù)發(fā)送到一個(gè)服務(wù)器網(wǎng)關(guān)應(yīng)用程序
HEAD? ?僅發(fā)送命名資源響應(yīng)中的HTTP首部
1.4.2 狀態(tài)碼
每條HTTP響應(yīng)報(bào)文返回時(shí)都會(huì)攜帶一個(gè)狀態(tài)碼。狀態(tài)碼是一個(gè)三位數(shù)字的代碼歉井,告知客戶端請(qǐng)求是否成功柿祈,或者是否需要采取其他動(dòng)作。
100~199? 信息性狀態(tài)碼
200~299? ?成功狀態(tài)碼
300~399? ?重定向狀態(tài)碼
400~499? ?客戶端錯(cuò)誤狀態(tài)碼
500~599? ?服務(wù)器錯(cuò)誤狀態(tài)碼
300? 客戶端請(qǐng)求一個(gè)實(shí)際指向多個(gè)資源的URL時(shí)會(huì)返回這個(gè)狀態(tài)碼哩至。
301? ?在請(qǐng)求的URL已被移除時(shí)使用躏嚎。
302? ?與301類似
303? ?告知客戶端應(yīng)該用另一個(gè)URL來獲取資源。
304? ?客戶端可以通過所包含的請(qǐng)求首部菩貌,使其請(qǐng)求變成有條件的卢佣。
305? ?用來說明必須通過一個(gè)代理來訪問資源。
306? ?當(dāng)前未使用
307? ?與301類似
1.4.3 Web頁面中可以包含多個(gè)對(duì)象
應(yīng)用程序完成一項(xiàng)任務(wù)時(shí)通常會(huì)發(fā)布多個(gè)HTTP事務(wù)箭阶。比如虚茶,Web瀏覽器會(huì)發(fā)布一系列HTTP事務(wù)來獲取并顯示一個(gè)包含了豐富圖片的Web頁面。這些嵌入式資源甚至可能位于不同的服務(wù)器上仇参。因此嘹叫,一個(gè)“Web頁面”通常并不是單個(gè)資源,而是一組資源的集合诈乒。
1.5 報(bào)文
HTTP報(bào)文包括以下三個(gè)部分:
起始行? ?
首部字段
主體
1.6 連接
概要介紹了HTTP報(bào)文的構(gòu)成之后罩扇,我們來討論一下報(bào)文是如何通過傳輸控制協(xié)議(TCP)連接從一個(gè)地方搬移到另一個(gè)地方去的。
1.6.1 TCP/IP
HTTP是個(gè)應(yīng)用層協(xié)議怕磨。HTTP無需操心網(wǎng)絡(luò)通信的具體細(xì)節(jié)喂饥;它把聯(lián)網(wǎng)的細(xì)節(jié)都交給了通用、可靠的因特網(wǎng)傳輸協(xié)議TCP/IP肠鲫。
TCP提供了:
(1)無差錯(cuò)的數(shù)據(jù)傳輸员帮;
(2)按序傳輸(數(shù)據(jù)總是會(huì)按照發(fā)送的順序到達(dá));
(3)未分段的數(shù)據(jù)流(可以在任意時(shí)刻以任意尺寸將數(shù)據(jù)發(fā)送出去)
只要建立了TCP連接滩届,客戶端和服務(wù)器之間的報(bào)文交換就不會(huì)丟失集侯、不會(huì)被破壞被啼,也不會(huì)在接收時(shí)出現(xiàn)錯(cuò)序了。
用網(wǎng)絡(luò)術(shù)語來說棠枉,HTTP協(xié)議位于TCP的上層浓体。HTTP使用TCP來傳輸其報(bào)文數(shù)據(jù)。與之類似辈讶,TCP則位于IP的上層命浴。(HTTP 網(wǎng)絡(luò)協(xié)議棧)
HTTP連接實(shí)際上就是TCP連接及其使用規(guī)則。TCP流是分段的贱除、由IP分組傳送生闲。
TCP的數(shù)據(jù)是通過名為IP分組(或IP數(shù)據(jù)報(bào))的小數(shù)據(jù)塊來發(fā)送的。HTTP就是“HTTP over TCP over IP”這個(gè)協(xié)議棧中的最頂層了月幌。其安全版本HTTPS就是在HTTP和TCP之間插入了一個(gè)(稱為TLS或SSL的)密碼加密層碍讯。
TCP連接握手需要經(jīng)過以下幾個(gè)步驟:
(1)請(qǐng)求新的TCP連接時(shí),客戶端要向服務(wù)器發(fā)送一個(gè)小的TCP分組扯躺。這個(gè)分組中設(shè)置了一個(gè)特殊的SYN標(biāo)記捉兴,說明這是一個(gè)連接請(qǐng)求。
(2)如果服務(wù)器接受了連接录语,就會(huì)對(duì)一些連接參數(shù)進(jìn)行計(jì)算倍啥,并向客戶端回送一個(gè)TCP分組,這個(gè)分組中的SYN和ACK標(biāo)記都被置位澎埠,說明連接請(qǐng)求已被接受虽缕。
(3)最后,客戶端向服務(wù)器回送一條確認(rèn)信息蒲稳,通知它連接已成功建立〉鳎現(xiàn)代的TCP棧都允許客戶端在這個(gè)確認(rèn)分組中發(fā)送數(shù)據(jù)。
TCP的慢啟動(dòng):TCP數(shù)據(jù)的傳輸性能還取決于TCP連接的使用期弟塞。TCP連接會(huì)隨著時(shí)間進(jìn)行自我“調(diào)諧”凭峡,起初會(huì)限制連接的最大速度,如果數(shù)據(jù)成功傳輸决记,會(huì)隨著時(shí)間的推移提高傳輸?shù)乃俣却菁健_@種調(diào)諧被稱為TCP慢啟動(dòng),用于防止因特網(wǎng)的突然過載和擁塞系宫。
1.6.2 連接索昂、IP地址及端口號(hào)
在HTTP客戶端向服務(wù)器發(fā)送報(bào)文之前,需要用網(wǎng)際協(xié)議(IP)地址和端口號(hào)在客戶端和服務(wù)器之間建立一條TCP/IP連接扩借。
在TCP中椒惨,你需要知道服務(wù)器的IP地址,以及在服務(wù)器上運(yùn)行的特定軟件相關(guān)的TCP端口號(hào)潮罪。通過URL來獲得:
http://207.200.83.29:80/index.html
http://www.netscape.com:80/index.html
http://www.netscape.com/index.html
第一個(gè)URL使用了機(jī)器的IP地址康谆,207.200.83.29以及端口號(hào)80
第二個(gè)URL沒有使用數(shù)字形式的IP地址领斥,它使用的是文本形式的域名,或者稱為主機(jī)名(www.netscape.com)沃暗。主機(jī)名就是IP地址比較人性化的別稱月洛。可以通過一種稱為域名服務(wù)(DNS)的機(jī)制方便地將主機(jī)名轉(zhuǎn)換為IP地址孽锥,這樣所有問題就都可以解決了嚼黔。
最后一個(gè)URL沒有端口號(hào)。HTTP的URL中沒有端口號(hào)時(shí)惜辑,可以假設(shè)默認(rèn)端口號(hào)是80唬涧。
有了IP地址和端口號(hào),客戶端就可以很方便地通過TCP/IP進(jìn)行通信了盛撑。
基本的瀏覽器連接處理碎节,步驟如下:
(a)瀏覽器從URL中解析出服務(wù)器的主機(jī)名;
(b)瀏覽器將服務(wù)器的主機(jī)名轉(zhuǎn)換成服務(wù)器的IP地址撵彻;
(c)瀏覽器將端口號(hào)(如果有的話)從URL中解析出來钓株;
(d)瀏覽器建立一條與Web服務(wù)器的TCP連接;
(e)瀏覽器向服務(wù)器發(fā)送一條HTTP請(qǐng)求報(bào)文陌僵;
(f)服務(wù)器向?yàn)g覽器回送一條HTTP響應(yīng)報(bào)文;
(g)關(guān)閉連接创坞,瀏覽器顯示文檔碗短。
1.7 Web的結(jié)構(gòu)組件
我們重點(diǎn)介紹了兩個(gè)Web應(yīng)用程序(Web瀏覽器和Web服務(wù)器)是如何相互發(fā)送報(bào)文來實(shí)現(xiàn)基本事務(wù)處理的。在因特網(wǎng)上题涨,要與很多Web應(yīng)用程序進(jìn)行交互偎谁。在本節(jié)中,我們將列出其他一些比較重要的應(yīng)用程序纲堵,如下所示:
(1)代理
位于客戶端和服務(wù)器之間的HTTP中間實(shí)體巡雨。
代理位于客戶端與服務(wù)器之間,接收所有客戶端的HTTP請(qǐng)求席函,并將這些請(qǐng)求轉(zhuǎn)發(fā)給服務(wù)器(可能會(huì)對(duì)請(qǐng)求進(jìn)行修改之后轉(zhuǎn)發(fā))铐望。對(duì)用戶來說,這些應(yīng)用程序就是一個(gè)代理茂附,代表用戶訪問服務(wù)器正蛙。代理還可以對(duì)請(qǐng)求和響應(yīng)進(jìn)行過濾。
(2)緩存
HTTP的倉(cāng)庫营曼,使常用頁面的副本可以保存在離客戶端更近的地方乒验。
Web緩存或代理緩存是一種特殊的HTTP代理服務(wù)器,可以將經(jīng)過代理傳送的常用文檔復(fù)制保存起來蒂阱。下一個(gè)請(qǐng)求同一文檔的客戶端就可以享受緩存的私有副本所提供的服務(wù)了锻全。
客戶端從附近的緩存下載文檔會(huì)比從遠(yuǎn)程Web服務(wù)器下載快得多狂塘。HTTP定義了很多功能,使得緩存更加高效鳄厌,并規(guī)范了文檔的新鮮度和緩存內(nèi)容的隱私性荞胡。
使用緩存有下列優(yōu)點(diǎn):
* 緩存減少了冗余的數(shù)據(jù)傳輸,節(jié)省了你的網(wǎng)絡(luò)費(fèi)用部翘。
* 緩存緩解了網(wǎng)絡(luò)瓶頸的問題硝训。不需要更多的帶寬就能夠更快地加載頁面。
* 緩存降低了對(duì)原始服務(wù)器的要求新思。服務(wù)器可以更快地響應(yīng)窖梁,避免過載的出現(xiàn)。
* 緩存降低了距離時(shí)延夹囚,因?yàn)閺妮^遠(yuǎn)的地方加載頁面會(huì)更慢一些纵刘。
緩存的處理步驟:
1) 接收——緩存從網(wǎng)絡(luò)中讀取抵達(dá)的請(qǐng)求報(bào)文。
2) 解析——緩存對(duì)報(bào)文進(jìn)行解析荸哟,提取出URL和各種首部假哎。
3)查詢——緩存查看是否有本地副本可用,如果沒有鞍历,就獲取一份副本(并將其保存在本地)
4)新鮮度檢測(cè)——緩存查看已緩存副本是否足夠新鮮舵抹,如果不是,就詢問服務(wù)器是否有任何更新劣砍。
5)創(chuàng)建響應(yīng)——緩存會(huì)用新的首部和已緩存的主體來構(gòu)建一條響應(yīng)報(bào)文惧蛹。
6)發(fā)送——緩存通過網(wǎng)絡(luò)將響應(yīng)發(fā)回給客戶端。
7)日志——緩存可選地創(chuàng)建一個(gè)日志文件條目來描述這個(gè)事務(wù)刑枝。
(3)網(wǎng)關(guān)
連接其他應(yīng)用程序的特殊Web服務(wù)器香嗓。
網(wǎng)關(guān)是一種特殊的服務(wù)器,作為其他服務(wù)器的中間實(shí)體使用装畅。通常用于將HTTP流量轉(zhuǎn)換成其他的協(xié)議靠娱。
例如,一個(gè)HTTP/FTP網(wǎng)關(guān)會(huì)通過HTTP請(qǐng)求接收對(duì)FTP URI的請(qǐng)求掠兄,但通過FTP協(xié)議來獲取文檔像云。得到的文檔會(huì)被封裝成一條HTTP報(bào)文,發(fā)送給客戶端徽千。
(4)隧道
對(duì)HTTP通信報(bào)文進(jìn)行盲轉(zhuǎn)發(fā)的特殊代理苫费。
隧道是建立起來以后,就會(huì)在兩條連接之間對(duì)原始數(shù)據(jù)進(jìn)行盲轉(zhuǎn)發(fā)的HTTP應(yīng)用程序双抽。HTTP隧道通常用來在一條或多條HTTP連接上轉(zhuǎn)發(fā)非HTTP數(shù)據(jù)百框,轉(zhuǎn)發(fā)時(shí)不會(huì)窺探數(shù)據(jù)。
HTTP隧道的一種常見用途是通過HTTP連接承載加密的安全套接字層(SSL)流量牍汹,這樣SSL流量就可以穿過只允許Web流量通過的防火墻了铐维。
(5)Agent代理
發(fā)起自動(dòng)HTTP請(qǐng)求的半智能Web客戶端柬泽。
用戶Agent代理是代表用戶發(fā)起HTTP請(qǐng)求的客戶端程序。所有發(fā)布Web請(qǐng)求的應(yīng)用程序都是HTTP Agent代理嫁蛇。到目前為止锨并,我們只提到過一種HTTP Agent代理:Web 瀏覽器,但用戶Agent代理還有很多其它類型睬棚。
1.8 客戶端識(shí)別與cookie機(jī)制
cookie 是當(dāng)前識(shí)別用戶第煮,實(shí)現(xiàn)持久會(huì)話的最好方式。
cookie的存在也影響了緩存抑党,大多數(shù)緩存和瀏覽器都不允許對(duì)任何cookie的內(nèi)容進(jìn)行緩存包警。
1.8.1 cookie的類型
可以籠統(tǒng)的將cookie分為兩類:會(huì)話cookie和持久cookie。
會(huì)話cookie是一種臨時(shí)cookie底靠,它記錄了用戶訪問站點(diǎn)時(shí)的設(shè)置和偏好害晦。用戶退出瀏覽器時(shí),會(huì)話cookie就被刪除了暑中。持久cookie的生存時(shí)間更長(zhǎng)一些壹瘟;它們存儲(chǔ)在硬盤上,瀏覽器退出鳄逾,計(jì)算機(jī)重啟時(shí)它們?nèi)匀淮嬖诘竟臁Mǔ?huì)用持久cookie維護(hù)某個(gè)用戶會(huì)周期性訪問的站點(diǎn)的配置文件或登錄名。
會(huì)話cookie和持久cookie之間唯一的區(qū)別就是它們的過期時(shí)間雕凹。
1.8.2 cookie是如何工作的
cookie就像服務(wù)器給用戶貼的“嗨澄者,我叫”的貼紙一樣。用戶訪問一個(gè)Web站點(diǎn)時(shí)请琳,這個(gè)Web站點(diǎn)就可以讀取那個(gè)服務(wù)器貼在用戶身上的所有貼紙。
用戶首次訪問Web站點(diǎn)時(shí)赠幕,Web服務(wù)器對(duì)用戶一無所知俄精。Web服務(wù)器希望這個(gè)用戶會(huì)再次回來,所以想給這個(gè)用戶“拍上”一個(gè)獨(dú)有的cookie榕堰,這樣以后它就可以識(shí)別出這個(gè)用戶了竖慧。cookie中包含了一個(gè)由名字=值,這樣的信息構(gòu)成的任意列表逆屡,并通過set-Cookie或Set-Cookie2 HTTP響應(yīng)(擴(kuò)展)首部將其貼到用戶身上去圾旨。
cookie中可以包含任意信息,但它們通常都只包含一個(gè)服務(wù)器為了進(jìn)行跟蹤而產(chǎn)生的獨(dú)特的識(shí)別碼魏蔗。比如砍的,服務(wù)器會(huì)將一個(gè)表示id="23456"的cookie貼到用戶上去。服務(wù)器可以用這個(gè)數(shù)字來查找服務(wù)器為其訪問者積累的數(shù)據(jù)庫信息莺治。但是廓鞠,cookie并不僅限于ID號(hào)帚稠。很多Web服務(wù)器都會(huì)將信息直接保存在cookie中。瀏覽器會(huì)記住從服務(wù)器返回的Set-Cookie或Set-Cookie2首部中的cookie內(nèi)容床佳,并將cookie集存儲(chǔ)在瀏覽器的cookie數(shù)據(jù)庫中滋早。將來用戶返回同一個(gè)站點(diǎn)時(shí),瀏覽器會(huì)挑中那個(gè)服務(wù)器貼到用戶上的那些cookie砌们,并在一個(gè)cookie請(qǐng)求首部中將其傳回去杆麸。
1.8.3 不同站點(diǎn)使用不同的cookie
瀏覽器內(nèi)部的cookie罐中可以有成百上千個(gè)cookie,但瀏覽器不會(huì)將每個(gè)cookie都發(fā)送給所有的站點(diǎn)浪感。實(shí)際上昔头,它們通常只向每個(gè)站點(diǎn)發(fā)送2~3個(gè)cookie。cookie就是由服務(wù)器貼到客戶端上篮撑,由客戶端維護(hù)的狀態(tài)片段减细,只會(huì)回送給那些合適的站點(diǎn)。
1.8.4 cookie與會(huì)話跟蹤
可以用cookie在用戶與某個(gè)Web站點(diǎn)進(jìn)行多項(xiàng)事務(wù)處理時(shí)對(duì)用戶進(jìn)行跟蹤赢笨。電子商務(wù)Web站點(diǎn)用會(huì)話cookie在用戶瀏覽時(shí)記錄下用戶的購(gòu)物車信息未蝌。
1.8.5 cookie與緩存
緩存那些與cookie事務(wù)有關(guān)的文檔時(shí)要特別小心。你不會(huì)希望給用戶分配一個(gè)過去某些用戶用過的cookie茧妒,或者更糟糕的是萧吠,向一個(gè)用戶展示其他人私有文檔的內(nèi)容。
cookie和緩存的規(guī)則并沒有很好地建立起來桐筏。下面是處理緩存時(shí)的一些指導(dǎo)性規(guī)則:
* 如果無法緩存文檔纸型,要將其標(biāo)識(shí)出來
* 緩存 Set-Cookie 首部時(shí)要小心
* 小心處理帶有 Cookie首部的請(qǐng)求
1.9 HTTPS——細(xì)節(jié)介紹
HTTPS是最常見的HTTP安全版本。HTTPS將HTTP協(xié)議與一組強(qiáng)大的對(duì)稱梅忌、非對(duì)稱和基于證書的加密技術(shù)結(jié)合在一起狰腌,使得HTTPS不僅很安全,而且很靈活牧氮,很容易在處于無序狀態(tài)的琼腔、分散的全球互聯(lián)網(wǎng)上進(jìn)行管理。
1.9.1 HTTPS概述
HTTPS就是在安全的傳輸層上發(fā)送的HTTP踱葛。HTTPS沒有將未加密的HTTP報(bào)文發(fā)送給TCP丹莲,并通過世界范圍內(nèi)的因特網(wǎng)進(jìn)行傳輸,它在將HTTP報(bào)文發(fā)送給TCP之前尸诽,先將其發(fā)送了一個(gè)安全層甥材,對(duì)其進(jìn)行加密。
HTTP安全層是通過SSL及其現(xiàn)代替代協(xié)議TLS來實(shí)現(xiàn)的性含。
1.9.2 建立安全傳輸
在未加密HTTP中洲赵,客戶端會(huì)打開一條到Web服務(wù)器端口80的TCP連接,發(fā)送一條請(qǐng)求報(bào)文,接收一條響應(yīng)報(bào)文板鬓,關(guān)閉連接悲敷。
在HTTPS中,客戶端首先打開一條到Web服務(wù)器端口443(默認(rèn)端口)的連接俭令。一旦建立了TCP連接后德,客戶端和服務(wù)器就會(huì)初始化SSL層,對(duì)加密參數(shù)進(jìn)行溝通抄腔,并交換密鑰瓢湃。握手完成以后,SSL初始化就完成了赫蛇,客戶端就可以將請(qǐng)求報(bào)文發(fā)送給安全層了绵患。在將這些報(bào)文發(fā)送給TCP之前,要先對(duì)其進(jìn)行加密悟耘。
1.9.3 SSL握手
在發(fā)送已加密的HTTP報(bào)文之前落蝙,客戶端和服務(wù)器要進(jìn)行一次SSL握手,在這個(gè)握手過程中暂幼,它們要完成以下工作:
* 交換協(xié)議版本號(hào)
* 選擇一個(gè)兩端都了解的密碼
* 對(duì)兩端的身份進(jìn)行認(rèn)證
* 生成臨時(shí)的會(huì)話密鑰筏勒,以便加密信道
推薦:圖靈程序設(shè)計(jì)叢書? 《HTTP 權(quán)威指南》